如何使用 chktexrc 来控制破折号上的警告?

如何使用 chktexrc 来控制破折号上的警告?

我正在尝试配置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 3HYPHDASH为什么这样做有效?(这个问题基本上是第一个问题,但反过来说。)
#####################################################################
#
# 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

相关内容