【问题标题】:Creating minimal LaTeX syntax from reStructuredText with docutils使用 docutils 从 reStructuredText 创建最小的 LaTeX 语法
【发布时间】:2012-04-07 03:09:50
【问题描述】:

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

例如,Docutils 会写一个简单的小节

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

当我只需要时

\subsection{About}

我发现 Pandoc 没有创建太多额外的语法,但它不支持 CSV 表,所以我不能将它用于我的项目。

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

【问题讨论】:

  • 不是一个完整的答案,但请查看 this 博客文章,其中描述了如何修改 HTML 输出以从部分标题中删除无关标记。尤其是关于函数visit_sectiondepart_section 的部分。为 LaTeX 输出修改它应该不会太费力。

标签: python latex restructuredtext docutils


【解决方案1】:

除了我的评论之外,应该可以继承 docutils.writers.latex2e.Writerdocutils.writers.latex2e.LaTeXTranslator 以自定义 docutils LaTeX 编写器的输出,其方式类似于 this 博客文章,其中描述了如何自定义 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 中对这些类所做的任何更改中受益。上述方法可行,但在未来的版本中可能需要更改。

【讨论】:

  • 谢谢。如果您已经这样做了,那么您应该发布并接受您自己的答案,而不是不回答问题。
  • 好的,我下次再做。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2015-08-26
相关资源
最近更新 更多