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^^_它替换,就会出现错误。因此,你必须避免在错误分支中输入此类信息。

相关内容