
以下のMWEは問題なくコンパイルされます
\documentclass{article}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{fancyvrb}
\begin{document}
\SaveVerb{x>y}|x > y|
\begin{equation*}
\UseVerb{x>y}
\end{equation*}
\end{document}
しかし、Babel でオプションを に置き換えるとenglish
、spanish
次のエラーが発生しました。
$ pdflatex test.tex
! Missing \endcsname inserted.
<to be read again>
\unhbox
l.10 \UseVerb{x>y}
マクロ>
で使用されている名前から を削除することでこの問題を解決できますが、もっと良い解決策があるかどうかを知りたいです。\SaveVerb
\SaveVerb{xy}|x > y|
答え1
問題は、spanish
がアクティブな文字babel
を作成することです<
>
。次のオプションを使用できますes-noquoting
。
\usepackage[spanish,es-noquoting]{babel}
例えば
\documentclass{article}
\usepackage[spanish,es-noquoting]{babel}
\usepackage{amsmath}
\usepackage{fancyvrb}
\begin{document}
\SaveVerb{x>y}|x > y|
\begin{equation*}
\UseVerb{x>y}
\end{equation*}
\end{document}
ただし、その場合、モジュールによって実装された自動引用符の機能は、それらの文字を通じて失われます (ただし、環境はquotating
引き続き使用できます)。別の方法としては、これらの機能をローカルで無効にしてから復元する方法があります。
\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{fancyvrb}
\begin{document}
\deactivatequoting
\SaveVerb{x>y}|x > y|
\begin{equation*}
\UseVerb{x>y}
\end{equation*}
\activatequoting
\end{document}
答え2
コマンドを再定義して引数をサニタイズすることができます。
\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{fancyvrb}
\let\xSaveVerb\SaveVerb
\def\SaveVerb#1{\xSaveVerb{\detokenize{#1}}}
\let\xUseVerb\UseVerb
\def\UseVerb#1{\xUseVerb{\detokenize{#1}}}
\begin{document}
\SaveVerb{x>y}|x > y|
\begin{equation*}
\UseVerb{x>y}
\end{equation*}
\end{document}