このコードは、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
しかし、それを置き換えるとすぐに^^_
エラーが発生します。そのため、誤ったブランチではこのような入力を避ける必要があります。