VerbatimOut дает сбой при обнаружении специальных символов внутри if-then-else

VerbatimOut дает сбой при обнаружении специальных символов внутри if-then-else

Этот код прекрасно компилируется с lualatex, xelatex и pdflatex:

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{VerbatimOut}{x.txt}
^^_
\end{VerbatimOut}
\end{document}

Однако этот пример компилируется только с pdflatex и не работает с lualatex и xelatex:

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\openin 15=x.txt
\ifeof 15
\begin{VerbatimOut}{x.txt}
^^_
\end{VerbatimOut}
\fi
\end{document}

Вот что я получаю:

! Text line contains an invalid character.
l.7 ^^_

Как мне заставить его скомпилироваться с помощьювселатексы?

решение1

Ну, у вас тут небольшая проблема. ^^_недопустимый ввод в luatex, и если он его увидит, то пожалуется. Проблема не в \VerbatimOut, а в том, что если он x.txtуже существует, вы находитесь в ложной ветке, luatex пропускает содержимое, но тем не менее видит ^^_.

Например, вот это компилируется без проблем:

\documentclass{article}

\begin{document}
{
\iftrue 
\catcode`\^=11
\catcode`\_=11
^^_
\fi
}

\end{document}

но если вы измените \iffalseего, ошибки

\documentclass{article}

\begin{document}
{
\iffalse 
\catcode`\^=11
\catcode`\_=11
^^_
\fi
}

\end{document}

А в вашем примере и запись, и проверка файла работают:

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{VerbatimOut}{x.txt}
^^_
\end{VerbatimOut}
\openin 15=x.txt
\ifeof 15
aaa
\fi
\end{document}

но как только вы замените aaaего ^^_ошибками. Так что вам придется избегать такого ввода в ложных ветвях.

Связанный контент