构建日志中的前缀“\c@”是什么意思?

构建日志中的前缀“\c@”是什么意思?

我只是按照 LaTeX 教程创建了第一个“Hello World!”.tex文件,并将其转换为 PDF 文件。

然后我浏览.log文件并看到以下内容,

("C:\Program Files\MikTeX\tex\latex\base\size10.clo"
File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
)
\c@part=\count79
\c@section=\count80
\c@subsection=\count81
\c@subsubsection=\count82
\c@paragraph=\count83
\c@subparagraph=\count84
\c@figure=\count85
\c@table=\count86
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
) (hello_world.aux)

我对以下陈述感到困惑:

\c@part=\count79

有人可以解释一下吗?

答案1

您可能编译了以下最小示例:

\documentclass{article}
\begin{document}
Hello World!
\end{document}

提供以下内容(部分).log

...
\c@part=\count79
\c@section=\count80
\c@subsection=\count81
\c@subsubsection=\count82
\c@paragraph=\count83
\c@subparagraph=\count84
\c@figure=\count85
\c@table=\count86
...

上述输出源自默认article文档类中的计数器定义。更具体地说,以下命令集(只需\newcounter在 中搜索article.cls):

...
\newcounter {part}
\newcounter {section}
\newcounter {subsection}[section]
\newcounter {subsubsection}[subsection]
\newcounter {paragraph}[subsubsection]
\newcounter {subparagraph}[paragraph]
...
\newcounter{figure}
...
\newcounter{table}
...

每个都\newcounter{<newcntr>}[<oldcntr>]定义一个新的计数器作为 \c@<newcntr>- 注意前缀。以下是LaTeX 内核中c@的 的定义:\newcounter

\def\newcounter#1{%
  \expandafter\@ifdefinable \csname c@#1\endcsname
    {\@definecounter{#1}}%
  \@ifnextchar[{\@newctr{#1}}{}}

首先检查宏是否\c@<newcntr>已经存在,然后通过 定义它\@definecounter{<newcntr>}

\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname
  ...}

\@definecounter发出 TeX 原语来创建指向的\newcount实际计数寄存器。\c@<newcntr>

使用c@前缀纯粹是一种常规选择。类似地,计数器前缀有一个p@宏前缀,而\labelLaTeX 内核中的引用(或 s)有一个r@前缀。它试图避免最终用户乱用计数器,但仍然允许他们创建自己的类似名称的宏。也就是说,使以下内容毫无问题地工作:

\newcounter{something}% <------- Creates \c@something
\newcommand{\something}{..}% <-- Creates \something

如果c@前缀不是由插入的\newcounter,那么\newcounter{something}很可能已经创建了一个计数器 \something,当您想要创建一个真正的宏时,这就会有问题\something

相关内容