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

этот небольшой пример:

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.

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

Ответ 1

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

 cat make-code-footnotesize.tex

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

У меня есть такие фрагменты для всех разных размеров: huge, LARGE, LARGE, LARGE, normalsize, small, footnotesize, scriptsize, tiny.

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

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

Результат:

2ihIr.png

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

Ответ 2

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

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

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

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

Ответ 3

Я разработал для этой цели фильтр для 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 ...

Ответ 4

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

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

Ответ 5

Я использую pandoc с опцией --listings и пользовательским шаблоном eisvogel.latex.

  • Загрузите оригинальный eisvogel-шаблон в новый файл eisvogel_custom.latex
  • Откройте файл, найдите строку basicstyle = \color{listing-text-color}\small\ttfamily{}\linespread{1.15},
  • Измените \small на \footnotesize или \tiny
  • Сохранить файл

Теперь запустите pandoc со следующими параметрами:

pandoc --pdf-engine=xelatex --template=eisvogel_custom --listings -o block-code.pdf block-code.txt

Чтобы отключить нумерацию строк, добавьте следующие строки вверху block-code.txt

---
listings-disable-line-numbers: true
...

Все варианты можно найти здесь: https://github.com/Wandmalfarbe/pandoc-latex-template#custom-template-variables

Протестировано с pandoc 2.6 с использованием docker-image dalibo/pandocker: стабильный