【问题标题】:Making Sphinx produce untypogrified code blocks in PDF output使 Sphinx 在 PDF 输出中生成未分类的代码块
【发布时间】:2013-04-22 23:49:17
【问题描述】:

PDF 输出中的代码块看起来很丑(检查引号):

我使用的是 1.1.3 版的 Sphinx,并使用以下命令生成文档:

$ make latexpdf

另外,从 PDF 中复制 sn-p 会破坏粘贴时的缩进:

@view_config(route_name=’hello’)
def hello_world(request):
return Response(’Hello World!’)

我希望这样:

@view_config(route_name=’hello’)
def hello_world(request):
    return Response(’Hello World!’)

这样会更好:

@view_config(route_name='hello')
def hello_world(request):
    return Response('Hello World!')

【问题讨论】:

  • 请注意,对于更新的 Sphinx(我使用 1.3.5 进行了测试),当引号在代码块中时,没有什么特别的事情可以避免引号转换。

标签: python latex python-sphinx


【解决方案1】:

Sphinx 确实是一款出色的工具,但我对 latexpdf 目标的默认 PDF 输出也有一些问题。

具体来说:

  • 代码块中的单引号被转换为在源代码中看起来不正确的尖锐样式引号。
  • 代码块没有从正文中缩进。对我来说,这会降低它们的可读性。
  • 我更喜欢其他字体和 pygments,但这只是个人选择,可以配置。

其中一些问题可以在 Sphinx conf.py 的 LaTeX 前导部分中修复,但 Sphinx 将引号修改为自定义 LaTeX 实体,因此不能使用 upquote LaTeX 包来更正它们。

在对不同的配置选项进行了大量实验后,我最终编写了一个小脚本来在构建 PDF 之前修改 LaTeX 源代码。脚本是here,我想要生成的输出是here。 (为了比较,here 是同一文档的默认输出。)

如果有人有更简洁的解决方案,例如可以完全通过 Sphinx conf.py 完成的解决方案,那么ReadTheDocs 会接收到更改,那么我会感兴趣。

此外,从 PDF 复制和粘贴时丢失缩进的问题可能不是 Sphinx/LaTeX 问题。

【讨论】:

    【解决方案2】:

    这只是部分答案,可能会导致最终解决方案。要在 Sphinx 中为 HTML 输出禁用印刷引号(也称为弯引号或智能引号),请将 conf.py 中的默认设置更改为 SmartyPants from True to False

    我假设人们可以在 Sphinx 中找到转换引号的函数,并使用来自 HTML 输出的相同逻辑并将其应用于 PDF 输出。

    【讨论】:

    • 此选项现在不再有效(Sphinx 1.6.2? 和 1.7.dev20170612)。
    • @johndodo for Sphinx ≥1.6,见github.com/rtfd/readthedocs.org/issues/2940
    • 不错且有趣的时机(5 天前)。不幸的是,我没有找到您的页面,因为它可以节省我一些时间,我反而浏览了 docutils 文档。但是修复文档是个好主意。
    【解决方案3】:

    The option proposed by Steve Piercy 现在不再有效(自 Sphinx 1.6 起):

    Deprecated since version 1.6: Use the smart_quotes option 
    in the Docutils configuration file (docutils.conf) instead.
    

    对我来说不明显的是如何应用此设置。您需要创建一个docutils.conf 文件并将其放入one of these locations

    • /etc/docutils.conf
    • ./docutils.conf
    • ~/.docutils

    最简单的选择是把它放在你构建文档的地方——YMMV。它至少应包含以下内容:

    [general]
    smart_quotes: no
    

    【讨论】:

    • 只是指出代码块不需要此(有效)信息。我测试只是为了确认 Sphinx 1.3.5 和当前的 1.6.2 代码块中的直引号没有被修改。
    • 是的。我首先想到的是 Sphinx 的错,实际上是我从其他地方复制了块,所以它已经损坏了。但我对 Sphinx 的失望在于,我花了很长时间才弄清楚如何应用此设置 - 所以我希望这个答案对将来的人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多