3

我正在制作一个 Python 脚本,该脚本采用多个具有 reStructuredText 语法的文本文件,并使用 Docutils 创建一个单一的 LaTeX 文件。一切都很好,除了 Docutils 创建了很多我不需要的额外语法。

例如,使用一个简单的小节 Docutils 将编写

\subsection*{\phantomsection%
About%
\addcontentsline{toc}{subsection}{About}%
\label{about}%

当我只需要

\subsection{About}

我已经看到 Pandoc 没有创建太多额外的语法,但是它不支持 CSV 表,所以我不能在我的项目中使用它。

我查看了所有 docutils 设置,但我真的找不到任何限制输出的选项。无论如何,我是否将 Docutils 设置为仅创建我想要的语法?

4

1 回答 1

2

根据我的评论,应该可以子类化docutils.writers.latex2e.Writerdocutils.writers.latex2e.LaTeXTranslator自定义 docutils LaTeX 编写器的输出,其方式类似于博客文章,其中描述了如何自定义 HTML 编写器。然而,通过docutils.writers.latex2e.LaTeXTranslator这个看起来比 HTML 编写器要复杂得多。

另一种方法是只修改这些类。要实现您想要的输出,只需执行以下操作(注意,这是针对 docutils 0.8.1):

  1. 备份目录path/to/docutils/writers/latex2e

  2. 修改path/to/docutils/writers/latex2e/__init__.py如下

    1. 在方法中LaTeXTranslator.visit_title替换行(第 2870 行)

      pdfanchor = '\\phantomsection%\n  '
      

      pdfanchor = ''
      
    2. 在方法中LaTeXTranslator.visit_title替换行(第 2878 行)

      self.context.append(self.bookmark(node) + '}\n')
      

      self.context.append('}\n')
      

注意:子类化要好得多docutils.writers.latex2e.Writerdocutils.writers.latex2e.LaTeXTranslator如果可能的话,这样您就可以从未来版本的 docutils 中对这些类所做的任何更改中受益。上述方法有效,但可能需要在未来的版本中进行更改。

于 2012-04-24T16:41:20.730 回答