【问题标题】:Remove whitespace at top of sphinx pdflatex table of contents删除 sphinx pdflatex 目录顶部的空格
【发布时间】:2017-02-18 04:01:00
【问题描述】:

我正在将我的 python 包文档构建为 HTML 和乳胶 PDF。生成的默认latex pdf(手动类)在文本“CONTENTS”周围的目录顶部有大量空白。我对乳胶不是很熟悉,所以当我查看生成的 .tex 文件时,我没有看到任何告诉我如何删除空格的信息。

我四处寻找,找不到有效的乳胶解决方案。我还尝试将目录树上的:caption: 设置为空字符串,但这实际上会删除整个目录和我的所有内容。

谁能帮我解决这个问题?

【问题讨论】:

标签: python latex python-sphinx pdflatex


【解决方案1】:

Sphinx 英语语言的默认行为是使用 Bjarne 选项将 LaTeX 包 fncychap 用于章节标题。但它也加载包titlesec 用于一般的标题标题。它没有使用titlesec 进行特殊的章节定义,它只是收集fncychap 定义并将其包装在自己的钩子中。无论如何,让我们发现故事简短

\ttl@save@mkschap #1->\vspace *{50\p@ }{\parindent \z@ \raggedright \normalfont \interlinepenalty \@M \DOTIS {#1} \vskip 40\p@ }

在日志跟踪中,这是\@makeschapterheadfncychap 定义,由titlesec 在其自己的宏\ttl@save@mkschap 中保留。

fncychapsphinx.sty之前加载,没有钩子,

编辑:事实上,默认值为'\\usepackage[Bjarne]{fncychap}''fncychap' 键可以用来添加一些代码来重新定义未编号章节标题的fncychap 设置。这与下面使用'preamble' 键的方法没有什么不同,只是不需要知道titlesec 干预所有这些。

但是从最近的 Sphinx 1.5 开始,您可以使用自己的 Jinja 模板来处理乳胶内容。从您的 contents 看起来很小,我认为您使用的是旧版本的 Sphinx,因此我将选择 LaTeX 黑客变体,如下所示:

latex_elements = {
    # The paper size ('letterpaper' or 'a4paper').
    #
    # 'papersize': 'letterpaper',

    # The font size ('10pt', '11pt' or '12pt').
    #
    # 'pointsize': '10pt',

    # Additional stuff for the LaTeX preamble.
    #
    'preamble': r"""
\makeatletter
\def\ttl@save@mkschap #1{\vspace *{10\p@ }{\parindent \z@ \raggedright
    \color{blue}%
    \normalfont \interlinepenalty \@M \DOTIS {#1} \vskip 10\p@ }}
\makeatother
""",

    # Latex figure (float) alignment
    #
    # 'figure_align': 'htbp',
}

我在其中添加了一个\color{blue} 仅用于演示目的,并修改了您需要的\vspace\vskip 命令。

然而,图像显示,在 Contents 和 TOC 内容之间存在一些额外的垂直空间来源(即使使用 \vskip 0\p@,它仍然存在,但可以做到 \vskip -40\p@ ...),但我认为你在顶部之后内容上方的空间并且已经只使用了\vspace*{10pt} 减少了很多(在下面的屏幕截图中不可见)。

【讨论】:

  • 忘了说 Sphinx 删除了 编号 章节标题顶部的空格。但是 TOC 是用非编号的章节标题完成的,因此 Sphinx 不会改变初始垂直移动。
  • 非常感谢。这很好用。我目前使用的是 1.4.9,但如果我使用的是 1.5,我是否只需在 jinja 模板中添加您提供的序言部分?我在 sphinx 中找不到有关 jinja 模板的文档。
  • 很高兴它成功了... LaTeX 的 Jinja 模板在 the latex docs 的最后被简短地唤起,使用的默认模板可以在 here 找到。在<%= fncychap %> 的正下方,您可以定位\def\@makeschapterhead#1{...same def as in my post...};顺便说一句,我已经确定了标题后多余空间的来源:它在fncychap\DOTIS 中,也就是\renewcommand{\DOTIS}[1]{\CTV\FmTi{#1}\par\nobreak\vskip 40\p@} in fncychap.sty for Bjarne。
  • 当我调用模板方法时,我忘记了'fncychap'latex_elements 字典中的存在。它可能比模板方法更可取。在 conf.py 中,如果不使用原始字符串,反斜杠必须加倍。在这两个中我忘了说你必须在 LaTeX 代码周围有\makeatletter... \makeatother
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2018-05-29
  • 2019-01-11
相关资源
最近更新 更多