如何使用sphinx更改LaTeX PDF输出中的代码示例字体大小?

时间:2012-03-27 23:43:19

标签: python documentation latex python-sphinx

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

我已经尝试在生成的.tex文件中插入代码块上方的\tiny等字体大小命令,但它只是使代码块上方的行变得很小,而不是代码块本身。

我不知道还能做什么 - 我是LaTeX的初学者。

3 个答案:

答案 0 :(得分:10)

我解决了这个问题。 Pygments使用\begin{Verbatim}块来表示代码片段,它使用fancyvrb包。 documentation I found (warning: PDF)提到了逐字块的​​formatcom选项。

Pygments'latex writer source表示实例变量verboptions被装订到每个逐字块的末尾,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是我的首选,但可以使用here

列出尺寸列表

答案 1 :(得分:4)

要在sphinx中更改Latex输出选项,请在构建配置文件中设置相关的latex_elements键,其中的文档位于here

要更改所有字体的字体大小,请使用pointsize

E.g。

latex_elements = {
   'pointsize':'10pt'
}

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

E.g。

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

默认情况下,读取Sphinx源代码时,LatexWriter中的代码会将代码片段设置为\code latex原语。

所以你要做的就是用合适的替代品替换\code

这是通过将\newcommand{\code}[1]{\texttt{\tiny{#1}}}之类的Latex命令作为前导码的一部分或作为sphinx的自定义文档类的一部分来完成的,该文档类在latex_documents中设置为文档类键。一个示例sphinx文档类是可用的here

除了使用\tiny缩小它之外,您可以修改latex_documents文档类或latex_elements前导码以使用Latex包列表来获得更多花哨的代码格式,例如StackOverflow问题here

链接帖子中的包裹内容将作为自定义文档类,类似于\newcommand{\code}[1]{\begin{lstlisting} #1 \end{lstlisting}}的重新定义将成为序言的一部分。

或者,您可以编写一个sphinx扩展,使用您选择的自定义乳胶编写器扩展默认的乳胶编写器,但这需要更多的努力。

其他相关的StackOverflow问题包括

答案 2 :(得分:0)

您可以在PREAMBLE中添加修改后的Verbatim命令(注意,在这种情况下,字体大小会变为微小)

\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]%
}