Как изменить размер шрифта примера кода в выводе LaTeX PDF с помощью sphinx?

Я нахожу шрифт примера кода по умолчанию в PDF, сгенерированном sphinx, слишком большим.

Я попытался испачкать руки в сгенерированном .файл Tex вставки команд размер шрифта как tiny над кодовыми блоками, но это просто делает строку над кодовым блоком крошечной, а не сам кодовый блок.

Я не уверен, что еще делать - я абсолютный новичок с LaTeX.

3 ответов


я понял. Pygments использует \begin{Verbatim} блок для обозначения фрагментов кода, который использует fancyvrb пакета. The документация, которую я нашел (предупреждение: PDF) упоминает formatcom опция для блока verbatim.

устройстве' источник latex writer указывает переменную экземпляра,verboptions, прикрепляется к концу каждого дословного блока и Сфинкса'латекс мост можно заменить на 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 было мое предпочтение, но список размеров доступны здесь


чтобы изменить параметры вывода Latex в sphinx, установите соответствующий latex_elements ключ в файле конфигурации сборки, документация по этому находится здесь.

чтобы изменить размер шрифта для всех шрифтов, используйте pointsize.

Е. Г.

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

чтобы изменить другие параметры Latex, перечисленные в documetntation, используйте preamble или используйте пользовательский класс документа в latex_documents.

Е. Г.

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

читать Сфинкса исходный код по умолчанию код LatexWriter устанавливает фрагменты кода в \code латекс примитивно.

так что вы хотите сделать, это заменить \code С подходящей замены.

это делается путем включения команды Latex, такой как \newcommand{\code}[1]{\texttt{\tiny{#1}}} либо как часть преамбулы, либо как часть пользовательского класса документа для sphinx, который устанавливается в latex_documents как ключ documentclass. Доступен пример класса документов sphinx здесь.

кроме как просто сделать его меньше с \tiny вы можете изменить latex_documents класс документа или latex_elements преамбула для использования списков пакетов Latex для более причудливого форматирования кода, как в вопросе StackOverflow здесь.

материал пакета из связанного сообщения будет идти как пользовательский класс документа и переопределение, подобное \newcommand{\code}[1]{\begin{lstlisting} #1 \end{lstlisting}} будет частью преамбулы.

альтернативно вы могли бы напишите расширение sphinx, которое расширяет LaTeX writer по умолчанию с помощью пользовательского latex writer по вашему выбору, хотя это значительно больше усилий.

другие соответствующие вопросы StackOverflow включают


вы можете добавить измененную команду 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]%
}