Испанская опция 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}

но если я заменю опцию englishна spanishв babel, то получу следующую ошибку:

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

Связанный контент