如何在使用Sphinx生成的LaTeX PDF输出中改变代码示例的字体大小?

12

我发现Sphinx生成的PDF中默认的代码示例字体太大了。

我尝试在生成的.tex文件中插入字体大小命令,例如在代码块上方插入\tiny,但这只会使代码块上面的一行变得非常小,而不是代码块本身。

我不确定还有什么其他办法 - 我对LaTeX毫无经验。

3个回答

12

我解决了。Pygments使用\begin{Verbatim}块来表示代码片段,它使用fancyvrb包。我找到的文档(警告:PDF)提到verbatim块的formatcom选项。

Pygments的latex writer源码表明,一个实例变量verboptions被钉在每个verbatim块的末尾,Sphinx的latex bridge允许您替换LatexFormatter

在我的conf.py文件顶部,我添加了以下内容:

from sphinx.highlighting import PygmentsBridge
from pygments.formatters.latex import LatexFormatter

class CustomLatexFormatter(LatexFormatter):
    def __init__(self, **options):
        super(CustomLatexFormatter, self).__init__(**options)
        self.verboptions = r"formatcom=\footnotesize"

PygmentsBridge.latex_formatter = CustomLatexFormatter

\footnotesize是我偏爱的字体大小,但是这里提供了一个可用的大小列表


1
可用的字体大小在 https://en.wikibooks.org/wiki/LaTeX/Fonts#Built-in_sizes 上。 - yoonghm
在 Sphinx 4.5.0 中运行起来非常顺畅。干杯! - neuro

4
在sphinx中更改Latex输出选项,需要在构建配置文件中设置相关的latex_elements键。关于此的文档可以在这里找到。
要更改所有字体的字体大小,请使用pointsize
例如,
latex_elements = {
   'pointsize':'10pt'
}

如果需要修改文档中列出的其他Latex设置,请使用preamble或在latex_documents中使用自定义文档类。

例如:

mypreamble='''customlatexstuffgoeshere
'''
latex_elements = {
'papersize':'letterpaper',
'pointsize':'11pt',
'preamble':mypreamble
}

默认情况下,LatexWriter中的代码将代码片段设置为\code LaTeX原语。您需要做的是用适当的替换来替换\code
这可以通过包含类似于\newcommand{\code}[1]{\texttt{\tiny{#1}}}的Latex命令来完成,该命令可以作为导言部分的一部分或作为sphinx的自定义文档类的一部分,在latex_documents中设置为documentclass键。示例sphinx文档类在此处可用。
除了使用\tiny使其更小之外,您还可以修改latex_documents文档类或latex_elements导言部分,以使用Latex软件包列表进行更高级的代码格式设置,例如StackOverflow问题here中的设置。
链接帖子中的软件包内容将作为自定义文档类,并且与\newcommand{\code}[1]{\begin{lstlisting} #1 \end{lstlisting}}类似的重新定义将成为导言部分的一部分。
或者,您可以编写一个sphinx扩展程序,通过自定义所选的latex编写器来扩展默认的latex编写器,但这需要更大的工作量。
其他相关的StackOverflow问题包括:
- 在Sphinx中创建数学宏 - 如何禁用从sphinx生成的LaTeX输出中的颜色? - sphinx定制latexpdf输出?

1
您可以在PREAMBLE中添加一个修改过的Verbatim命令(请注意,在此情况下,字体大小已更改为tiny)。
\renewcommand{\Verbatim}[1][1]{%
  % list starts new par, but we don't want it to be set apart vertically
  \bgroup\parskip=0pt%
  \smallskip%
  % The list environement is needed to control perfectly the vertical
  % space.
  \list{}{%
  \setlength\parskip{0pt}%
  \setlength\itemsep{0ex}%
  \setlength\topsep{0ex}%
  \setlength\partopsep{0pt}%
  \setlength\leftmargin{10pt}%
  }%
  \item\MakeFramed {\FrameRestore}%
  \tiny  % <---------------- To be changed!
  \OriginalVerbatim[#1]%
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接