.png)
Я установил TeX Live 2016 в том виде, в котором он вышел сегодня (спасибо разработчикам за это).
Теперь у меня есть следующий MWE:
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}{ruby}
class Foo
def init
pi = Math::PI
@var = "Pi is approx. #{pi}"
end
end
\end{minted}
\end{document}
При запуске pdflatex --shell-escape test.tex
он проходит через файл и выдает PDF, как и ожидалось. Делать то же самое с lualatex --shell-escape test.tex
не удается с
This is LuaTeX, Version 0.95.0 (TeX Live 2016)
system commands enabled.
(./test.tex
LaTeX2e <2016/03/31>
Babel <3.9r> and hyphenation patterns for 1 language(s) loaded.
(/opt/texlive/2016/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/opt/texlive/2016/texmf-dist/tex/latex/base/size10.clo))
(/opt/texlive/2016/texmf-dist/tex/latex/minted/minted.sty
(/opt/texlive/2016/texmf-dist/tex/latex/graphics/keyval.sty)
(/opt/texlive/2016/texmf-dist/tex/latex/oberdiek/kvoptions.sty
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/ltxcmds.sty)
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/etexcmds.sty
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/ifluatex.sty))))
(/opt/texlive/2016/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix
<2008/02/07> (tvz)) (/opt/texlive/2016/texmf-dist/tex/latex/float/float.sty)
(/opt/texlive/2016/texmf-dist/tex/latex/base/ifthen.sty)
(/opt/texlive/2016/texmf-dist/tex/latex/tools/calc.sty)
(/opt/texlive/2016/texmf-dist/tex/latex/ifplatform/ifplatform.sty
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/luatex-loader.sty
(/opt/texlive/2016/texmf-dist/scripts/oberdiek/oberdiek.luatex.lua)))
(/opt/texlive/2016/texmf-dist/tex/generic/oberdiek/catchfile.sty)
uname -s > "test.w18"
! Package catchfile Error: File `test.w18' not found.
See the catchfile package documentation for explanation.
Type H <return> for immediate help.
...
l.93 \CatchFileDef\@tempa{\ip@file}{}
?
Как уже упоминалось, это свежеустановленный TeX Live 2016; я также проверил установленную версию Pygmentize, которая является 2.1.3 (установлена через pip). Тестирование с TeX Live 2015, однако, вышеприведенный код работает без проблем как с pdflatex, так и с lualatex.
Есть ли у кого-нибудь подсказка, как это исправить, или это ошибка в lualatex или minted (или каком-то другом пакете), о которой следует сообщить?
Обновлять:Начиная с minted
версии 2.2 (08.06.2016) пакет загружается shellesc
автоматически, как отметили @David Carlisle и @egreg в комментариях; поэтому проблема больше не должна возникать, если у вас установлена эта версия.
решение1
Несколько пакетов, использующих , \write18
необходимо будет обновить для совместимости с LuaLaTeX в LuaTeX 0.90; minted
среди них.
Однако shellesc
пакет предоставляет необходимое решение:
\documentclass{article}
\usepackage{shellesc}
\usepackage{minted}
\begin{document}
\begin{minted}{ruby}
class Foo
def init
pi = Math::PI
@var = "Pi is approx. #{pi}"
end
end
\end{minted}
\end{document}
(спасибо ArTourter за то, что заметил это).
Вот набор исправлений, которые заменяют все появления на \immediate\write18
, что \ShellEsc
является более безопасным способом, не прибегая к переопределениям \write
.
Эти патчи вообще не нуждаются в LuaLaTeX, поэтому код работает со всеми движками.
\documentclass{article}
\usepackage{shellesc,xpatch}
\usepackage{minted}
\makeatletter
\xpatchcmd{\DeleteFile}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\DeleteFile}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\ProvideDirectory}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\TestAppExists}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\TestAppExists}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@checkstyle}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@checkstyle}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@checkstyle}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@checkstyle}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@pygmentize}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@pygmentize}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@pygmentize}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@pygmentize}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd{\minted@pygmentize}
{\immediate\write18}
{\ShellEscape}
{}{}
\makeatother
\begin{document}
\begin{minted}{ruby}
class Foo
def init
pi = Math::PI
@var = "Pi is approx. #{pi}"
end
end
\end{minted}
\end{document}
Примечание: я не могу проверить исправления в Windows, поэтому в этом случае они могут быть неполными.
Более короткий код доступен, если использовать regexpatch
:
\documentclass{article}
\usepackage{shellesc,regexpatch}
\usepackage{minted}
\makeatletter
\xpatchcmd*{\DeleteFile}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd*{\ProvideDirectory}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd*{\TestAppExists}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd*{\minted@checkstyle}
{\immediate\write18}
{\ShellEscape}
{}{}
\xpatchcmd*{\minted@pygmentize}
{\immediate\write18}
{\ShellEscape}
{}{}
\makeatother
\begin{document}
\begin{minted}{ruby}
class Foo
def init
pi = Math::PI
@var = "Pi is approx. #{pi}"
end
end
\end{minted}
\end{document}