对于手动输入的符号(而不是使用用户定义的命令)编译失败

对于手动输入的符号(而不是使用用户定义的命令)编译失败

在我的论文中,我使用了很多命令而不是符号。例如,对于 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,这足以找出罪魁祸首。

相关内容