恢复 $ 的原始定义

恢复 $ 的原始定义

onlyamsmath我发现和之间存在不兼容性tabu,这与-符号的重新定义有关$。(它是一个活动字符,因此在禁忌列说明符内中断)。这是由以下情况触发的:

\documentclass{article}
\usepackage{amsmath}
\usepackage[all,error]{onlyamsmath}
\usepackage{tabu}
\begin{document}
\begin{tabu} to 0.6\textwidth{X[c]X[c]X[$c]} 
a & b & c\\ 
\end{tabu} 
\end{document}

如果我可以在文档开头恢复 的原始定义,$我就可以解决该错误。请注意,我想将此“错误修复”包含在包中,并且不能依赖正确的加载顺序。所以我不想在 之前强制加载onlyamsmath

答案1

您可以修补tabu环境,以便它设置正确的 catcode

\usepackage{tabu}
\usepackage{etoolbox}
\AtBeginEnvironment{tabu}{\catcode`$=3 }

这样,onlyamsmath仅在环境内部被禁用tabu

答案2

您需要将 catcode$重新设置为其正常值 3。但是,onlyamsmath这在 at-begin-document 中是否发生,您需要将其改回为了确保这一点,您可以使用filehook包,然后:

\AtEndOfPackageFile*{onlyamsmath}{\AtBeginDocument{\catcode`\$=3\relax}}

如果已加载则安装所需代码到末尾的 at-begin-document 钩子中onlyamsmath;如果已加载则立即安装所需代码。

完整示例(两个命令均有效):

\documentclass{article}
\usepackage{amsmath}

\usepackage{filehook}
\AtEndOfPackageFile*{onlyamsmath}{\AtBeginDocument{\catcode`\$=3\relax}}

\usepackage[all,error]{onlyamsmath}
\usepackage{tabu}

%\usepackage{filehook}
%\AtEndOfPackageFile*{onlyamsmath}{\AtBeginDocument{\catcode`\$=3\relax}}

\begin{document}
\begin{tabu} to 0.6\textwidth{X[c]X[c]X[$c]} 
a & b & c\\ 
\end{tabu} 
\end{document}

相关内容