Babel spanish 选项与 fancyvrb 不兼容

Babel spanish 选项与 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但是如果我在 babel中用替换选项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}

相关内容