Можно ли написать условные операторы в шаблоне 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 не позволяет этого из коробки.

Есть два способа решить это:

  1. Написание собственного фильтра или его поиск. Фильтры Pandoc имеют документ, сериализованный в JSON, как на входе, так и на выходе. Имея такой фильтр, вы можете отмечать разделы с помощью пользовательских атрибутов заголовка.
  2. Предварительная обработка ввода Pandoc с использованием любого препроцессора, подобного упомянутому здесь.

Для меня второй подход предпочтительнее, потому что:

  • не все в Pandoc могут быть аннотированы пользовательскими атрибутами;
  • Модель заголовков плоская, например, заголовок - это не атрибут чего-то похожего на раздел, а только место в тексте.
Другие вопросы по тегам