Можно ли написать условные операторы в шаблоне pandoc на основе значений переменных?
default.beamer
Шаблон pandoc по умолчанию для проектора LaTex имеет следующую строку:
$if(theme)$
\usetheme{$theme$}
$endif$
Работает ли тест для определенной темы? Что-то вроде:
$if(theme)$
\usetheme{$theme$}
$if(Berlin)$
\setbeamertemplate{headline}
{}
$endif$
$endif$
В руководстве пользователя Pandoc - Pandoc я нашел это:
$if(variable)$
X
$else$
Y
$endif$
Это будет включать X в шаблон, если переменная имеет ненулевое значение; в противном случае он будет содержать Y. X и Y являются заполнителями для любого допустимого текста шаблона и могут включать интерполированные переменные или другие условные выражения. Секция $else$ может быть опущена.
И больше информации о зацикливании переменных с несколькими значениями, однако я не могу найти информацию о том, как проверить определенное значение переменной - нет true
или же false
, но Darmstadt
или же Berlin
в конкретном примере темы LaTex Beamer.
Может ли это работать как-то?
1 ответ
Вы можете просто использовать условное выражение LaTeX
\usepackage{ifthen}
$if(theme)$
\usetheme{$theme$}
\expandafter\ifstrequal\expandafter{$theme$}{Berlin}{%
\setbeamertemplate{headline}}{%
% if false
}}%
$endif$
Сам Pandoc не позволяет этого из коробки.
Есть два способа решить это:
- Написание собственного фильтра или его поиск. Фильтры Pandoc имеют документ, сериализованный в JSON, как на входе, так и на выходе. Имея такой фильтр, вы можете отмечать разделы с помощью пользовательских атрибутов заголовка.
- Предварительная обработка ввода Pandoc с использованием любого препроцессора, подобного упомянутому здесь.
Для меня второй подход предпочтительнее, потому что:
- не все в Pandoc могут быть аннотированы пользовательскими атрибутами;
- Модель заголовков плоская, например, заголовок - это не атрибут чего-то похожего на раздел, а только место в тексте.