2012-03-27 7 views
8

Uważam, że domyślna czcionka przykładowego kodu w PDF generowanym przez sfinksa jest zdecydowanie za duża.Jak zmienić przykładowy rozmiar czcionki kodu w pliku wyjściowym LaTeX PDF z Sfinksem?

Próbowałem zabrudzić sobie ręce w wygenerowanym pliku .tex wstawiając polecenia rozmiaru czcionki, takie jak \tiny powyżej bloków kodu, ale powoduje to, że linia powyżej bloku kodu jest mała, a nie sam blok kodu.

Nie jestem pewien, co jeszcze mogę zrobić - jestem absolutnie początkującą osobą z LaTeX.

Odpowiedz

8

poradziłem sobie. Pygments używa bloku \begin{Verbatim} do oznaczania fragmentów kodu, który używa pakietu fancyvrb. documentation I found (warning: PDF) wspomina o opcji formatcom dla wiersza dosłownego.

Pygments' latex writer source wskazuje zmienną instancji, verboptions jest zszywany na koniec każdego verbatim bloku i Sfinksa”latex bridge pozwala zastąpić LatexFormatter.

Na szczycie mojego pliku conf.py, dodałem następujące:

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 było moje preferencje, ale lista rozmiarów jest dostępna here

+0

Jedyna odpowiedź, która zadziałała dla mnie. +1 – Trilarion

4

Aby zmienić opcje wyjścia Latex w sfinksie, należy ustawić odpowiedni klucz latex_elements w pliku konfiguracyjnym kompilacji, dokumentacja na tym znajduje się here.

Aby zmienić rozmiar czcionki dla wszystkich czcionek, należy użyć pointsize.

E.g.

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

Aby zmienić inne ustawienia lateksowe, które są wymienione w documetntation używać preamble lub użyć niestandardowej klasy dokumentu w latex_documents.

E.g.

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

Odczyt kodu źródłowego Sphinx domyślnie kodu w LatexWriter kod ustawia fragmentów do \code lateks prymitywne.

Więc chcesz zastąpić \code odpowiednim zamiennikiem.

Dokonuje się tego, włączając polecenie Latex, takie jak \newcommand{\code}[1]{\texttt{\tiny{#1}}}, jako część preambuły lub jako część niestandardowej klasy dokumentu dla sfinksa, która zostanie ustawiona jako latex_documents jako klucz klasy dokumentu. Przykładowa klasa dokumentu Sphinx jest dostępna pod adresem here.

Inne niż tylko co to mniejszy z \tiny można zmodyfikować klasę latex_documents dokumentów lub preambułę latex_elements do korzystania z oferty pakietów Latex na bardziej fantazyjne kod formatowania jak w pytaniu StackOverflow here.

Zawartość pakietu z połączonego postu byłaby niestandardową klasą dokumentów, a definicja redefinicji podobna do \newcommand{\code}[1]{\begin{lstlisting} #1 \end{lstlisting}} byłaby częścią preambuły.

Alternatywnie można napisać rozszerzenie sfinksa, które rozszerza domyślny program piszący o lateksie z wybranym niestandardowym edytorem lateksowym, ale to znacznie więcej wysiłku.

Inne istotne pytania StackOverflow obejmują

0

Możesz dodać zmodyfikowaną komendę Verbatim do swojej PREAMBUŁA (Uwaga: w tym przypadku rozmiar czcionki zostanie zmieniony na mały)

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