Как установить размер шрифта для блоков кода в pandoc markdown?

это маленький пример:

An example code snippet:

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

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

можно использовать для генерации вывода PDF с помощью:

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

в результате

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

размер шрифта как кода, так и текста, которые равны. Как изменить размер шрифта фрагментов кода для вывода PDF (LaTex) pandoc?

4 ответов


я решил эту проблему для меня, написав несколько фрагментов LaTeX в дополнительные файлы, которые я держу вокруг:

 cat make-code-footnotesize.tex

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

у меня есть такие фрагменты разного формата: huge, LARGE, Large, large, normalsize, small, footnotesize, scriptsize, tiny.

применять их при запуске pandoc, просто включите соответствующий фрагмент латекса с -H параметр:

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

результат:

Примечание, это управляет размерами шрифта для все блоки кода в формате PDF. Это не позволяет изменять размеры от блока к блоку. Конечно, он также не работает для HTML, ODT, EPUB или другого вывода-только для вывода LaTeX и PDF.


Я разработал фильтр для pandoc https://github.com/chdemko/pandoc-latex-fontsize для этой цели:

установите этот фильтр с pip:

$ pip install pandoc-latex-fontsize

добавить например

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

к Вашему блоку метаданных и укажите списки, которые вы хотите иметь размер footnotesize:

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

затем запустите pandoc с

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

вы можете просто добавить \small перед началом фрагмента кода и \normalsize после (чтобы вернуться к нормальному состоянию).

вы также можете добавить другие аналогичные команды. Например, если ваш документ doublespaced, вы можете добавить \singlespace перед фрагментом кода и \doublespacing после.

для этого вам нужно добавить в yaml в начале вашего документа следующее:

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

на pandoc 1.16.0.2 я получил ту же проблему, но не был решен предыдущими ответами.

при использовании подсветки кода по умолчанию этой версии и ее экспорте с помощью beamer (-t beamer) Я получил следующий сгенерированный вывод (для вывода команды 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}

путем поиска непосредственно в коде pandoc с grep -r "Highlighting" * я нашел следующий код:

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

и Я заменил его следующим, чтобы иметь крошечный размер шрифта в моем пользовательском шаблоне pandoc (см. pandoc -D beamer):

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

теперь у меня есть меньший размер шрифта, выполнив следующую команду:

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