2015-11-11 24 views
3

更改Pandoc生成的有序列表中数字样式的方法是什么?Pandoc生成的PDF:更改列表编号样式

对于下面的降价输入

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只会为这种定义的列表跳过样式,并将标准Markdown表示法解释为用简单数字表示样式列表的指令。希望在未来的版本中它会更加灵活一些,并且会增加对列表中嵌套数字的支持。

+0

很高兴看到有一种解决方法。我认为你的更新应该是一个答案,但你应该这样发布并接受它。 – scoa

+0

@scoa,您的编辑会让您的答案完整,因此我宁愿接受它,而不是我的答案。感谢您的帮助 –

回答

1

编辑

乳胶笔者,增加了\def\labelenumi{}部分检查numstyle == DefaultStyle && numdelim == DefaultDelimThis function。作为@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 

enter image description here

但是你的文档的所有名单都将受到影响,而你需要编写乳胶编译命令自己。

+0

谢谢您的详细解答。看起来像现在我坚持使用默认编号,因为在编译过程中增加一个步骤对于这样一个简单的问题来说是一个矫枉过正。虽然有一个钩子。在代码中,只有当style不是DefaultStyle且分隔符不是DefaultDelim时才会生成\ def指令。我不知道,但是,如何强制他们获得这些值 –

+0

我其实不明白为什么默认值不是DefaultStyle ...您可以使用'pandoc test.md -t native'测试该列表是否为' OrderedList(1,Decimal,Period)'......我无法将其更改为默认值,但这可能是可能的。 – scoa

+0

好点。它可能以某种方式与列表项目的实际格式相关联(例如,使用1而不是#)。我会尝试尝试,但是如果Pandoc不会为人们在Markdown中编写列表的最常见方式创建“无风格”列表,那么这将会非常令人失望。我的vim Markdown插件不会很高兴 –