VerbatimOut trava em símbolos especiais dentro de if-then-else

VerbatimOut trava em símbolos especiais dentro de if-then-else

Este código compila perfeitamente com lualatex, xelatex e pdflatex:

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

Porém, este compila apenas com pdflatex e falha com lualatex e xelatex:

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

Isto é o que estou recebendo:

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

Como faço para compilar comtodoslátex?

Responder1

Bem, você tem um pequeno problema aqui. ^^_é uma entrada inválida em luatex e se ele vir, irá reclamar. O problema não é o \VerbatimOut, mas se x.txtjá existir você está em uma ramificação falsa, o luatex pula o conteúdo, mas mesmo assim vê o ^^_.

Por exemplo, isso aqui compila sem problemas:

\documentclass{article}

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

\end{document}

mas se você mudar para \iffalseisso, erros

\documentclass{article}

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

\end{document}

E no seu exemplo tanto a gravação quanto a verificação do arquivo funcionam:

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

mas assim que você substituir os erros aaapor ele. ^^_Portanto, você terá que evitar tal entrada em ramificações falsas.

informação relacionada