Преобразование pandoc в pdf завершается ошибкой, когда € находится в заголовке

Windows 10 \ евро в LaTeX

У меня есть MiKTeX 2.9.6300 64-bit, и я могу xelatex eurosym, где eurosym.tex содержит следующий LaTeX код:

\documentclass{article}

\usepackage{eurosym}

\begin{document}

\section{2\euro{}}    % (this line fails if eurosym package isn't called)

2€    % (this € symbol is lost if compiled with pdflatex instead of xelatex)

\end{document}

- вывод ожидаемый:

Ошибка вызова Pandoc на Win10 eurosym

Моя локальная копия pandoc-templates/default.latex правильно содержит вызов:

$if(euro)$
  \usepackage{eurosym}
$endif$

И у меня установлен pandoc v1.19.2.1, поэтому я ожидаю, что pandoc eurosym.md -o eurosym.pdf --latex-engine=xelatex будет работать, когда eurosym.md содержит только:

# 2€
2€

- а по факту получаю:

! Improper alphabetic constant.
<to be read again>
                   \euro
l.70 \section{2\euro{}}

pandoc.exe: Error producing PDF

- почему команда \euro{} не работает здесь, в Пандоке?

то же самое с Pandoc в Arch Linux

pandoc 1.19.2.1-90, вызывая texlive-bin 2016.41290-12 и используя jgm default.latex. получить:

! Improper alphabetic constant.
<to be read again>
                   \euro
l.35 \section{2\euro{}}

pandoc: Error producing PDF

Но я могу заставить его работать должным образом, закомментировав строку 76, \usepackage[unicode=true]{hyperref} (а затем строки 80-98 и строку 253, оба предложения \hypersetup{...}, и строку 99, \urlstyle{same}, которые требуют hyperref) jgm default.latex .

Обнаружение того, что существует более свежий файл default.latex , я попытался с этим, и Pandoc снова потерпел неудачу на \euro.

Вывод, похоже, таков, что евросим и гиперссылка каким-то образом взаимно несовместимы в Pandoc.

Поэтому я создал новую проблему: eurosym в Pandoc кажется несовместимым с гиперссылкой #3801.


person joharr    schedule 17.05.2017    source источник


Ответы (1)


Вы должны использовать \usepackage{eurosym} только с pdflatex. XeLaTeX поддерживает Unicode, и вы можете просто использовать символ евро напрямую.

Таким образом, шаблон pandoc по умолчанию обертывается в «if pdftex», который вы могли пропустить при изменении своего шаблона:

\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex

...

$if(euro)$
  \usepackage{eurosym}
$endif$
...

\fi
person mb21    schedule 17.05.2017
comment
Нет, я только что проверил свой default.latex и код, на который вы ссылаетесь, (как я думал) точно такой же, как у jgm. Кроме того, как я уже говорил в комментарии к моему коду LaTeX выше, XeLaTeX завершается успешно на \section{2\euro{}} только в том случае, если был вызван eurosym. - person joharr; 17.05.2017
comment
мб1 правильно. Ваш код отличается от кода по умолчанию, который заключает все условное выражение в другое условное выражение (см. строки 17 и 21 документа шаблон по умолчанию) - person Sergio Correia; 17.05.2017
comment
попробуйте вывести в tex с помощью pandoc -s -t latex -o output.tex и отлаживать оттуда. Я не могу воспроизвести вашу проблему с XeTeX 3.14159265-2.6-0.99996 (TeX Live 2016) в macOS... - person mb21; 18.05.2017
comment
@SergioCorreia, обеспокоен вашим комментарием о том, что я оплошал, я только что перепроверил, и вы ошибаетесь, мой пункт \ifnum ... \fi, как я сказал, не изменился от jgm (фактически из его строки 2 к строке 103 я идентичен), но, чтобы быть вдвойне уверенным, я только что попытался выполнить pandoc с default.latex jgm, и проблема остается. Итак, мой шаблон в порядке - здесь что-то еще не так. - person joharr; 31.05.2017
comment
@mb1, следуя вашему предложению от 18 мая, я вернулся к jgm default.latex & pandoc -s eurosym.md -o eurosym.tex и получил автономный eurosym.tex для которого xelatex eurosym не работает точно так же, как указано выше (... ‹прочитать еще раз›...) - в моей установке Windows 10 MiKTeX и в моей установке Arch Linux Tex Live 2016.41290-10! - person joharr; 31.05.2017
comment
Я попытался воспроизвести это на своей стороне, но не смог. Одна из идей отладки состоит в том, чтобы вывести его как текст -o eurosym.tex --latex-engine=xelatex --standalone, а затем запустить xelatex для tex-файла. Вы должны заметить строку `\newcommand{\euro}{€}`, так как это первая точка отказа. Затем удаляйте куски tex-файла, пока не получите что-то как можно меньше, как в первом примере. Также попробуйте обновить miktex на всякий случай. - person Sergio Correia; 02.06.2017