我是 LaTeX linters lacheck 和 chktex 的忠实粉丝。但在编写文档时,我遇到了 chktex 发出的令人讨厌的警告,而这不应该是警告。请考虑以下使用不同符号的最小示例以及我能想到的不同格式化方法。
\documentclass{minimal}
\begin{document}
Let $t\in[0,\infty)$.
Let $t\in[0,\infty[$.
Let $t\in\left[0,\infty\right)$.
Let $t\in\left[0,\infty\right[$.
\end{document}
这在数学中是相当常见的,但是 chktex 显然只计算括号,就指出了错误
Warning 9 in minimal.tex line 4: `]' expected, found `)'.
Let $t\in[0,\infty)$.
^
Warning 9 in minimal.tex line 6: `]' expected, found `)'.
Let $t\in\left[0,\infty\right)$.
^
Warning 15 in minimal.tex line 7: No match found for `['.
Let $t\in\left[0,\infty\right[$.
^
Warning 15 in minimal.tex line 7: No match found for `['.
Let $t\in\left[0,\infty\right[$.
^
Warning 15 in minimal.tex line 5: No match found for `['.
Let $t\in[0,\infty[$.
^
Warning 15 in minimal.tex line 5: No match found for `['.
Let $t\in[0,\infty[$.
^
Warning 17 in minimal.tex line 8: Number of `(' doesn't match the number of `)'!
Warning 17 in minimal.tex line 8: Number of `[' doesn't match the number of `]'!
考虑到这种定义非常普遍,我想知道是否有一种方法可以定义这样的开区间而不会引起 chktex 的愤怒。
我知道我可以关闭警告(我不想这样做,因为通常这是一个有用的警告),或者忽略该行(如果没有必要,我宁愿不这样做)。chktex 制造商一定提供了一些东西来输入开放间隔,对吗?
答案1
我认为你做不到。最好使用抽象,这样如果你碰巧需要更改错误的符号]a,b[
,只需更改代码中的两个字符即可。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\interval}{sO{}mm}
{
\IfBooleanTF{#1}
{
\yannick_interval:NNnnn \left \right { } { #3 } { #4 }
}
{
\yannick_interval:NNnnn \mathopen \mathclose { #2 } { #3 } { #4 }
}
}
\cs_new_protected:Nn \yannick_interval:NNnnn
{
\str_case:nn { #4 }
{
{oo}{#1#3\c_yannick_left_open_tl #5 #2#3\c_yannick_right_open_tl}
{co}{#1#3[ #5 #2#3\c_yannick_right_open_tl}
{oc}{#1#3\c_yannick_left_open_tl #5 #2#3]}
{cc}{#1#3[ #5 #2#3]}
}
}
\tl_const:Nn \c_yannick_left_open_tl { ] } % non perverse: (
\tl_const:Nn \c_yannick_right_open_tl { [ } % non perverse: )
\ExplSyntaxOff
\begin{document}
$\interval{oo}{a,b}$
$\interval{co}{a,b}$
$\interval[\Big]{oc}{a,b}$
$\interval*{cc}{\dfrac{1}{2},3}$
\end{document}
变为并]
变为后:(
[
)
答案2
作为 ChkTeX 的当前维护者,我认为 @egreg 的答案出于多种原因都很棒,但您还应该考虑关闭这些警告。 ChkTeX 中的警告并非在每种情况下都有用,因此有几种方法可以抑制警告。 它们是(按粒度增加的顺序):
- 对于所有文件,
.chktexrc
- 在每个应该被抑制的文件中
% chktex-file #
- 在每一行应该被抑制的地方
% chktex #
上面#
代表您试图抑制的错误。
请参阅手动的事实上,它使用半开区间作为示例。:)