【问题标题】:Pandoc-generated PDF: Change list numbering stylePandoc 生成的 PDF:更改列表编号样式
【发布时间】:2015-11-13 15:56:58
【问题描述】:

Pandoc生成的有序列表中数字的样式有什么改变?

对于下面的 Markdown 输入

1. One
2. Two
    1. Sub 1
    2. Sub 2

Pandoc 生成以下 Latex 输出

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\itemsep1pt\parskip0pt\parsep0pt
\item
  One
\item
  Two

  \begin{enumerate}
  \def\labelenumii{\arabic{enumii}.}
  \itemsep1pt\parskip0pt\parsep0pt
  \item
    Sub 1
  \item
    Sub 2
  \end{enumerate}
\end{enumerate}

这会产生以下 PDF 输出:

1. One
2. Two
    1. Sub 1
    2. Sub 2

虽然我正在努力实现

1. One
2. Two
    2.1. Sub 1
    2.2. Sub 2

我尝试使用这些命令重新定义默认模板中的编号样式

\renewcommand{\labelenumii}{\theenumii}
\renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}

但由于 Pandoc 为 labelenumii 生成显式定义,此解决方案不起作用。

更新

事实证明,问题可以通过使用#. 表示法而不是1. 来解决。无论出于何种原因,Pandoc 只为以这种方式定义的列表跳过样式,并将标准 Markdown 表示法解释为使用纯数字样式列表的指令。希望在未来的版本中它会更加灵活一些,并且会添加对列表中嵌套数字的支持。

【问题讨论】:

  • 很高兴看到有一种解决方法。我认为你的更新应该是一个答案,你应该这样发布并接受它。
  • @scoa,您的编辑使您的答案完整,因此我更愿意接受它而不是我的。感谢您的帮助

标签: latex markdown pandoc


【解决方案1】:

编辑

添加\def\labelenumi{} 部分的乳胶编写器的This function 会检查numstyle == DefaultStyle && numdelim == DefaultDelim。正如@oleg 发现的那样,这可以通过#. 列表标记来完成,所以这应该可以工作:

---
header-includes:
- \renewcommand{\labelenumii}{\theenumii}
- \renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}
---

#. One
#. Two
    #. Sub 1
    #. Sub 2

有两个功能请求要求问题跟踪器(3361627)以及一个 discussion on the mailing list 上的本机降价解决方案。

预编辑答案

当然,您总是可以编译成乳胶,对文件进行后处理以删除那些\def\labelenumi{} 行,然后编译乳胶文件。这是一个适用于标准乳胶模板的示例。

test.md

---
header-includes:
- \renewcommand{\labelenumii}{\theenumii}
- \renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}
---

1. One
2. Two
    1. Sub 1
    2. Sub 2

命令:

pandoc test.md -t latex -s | sed '/\\def\\labelenumi/d' > test.tex
xelatex test.tex

但是你文档的所有列表都会受到影响,需要你自己编写latex编译命令。

【讨论】:

  • 感谢您的详细解答。看起来现在我坚持使用默认编号,因为在编译过程中再添加一个步骤对于这样一个简单的问题来说是一种过度杀伤力。不过,有一个钩子。在代码中,仅当 style 不是 DefaultStyle 且 delimiter 不是 DefaultDelim 时才会生成 \def 指令。不过,我不知道如何强迫他们拥有这些价值观
  • 我其实不明白为什么默认值不是DefaultStyle...你可以用pandoc test.md -t native测试列表是OrderedList (1,Decimal,Period)...我没能把它改成默认,但这可能是可能的。
  • 好点。它可能以某种方式连接到列表项的实际格式(例如,使用 1. 而不是 #. 例如)。我会尝试尝试,但如果 Pandoc 没有为人们在 Markdown 中编写列表的最常见方式创建“无样式”列表,这将是非常令人失望的。我的 vim Markdown 插件会不开心
  • 不幸的是,这正是 Pandoc 所做的。如果使用“#”。作为标记有序列表的一种方式,生成的代码没有 \def 指令,因此可以进行自定义。我希望他们选择为标准“1”执行此操作。代替符号。我将更新问题并接受您的回答,因为它已经导致了解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 2021-01-09
  • 2016-03-03
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多