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錯誤^^_。因此,您必須避免在錯誤分支中進行此類輸入。

相關內容