懈怠其他纪律到底有多糟糕?

懈怠其他纪律到底有多糟糕?

下列的威尔·罗伯逊承认Fwiw,我不知道有丢失的问题 \makeatother但你是对的。我的坏习惯就是不说这句话,而当我意识到我从来没觉得这件事有多重要之后,我对同一件事也逐渐变得懈怠,我想知道纪律到底有多重要\makeatother

对于经验丰富的用户来说,我能想到的最坏后果\makeatother是,由于疏忽使用 结束,可能会导致疏忽\ExplSyntaxOff使用expl3,这远非毫无问题。但这不是任何人都会习惯犯的错误。

令人担心的是,不遵守纪律意味着有些人可能会不清楚“包/Knuth 命名空间”和“用户命名空间”之间的区别。

但我不能说这两种考虑都很紧急。它似乎并不像消除界面中可避免的状态这样的编程原则那么重要。还有什么更引人注目的吗?

答案1

@理论上,在用户文档或某个辅助文件中的宏后面可能有一个直接的宏。如果没有\makeatother这个宏,就会造成麻烦。

第二个麻烦的来源是特殊的包,它们读取用户输入并使用\let/\futurelet和进行比较\ifx。我不确定包如何解析列定义中的array势,但例如我的包允许序列,我很明智地用 catcode测试了@tabulartikz-timing@{<code>}@其他。如果我没有想到丢失\makeatother会破坏某些用户代码而不知道为什么。

一般来说,关闭您自己明确打开的所有内容是一种很好的编程习惯。这可以是\makeatletter/\makeatother\openout/\closeout或任何类似的内容。当使用组本地化更改时,这不适用。

答案2

松懈的纪律的一个问题是,它与在非句末句号后重置空间因素\makeatother的使用相冲突。\@

\documentclass{article}
\begin{document}
Articles from the Proc. Amer. Math. Soc.

Articles from the Proc.\@ Amer.\@ Math.\@ Soc.

\makeatletter
Articles from the Proc.\@ Amer.\@ Math.\@ Soc.
\end{document}

相关内容