如何移除pandoc转换LaTeX引文时自动添加的多余括号?
问题原因
pandoc解析LaTeX的\cite{}命令时,默认会将其识别为带括号的作者-年份引用格式,你在LaTeX代码中手动给\cite套了一层括号,转换后就会出现双重括号的问题。
解决方案1:调整LaTeX引用命令(无需额外配置)
你可以直接删除手动加的括号,将(\cite{McIntyre__2015})改为\cite{McIntyre__2015},pandoc自动生成的括号就能满足格式要求。如果坚持要手动控制括号,也可以将\cite替换为\citeauthor+\citeyear的组合,输出纯文本格式的作者和年份内容,不会自动加括号。
解决方案2:使用Lua过滤器修改引用属性
如果不想修改原有LaTeX内容,可以通过Lua过滤器强制关闭\cite的自动加括号逻辑,操作步骤如下:
- 新建一个Lua文件,命名为
remove-cite-brackets.lua,写入以下代码:
function Cite(citeElem) -- 将所有引用的模式修改为行内文本模式,不自动加括号 for _, citation in ipairs(citeElem.citations) do citation.mode = "AuthorInText" end return citeElem end
- 修改你的pandoc转换命令,新增
--lua-filter参数加载上述过滤器即可,修改后的命令如下:
pandoc ./main.tex -f latex -t odt --bibliography=./references.bib --csl ../apa.csl --lua-filter ./remove-cite-brackets.lua -o output.odt
实现逻辑
CSL引用规范内置两种基础输出模式:默认的NormalCitation模式会自动给引用内容包裹括号,AuthorInText模式仅输出纯文本格式的作者和年份、不加外层括号。上述过滤器就是将所有\cite命令对应的引用模式从默认的NormalCitation批量修改为AuthorInText,就不会出现自动加括号的问题,你手动添加的括号可以正常保留。
内容的提问来源于stack exchange,提问作者user2849019
相关产品推荐
相关产品推荐

