我正在尝试配置chktex
与当地人.chktexrc
。每手册chktex
:
您还应该查看“chktexrc”文件。由于它是自文档化的,您只需阅读文件即可了解每个关键字的含义。事实上,由于本文档中并未描述所有选项,因此您必须阅读“chktexrc”文件才能理解所有选项。
不幸的是,要么是我太笨,要么他们高估了破折号部分的自我记录能力。也许两者都有一点。
在撰写有关柏拉图和亚里士多德的文章时,您经常会看到类似这样的引用:24c--e。由于 24c 到 24e 是一个范围,因此我需要使用短划线,而不是连字符。但是,在默认设置下,chktex
这里不需要短划线,因此我收到了警告。
我知道你可以抑制警告单行或者对整个文件使用 LaTeX 注释,但我更喜欢对所有配置使用本地注释chktexrc
。(不要重复自己,等等。)
默认配置文件的相关部分如下,希望有人能帮助我理解。我的主要问题是:
- 数字 1、2 和 3 代表什么?(我认为它们代表破折号两边字符类型的三种情况。1 = 左右两侧的字母,2 = 左右两侧的数字,3 = 左右两侧的空格。这表明我想将 1 添加到,
NUMDASH
但这不会抑制警告。) - 为什么当例子明显介于数字之间时,注释却这么
NUMDASH
说?Between words
- 我可以通过设置来抑制警告
1 2 3
。HYPHDASH
为什么这样做有效?(这个问题基本上是第一个问题,但反过来说。)
#####################################################################
#
# Here, you can specify the length of various dashes. We sort the
# dash according to which type of characters that are on the left and
# right of it. We are only conclusive if they are the same.
#
# We associate as follows:
#
# Name Type of character on each side
# HyphDash Alphabetic (foo-bar)
# NumDash Numeric (2--3)
# WordDash Space (like this --- see?)
#
# Below you specify how many dashes which are legal in each case. We
# define 0 as a magic constant which always generates an error. You
# may specify more than one legal dash-length.
#
# Let's look at an example. You use the following dash-syntax:
#
# foo-bar
# 2--3
# like this---see?
#
#
# HYPHDASH { 1 3 } # Either a hyphen, or inter-word
# NUMDASH { 2 } # Between words
# WORDDASH { 0 } # We never use this
#
HyphDash
{
1 3
}
NumDash
{
2
}
WordDash
{
3
}
如果您想检查某些内容,这里有一个 MWE chktex
。
\documentclass[12pt,letterpaper]{article}
\begin{document}
Plato references are given in Stephanus numbers. They can look like the following: \textit{Apology} 24c--e.
\end{document}
答案1
数字表示在给定上下文中允许的破折号数量。因此,在某个HyphDash
上下文中(左右两侧各有一个字母字符,即通常放置连字符的位置),您希望允许两个破折号:
HyphDash
{
2
}
这将抑制警告。
因此,‘单词之间’注释可以理解为‘如果在数字上下文中,则允许单词之间使用破折号(即长度为 2 的破折号)’。HyphDash 示例则理解为‘在字母上下文中,允许使用连字符(长度为 1)或单词间破折号(长度为 3)。’
我们可以在 ChkTeX 的源代码中看到这一点,在文件中FindErrs.c
,有我的注释:
// count number of - characters from current buffer position
TmpPtr = BufPtr;
SKIP_AHEAD(TmpPtr, TmpC, TmpC == '-');
TmpCount = TmpPtr - BufPtr + 1;
/* some lines skipped */
// if the character before the dash(es) is a space and the character after is a space
// then we use the WordDash context
if (LATEX_SPACE(*PrePtr) && LATEX_SPACE(*TmpPtr))
wl = &WordDash;
// if the dash(es) are between digits then we are in the NumDash context
if (isdigit((unsigned char)*PrePtr) && isdigit((unsigned char)*TmpPtr))
wl = &NumDash;
// if the dash(es) are between alphabetic characters then we are in the HyphDash context
if (isalpha((unsigned char)*PrePtr) && isalpha((unsigned char)*TmpPtr))
wl = &HyphDash;
// if we are in any of these three contexts
if (wl)
{
Errored = TRUE;
// loop the list of numbers for this context from chktexrc
FORWL(i, *wl)
{
// convert to (long) int
Len = strtol(wl->Stack.Data[i], NULL, 0);
// no error if the number of dashes found is the current list item
// i.e., the actual number is in the list
if (TmpCount == Len)
{
Errored = FALSE;
break;
}
}
请注意,全局chktexrc
文件始终会被加载,即使您在命令行上指定了其他文件也是如此。因此,如果全局文件有1 3
并且本地文件有2
则将chktex --localrc myrcfile mytexfile.tex
使用1 2 3
。要忽略全局文件,您可以使用chktex -g0 --localrc myrcfile mytexfile.tex
。