避免在数学模式下使用 \newcommand 时出现“命令以空格终止”警告

避免在数学模式下使用 \newcommand 时出现“命令以空格终止”警告

考虑命令定义

Warning 1 in test.tex line 2: Command terminated with space.
\newcommand{\ket}[1]{\left \lvert #1 \right \rangle}  
                                 ^

此命令应该在数学模式下使用。但是,chktex linter 抱怨有一个“命令以空格结尾”,大概是由于另一个帖子。有没有推荐的方法来编写预期的命令,而不会收到 chktex 警告?

答案1

作为 ChkTeX 的维护者,这是我个人认为没什么用的检查之一。ChkTeX 最初是(我相信)为新用户编写的,事实上这对他们来说可能很有帮助,因为他们可能不知道为什么\LaTeX以及类似原因导致“缺少空格”。我个人非常喜欢 linters,因为它们会发现有。ChkTeX 尤其需要一些调整才能对个人有用。因此,如果您认为此检查(或任何其他检查)没有用,那么您应该将其关闭,例如,将以下内容添加到您的.chktexrc文件:

CmdLine { --nowarn 1 }

话虽如此,这个警告确实不是在数学模式下触发,因此将其放在里面\ensuremath是一个非常合理的解决方案,并且在文档中使用不是引起警告(因为它处于数学模式)。

您可能还考虑使用-H 0命令行参数(例如在部分中CmdLine)来关闭序言中的警告(即之前,\begin{document}因为那里经常存在容易出现警告的代码,但实际上并不是问题(例如这个)。

在我看来,添加它Silent是错误的解决方案,因为在实践中它应该始终在数学模式下使用,这样才不会引起警告。

答案2

有一个简单的方法,即

\newcommand{\ket}[1]{\left \lvert#1 \right \rangle}

此代码与您的代码完全等效。另一方面,如果您有

\lvert x\rvert

在您的文档中。写信给维护者并要求他们添加命令。

与此同时,你可以创建一个chktexrc.local文件,保存在包含以下内容的地方

Silent
{
    \rm \em \bf \it \sl \sf \sc \tt \selectfont
    \rmfamily \sffamily \ttfamily \mdseries \bfseries
    \slshape \scshape \relax
    \vskip \pagebreak \nopagebreak

    \textrm \textem \textbf \textit \textsl \textsf \textsc \texttt

    \clearpage \ddots \dotfill \flushbottom \fussy \indent \linebreak
    \onecolumn \pagebreak \pushtabs \poptabs \scriptsize \sloppy
    \twocolumn \vdots
    \today \kill \newline \thicklines \thinlines

    \columnsep \space \item \tiny \footnotesize \small \normalsize
    \normal \large \Large \LARGE \huge \Huge \printindex

    \newpage \listoffigures \listoftables \tableofcontents
    \maketitle \makeindex

    \hline \hrule \vrule

    \centering

    \bigskip \medskip \smallskip

    \noindent \expandafter


    \noindent \expandafter

    \makeatletter \makeatother

    \columnseprule

    \textwidth \textheight \hsize \vsize

    \if \fi \else

    \csname \endcsname

    \z@ \p@ \@warning \typeout

    \dots \ldots \input \endinput \nextline \leavevmode \cdots
    \appendix \listfiles \and \quad
    \hskip \vfill \vfil \hfill \hfil \topmargin \oddsidemargin
    \frenchspacing \nonfrenchspacing
    \begingroup \endgroup \par

    \vrefwarning \upshape \headheight \headsep \hoffset \voffset
    \cdot \qquad
    \left \right
    \qedhere

    \xspace

    \addlinespace \cr \fill \frontmatter
    \toprule \midrule \bottomrule

    \lvert \rvert

}[
# Here you can put regular expressions to match Silent macros.  It was
# designed for  the case where you  have many custom macros  sharing a
# common prefix, but can of course be used for other things.

# Support ConTeXt to at least some extent
\\start.* \\stop.*

]

chktexrc调用

chktex -l path/to/chktexrc.local mydocument.tex

path/to当然可以用合适的替代品来代替。

不幸的是,除了复制所有关键字并增加列表之外,似乎没有其他办法在运行时添加被忽略的关键字。

我如何找到原始列表?在您的系统上找到该文件chktexrc,打开它并复制相关部分。

评论

这是一条愚蠢的警告chktex。它很愚蠢,因为空格终止命令的正确方法。应该反过来:只有一些命令不应该仅仅以空格终止,例如\TeX\LaTeX

因此应该有一个NoSilent列表,而不是一个长列表,用空格终止通常是最佳选择。

相关内容