![恢复 $ 的原始定义](https://linux22.com/image/242739/%E6%81%A2%E5%A4%8D%20%24%20%E7%9A%84%E5%8E%9F%E5%A7%8B%E5%AE%9A%E4%B9%89.png)
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}