Babel スペイン語オプションと FancyVRB の非互換性

Babel スペイン語オプションと FancyVRB の非互換性

以下の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 でオプションを に置き換えるとenglishspanish次のエラーが発生しました。

$ 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}

関連情報