Latex Pandoc生成的PDF:更改列表编号样式
如何更改Pandoc生成的有序列表中的数字样式 对于以下降价输入Latex Pandoc生成的PDF:更改列表编号样式,latex,markdown,pandoc,Latex,Markdown,Pandoc,如何更改Pandoc生成的有序列表中的数字样式 对于以下降价输入 1. One 2. Two 1. Sub 1 2. Sub 2 Pandoc生成以下输出 \begin{enumerate} \def\labelenumi{\arabic{enumi}.} \itemsep1pt\parskip0pt\parsep0pt \item One \item Two \begin{enumerate} \def\labelenumii{\arabic{enumii}
1. One
2. Two
1. Sub 1
2. Sub 2
Pandoc生成以下输出
\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仅跳过以这种方式定义的列表的样式设置,并将标准标记符号解释为使用普通数字设置列表样式的指令。希望在未来的版本中,它会更灵活一些,并将添加对列表中嵌套数字的支持。编辑
添加\def\labelenumi{}
部分的latex编写器的属性检查numstyle==DefaultStyle&&numdelim==DefaultDelim
。正如@oleg所发现的,这可以通过#.
列表标记来完成,因此这应该可以工作:
---
header-includes:
- \renewcommand{\labelenumii}{\theenumii}
- \renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}
---
#. One
#. Two
#. Sub 1
#. Sub 2
有两个功能请求要求在问题跟踪器(和)上提供本机降价解决方案,以及一个
预编辑答案
当然,您可以始终编译到latex,对文件进行后处理以删除那些\def\labelenumi{}
行,然后编译latex文件。下面是一个使用标准latex模板的示例
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编译命令。谢谢您的详细回答。现在看来,我仍然坚持使用默认编号,因为对于这样一个简单的问题来说,在编译过程中再添加一个步骤就太过了。不过有一个钩子。在代码中,仅当样式不是DefaultStyle且分隔符不是DefaultDelim时,才会生成\def指令。我不知道,但是,如何强迫他们有这些值我实际上不明白为什么默认值不是DefaultStyle。。。您可以使用
pandoc test.md-t native
测试列表是否为OrderedList(1,十进制,句点)
。。。我无法将其更改为默认值,但这可能是可能的。说得好。它可能以某种方式连接到列表项的实际格式(例如,使用1.代替#)。我将尝试尝试一下,但如果Pandoc不创建“无样式”列表,这将是非常令人失望的,因为这是人们用降价方式编写列表的最常见方式。我的vim Markdown插件不会令人高兴幸运的是,事实证明这正是Pandoc所做的。如果使用“#.”作为标记有序列表的方式,则生成的代码没有\def指令,因此可以进行自定义。我希望他们选择用标准的“1”符号来代替。我将更新问题,并接受您的答案,因为它已导致解决方案。很高兴看到有一个解决办法。我认为你的更新应该是一个答案,你应该发布并接受它。@scoa,你的编辑使你的答案完整,因此我宁愿接受它而不是我的。谢谢你的帮助