Pandoc 生成的 PDF:更改列表编号样式

Pandoc-generated PDF: Change list numbering style

如何改变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 符号解释为使用纯数字样式列表的指令。希望在未来的版本中它会更灵活一些,并将添加对列表中嵌套数字的支持。

编辑

This function 添加 \def\labelenumi{} 部分的 latex writer 检查 numstyle == DefaultStyle && numdelim == DefaultDelim。正如@oleg 发现的那样,这可以通过 #. 列表标记来完成,因此这应该有效:

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

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

有两个功能请求要求在问题跟踪器上提供本机降价解决方案 (336 and 1627), as well as a discussion on the mailing list

预编辑答案

当然,您始终可以编译为 Latex,对文件进行后处理以删除那些 \def\labelenumi{} 行,然后编译 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编译命令。