2014-11-18 10 views
8

questo piccolo esempio:Come impostare la dimensione del carattere per i blocchi di codice nel markdown pandoc?

An example code snippet: 

~~~{.cpp} 
class A 
{ 
    public: 
     static void f1() {}; 

     virtual void f2() = override; 
}; 
~~~ 

può essere utilizzato per generare un file PDF con:

pandoc -o block-code.pdf block-code.txt 

conseguente

Font sizes of the code snippet and the text are equal.

Le dimensioni dei caratteri sia il codice e la testo uguale. Come posso modificare la dimensione del carattere dei frammenti di codice per l'output pandoc pdf (LaTex)?

risposta

5

Ho risolto questo problema per me scrivendo diversi frammenti di LaTeX in file extra che tenere in giro:

cat make-code-footnotesize.tex 

    \renewenvironment{Shaded} {\begin{snugshade}\footnotesize} {\end{snugshade}} 

ho tali frammenti per tutte le diverse dimensioni: huge, LARGE, Large, large, normalsize, small, footnotesize, scriptsize, tiny.

applicarle durante l'esecuzione pandoc, è sufficiente includere i rispettivi LaTeX snippet con il parametro -H:

pandoc -o block-code.pdf block-code.txt \ 
    -H make-code-scriptsize.tex --highlight-style=espresso 

risultati:

Nota, controlla le dimensioni del carattere per tutti i blocchi di codice nel PDF. Non ti permette di variare le dimensioni da un blocco all'altro. Naturalmente, non funziona anche per HTML, ODT, EPUB o altro output - solo per output LaTeX e PDF.

+0

Può il 'renewenvironment' essere aggiunto a un modello Pandoc lattice? Ho provato ad aggiungerlo e dopo aver aggiunto '\ usepackage {framed}' Ricevo un messaggio di errore '! Errore LaTeX: colore non definito 'shadecolor''. – tmaric

+0

@tmaric: l'ambiente ombreggiato diventerà attivo solo se si utilizza l'evidenziazione della sintassi. –

+1

Ottengo lo stesso 'Pacchetto xcolor Errore: Colore indefinito 'shadecolor'' ogni volta che provo uno stile non espresso. Sono stato in grado di definirlo aggiungendo '\ colorlet {shadecolor} {white}' al mio modello. – Rovanion

1

Su pandoc 1.16.0.2 ho avuto lo stesso problema ma non è stato risolto con le risposte precedenti.

Quando si utilizza l'evidenziazione codice predefinito di questa versione e l'esportazione con beamer (-t beamer) mi sono segue generato in uscita (per l'emissione di un comando jmeter):

\begin{Shaded} 
\begin{Highlighting}[] 
\KeywordTok{./jmeter.sh} \NormalTok{-q prod.properties -p jmeter.properties -n -t mytest.jmx -l mylog.log} 
\end{Highlighting} 
\end{Shaded} 

Effettuando una ricerca direttamente nel codice Pandoc con grep -r "Highlighting" * I seguente codice trovato:

\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} 

E ho sostituito con il seguente per avere una dimensione molto piccola dei caratteri nel mio modello personalizzato Pandoc (vedi pandoc -D beamer):

\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},fontsize=\tiny} 

Ora ho una dimensione di carattere più piccolo eseguendo il comando seguente:

pandoc -t beamer input.md -o output.pdf --template beamer.template 
1

ho sviluppato un filtro per Pandoc https://github.com/chdemko/pandoc-latex-fontsize per questo scopo:

installare questo filtro con pip:

$ pip install pandoc-latex-fontsize 

aggiungere ad esempio

--- 
pandoc-latex-fontsize: 
    - classes: [c, listing] 
    size: footnotesize 
--- 

al blocco di metadati e specificare le liste che si desidera essere di dimensioni footnotesize:

~~~{.c .listing} 
int main(void) { 
    return 0; 
} 
~~~ 

quindi eseguire Pandoc con

$ pandoc --filter pandoc-latex-fontsize ... 
0

Si può semplicemente aggiungere \small prima dell'inizio del codice snippet e \normalsize dopo (per tornare alla normalità).

È anche possibile aggiungere altri comandi simili. Ad esempio, se il tuo documento è doppio, puoi aggiungere \singlespace prima dello snippet di codice e \doublespacing dopo.

Per far funzionare tutto questo è necessario aggiungere nel yaml all'inizio del documento seguente:

--- 
header-includes: 
    - \usepackage{setspace} 
---