使用Pandoc+CSL生成Beamer时,换行符 被原样渲染问题
问题描述
我正在为机构制作Beamer演示模板,使用--citeproc参数配合德国考古研究所的特定CSL样式。目前文档处理、文内引用和参考文献渲染均正常,但存在两个问题:
- 含URL或DOI的条目里,本该触发换行的
被原样渲染,未实现换行效果 - DOI前出现多余空格
对应的CSL代码片段:
<macro name="url"> <choose> <if match="any" variable="URL"> <group display="block" prefix=",&#10;"> <!-- Here the line feed character --> <text variable="URL" text-case="lowercase" prefix="<" suffix=">"/> <choose> <if match="none" is-uncertain-date="accessed"> <date form="text" variable="accessed" prefix=" (" suffix=")"/> </if> </choose> </group> </if> </choose> </macro> <macro name="doi"> <choose> <if match="any" variable="DOI"> <group display="block" prefix=",&#10;"> <!-- Here the line feed character --> <text value="doi: " font-variant="small-caps"/> <text variable="DOI"/> </group> </if> </choose> </macro>
执行的Pandoc命令:
pandoc -t beamer -H header.tex --citeproc conference.md -o conference.pdf
期望输出效果:逗号后换行,DOI单独占一行。
问题原因与修复方案
1. 未生效的原因
你在CSL里用的&#10;是HTML转义后的换行符,但Pandoc输出Beamer(本质是LaTeX格式)时,不会解析HTML转义字符为LaTeX的换行指令。而且你已经给group设置了display="block"属性,这个属性本身就会让组内内容单独成块,自动触发换行,完全不需要额外添加换行符前缀。
2. DOI前多余空格的原因
CSL代码中<text value="doi: " font-variant="small-caps"/>的value包含了尾随空格,再加上display="block"带来的格式渲染,就会出现多余的空白。
修复后的CSL代码
<macro name="url"> <choose> <if match="any" variable="URL"> <group display="block" prefix=","> <text variable="URL" text-case="lowercase" prefix="<" suffix=">"/> <choose> <if match="none" is-uncertain-date="accessed"> <date form="text" variable="accessed" prefix=" (" suffix=")"/> </if> </choose> </group> </if> </choose> </macro> <macro name="doi"> <choose> <if match="any" variable="DOI"> <group display="block" prefix=","> <text value="doi:" font-variant="small-caps"/> <text variable="DOI" prefix=" "/> </group> </if> </choose> </macro>
关键说明
display="block"会让LaTeX输出时自动在组前添加换行(对应LaTeX的\par指令),因此无需手动添加换行符- 将DOI的空格移到
<text variable="DOI"/>的prefix属性中,能精准控制空格的产生,避免多余空白
内容的提问来源于stack exchange,提问作者lukeflo
相关产品推荐
相关产品推荐

