You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandoc+CSL生成Beamer时,换行符
被原样渲染问题

问题描述

我正在为机构制作Beamer演示模板,使用--citeproc参数配合德国考古研究所的特定CSL样式。目前文档处理、文内引用和参考文献渲染均正常,但存在两个问题:

  • 含URL或DOI的条目里,本该触发换行的
被原样渲染,未实现换行效果
  • DOI前出现多余空格

对应的CSL代码片段:

<macro name="url">
  <choose>
    <if match="any" variable="URL">
      <group display="block" prefix=",&amp;#10;"> <!-- Here the line feed character -->
        <text variable="URL" text-case="lowercase" prefix="&lt;" suffix="&gt;"/>
        <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=",&amp;#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. &#10;未生效的原因

你在CSL里用的&amp;#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="&lt;" suffix="&gt;"/>
        <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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:47:33