在我的论文中,我使用了很多命令而不是符号。例如,对于 Lipschitz 常数,L
我会定义一个命令\lip
来扩展为,而不是L
。但是,偶尔,我或其他人可能会输入L
而不是\lip
,当然,它会编译得很好。然后我们可以更改符号(例如\lip
将变成\ell
),但手动输入L
不会改变,这是一个问题。
问题:当我们在数学模式中看到“free”时,有没有办法使编译失败L
?特别是,当L
是参数时,它也应该失败,例如当我输入时。更高级的版本是当它可以是更复杂的东西(例如)\frac L2
时,但如果我至少能够处理单个字母,我会感到满意(因为意外输入更困难)。\lip -> L
\lip -> \mathcal L
\mathcal L
或者也许还有其他方法可以解决这个问题?
答案1
警告:未经广泛测试。这仅应在您从合作者处获得文件时用作快速检查。
\documentclass[twocolumn]{article}% twocolumn for smaller snapshot
\mathchardef\uppercasel=\mathcode`\L
\begingroup
\lccode`\~=`\L
\lowercase{\endgroup\def~}{\uppercasel\typeout{There is an explicit `L' on line \the\inputlineno}}
\mathcode`\L="8000
\newcommand*{\lip}{\uppercasel}
\begin{document}
\noindent
See an L here in text mode, $L$, or
\[
\frac L2 % bad style anyway
\]
but no problem with $\Leftarrow$ or $\lip$.
\end{document}
您将在屏幕上看到
[...]
There is an explicit `L' on line 14
There is an explicit `L' on line 16
[...]
如果你真的想要一个错误,你可以\typeout
用其他东西代替。你也可以简单地写
\lowercase{\endgroup\def~}{\ERROR}
您只会看到一个错误Undefined control sequence \ERROR
,这足以找出罪魁祸首。