pandoc:在 rst 中自定义表格转换

pandoc:在 rst 中自定义表格转换

考虑以下mwe

麦格

\documentclass{article}

\begin{document}

\begin{table}
    \centering
    \caption{my caption}
    \label{mylabel}
    \begin{tabular}{lc}
        1 & 2\\
        3 & 4
    \end{tabular}
\end{table}
\end{document}

将文件转换为rst使用以下命令时

pandoc -o mwe.rst mwe.tex

然后我收到以下

最小二乘法

+-----+-----+
| 1   | 2   |
+-----+-----+
| 3   | 4   |
+-----+-----+

Table: my caption

不过,我希望输出是

.. _mylabel:

.. table:: my caption

   +-----+-----+
   | 1   | 2   |
   +-----+-----+
   | 3   | 4   |
   +-----+-----+

它做三件事:给表格一个编号、给表格一个标题、以及允许引用表格。

我该如何调整pandoc才能以我想要的格式输出tabular

答案1

首先,您没有向 pandoc 提供输出格式,因此它输出的是 markdown 而不是 RST:

$ pandoc -o mwe.rst mwe.tex -f latex -t rst

应该给出:

.. table:: my caption

   +-----+-----+
   | 1   | 2   |
   +-----+-----+
   | 3   | 4   |
   +-----+-----+

其次,不幸的是,pandoc 本身没有表格标签的概念。因此,当它读取表格时,它会忽略标签。

最好的方法是创建一个 pandoc 过滤器。使用排箫是一个很好的方法。

>> import panflute as pf
>> content = pf.convert_text(tex, input_format="latex")
>> content
[Table(TableRow(TableCell(Plain(Str(1))) TableCell(Plain(Str(2)))) TableRow(TableCell(Plain(Str(3))) TableCell(Plain(Str(4)))); alignment=['AlignLeft', 'AlignCenter'], width=[0, 0], rows=2, cols=2)]
>> content.insert(0, pf.RawBlock(".. _mylabel:", format="rst"))
...

相关内容