2015-08-25 1 views
2

Я хочу, чтобы некоторые разделы моего документа были только для заданного формата вывода. Например, у меня есть изображение, которое требует специальной обработки LaTeX, и я хочу использовать \ includegraphics для него. Но для версии epub я хочу стандартное поведение.Условные разделы в Pandoc markdown

Есть ли способ уценки Pandoc указать раздел, который должен обрабатываться только в данном контексте (LaTex vs epub). Шаблоны имеют условные обозначения. Я не видел эту функцию для уценки Pandoc.

Или есть другой способ борьбы с этим прецедентом?

+0

'echo '! [] (Img.jpg)' | pandoc -t latex' уже выводит '\ includegraphics' и т. д., правильно? – mb21

+0

Да, но как передать некоторые параметры в \ includegraphics, например. изменить размер, от уценки? – Arnaud

+0

Лучше подходит для http://tex.stackexchange.com/ –

ответ

3

Есть несколько возможностей:

  • Написать пользовательский фильтр, который модифицирует AST документа см pandoc scripting.
  • Используйте препроцессор, см. Это post about using gpp in front of pandoc.
  • В моделях ограниченного использования вы можете использовать \renewcommand в шаблоне LaTeX, чтобы изменить поведение команды LaTeX.
+0

Мне удалось заставить его работать с помощью gpp, добавив следующие строки в мой файл разметки '\ ifdef {TEX} ...' и '\ ifdef { EPUB} ... ' Затем вы можете использовать' gpp -T -DTEX' 'gpp -T -DEPUB'. Но это недопустимый уценок. Когда я 'pandoc', он жалуется, что \ ifdef не определен. Любой способ сделать команды предварительной обработки gpp дружественными по умолчанию? – Arnaud

+0

Идея состоит в том, чтобы сначала запустить gdp, который обрабатывает '<#ifdef TEX> ... <#endif>' и генерирует допустимую уценку, которая больше не содержит их. затем запустите pandoc. – mb21

2

Решение проблемы с файловым препроцессором filepp. Мы определяем функцию img(caption,path,options), которая заменяется на ![caption](path) или на \includegraphics в зависимости от флага. Обратите внимание на две вещи: вам нужно избежать запятых в аргументах функции (см. Третий аргумент первого графика); вам нужно иметь две неэкранированные запятые, даже если один аргумент не указан (см. второй примерный график ниже).

test.md

#bigfunc img(caption,path,options) 
#if "out_fmt" eq "tex" 
\begin{figure} 
    \caption{\label{caption} caption} 
    \includegraphics[options]{path} 
\end{figure} 
#else 
![caption](path) 
#endif 
#endbigfunc 

Here is an image 

img(Plot,Rplot.png,height=2\,width=2) 
img(Plot,Rplot.png,) 

Мы указываем формат Ouput в команде filepp и конвейеру в pandoc:

filepp -m bigfunc.pm -D out_fmt=tex test.md | pandoc -o test.tex 
filepp -m bigfunc.pm -D out_fmt=html test.md | pandoc -o test.html 

выход текс:

Here is an image 

\begin{figure} 
    \Plot{\label{Plot} Plot} 
    \includegraphics[height=2,width=2]{Rplot.png} 
\end{figure} 

\begin{figure} 
    \Plot{\label{Plot} Plot} 
    \includegraphics[]{Rplot.png} 
\end{figure} 

HTML выход:

<p>Here is an image</p> 
<div class="figure"> 
<img src="Rplot.png" alt="Plot" /> 
<p class="caption">Plot</p> 
</div> 
<div class="figure"> 
<img src="Rplot.png" alt="Plot" /> 
<p class="caption">Plot</p> 
</div>