Как изменить размер шрифта примера кода в выводе LaTeX PDF с помощью sphinx? - PullRequest
9 голосов
/ 28 марта 2012

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

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

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

Ответы [ 3 ]

10 голосов
/ 01 апреля 2012

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

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

4 голосов
/ 31 марта 2012

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

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

Например,

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

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

Например,

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

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

Итак, вы хотите заменить \code подходящей заменой.

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

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

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

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

Другие важные вопросы StackOverflow включают

0 голосов
/ 26 августа 2014

Вы можете добавить измененную команду Verbatim в вашу PREAMBLE (обратите внимание, в этом случае размер шрифта изменяется на крошечный)

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