解释如何使用特定新命令来个性化它

解释如何使用特定新命令来个性化它

一个人在个性化他的 ToC 时遇到了问题,你建议他使用以下几行来帮助他:

\newcommand{\mychapter}[2]{
  \setcounter{chapter}{#1}
  \setcounter{section}{0}
  \chapter*{#2}
  \addcontentsline{toc}{chapter}{#2}
}

你能解释一下吗

  1. [2]你为什么在旁边写\mychapter

  2. 为什么要使用标签进行编号?

  3. 的功能是什么\addcontentline

我希望不会打扰您太多,我只是一个想要了解该软件的新用户。

答案1

  1. [2]为什么在 旁边写“ ” \mychapter

    取自source2e.pdf- LaTeX2e 的源文档(部分11.3 命令定义,第 23 页):

    \newcommand*{<\FOO>}[<i>]{<TEXT>}
    

    用户命令定义\FOO为具有参数的宏ii如果缺失则为 0),其定义如下<TEXT>。如果已定义则会产生错误\FOO。通常,命令定义为\longIE星号形式表示命令的首字母缩写(它可能在其参数中占用多个段落)。在星号形式中,命令未定义为\long ,并且命令的任何参数中的空行都将生成错误。

    因此,(和 的一般用法\newcommand也是\renewcommand\providecommand)是在方括号内包含参数的数量。使用您的定义,\mychapter将采用两个 ( 2) 个参数。

    另请参阅\newcommand和有什么区别\newcommand*(超出此范围,可能更具技术性,但仍然相关,请参阅\def和有什么区别\newcommand)。

  2. 为什么要使用标签进行编号?

    取自TeXBook(章节20 定义(也称为宏),第 198 页):

    一旦你掌握了简单的宏 [...],你可能会开始想,“天哪,如果我能有一个宏,其中扩展中的一些文本是可以改变的,那不是很好吗?我希望能够将不同的东西插入到该文本的中间。”好吧,TeX 有个好消息要告诉你:控制序列可以根据参数来定义,你可以提供将替换参数的参数。

    ... 该符号#1代表宏的第一个参数,... 最多可以有九个参数#1#9...

    \mychapter因此,您将使用#1and/or引用其中的参数,#2因为宏需要两个参数。#1表示第一个参数,#2表示第二个参数。

    如果需要,请参阅如何定义接受超过 9 个参数的命令

  3. 的功能是什么\addcontentsline

    取自source2e.pdf(部分61.3 目录等,第 287 页):

    \addcontentsline{<table>}{<type>}{<entry>}命令允许用户将他/她自己的条目添加到目录等。该命令将条目添加 \contentsline{<type>}{<entry>}{<page>}.<table>文件。

    该宏是作为 的一个应用程序实现的\addtocontents

    因此在文件中\addcontentsline{toc}{chapter}{#2}插入一个条目,其中是的第二个参数。该条目是在页面实际发送出去时确定的,因为这是 TeX 异步发送例程和页面引用的本质。\contentsline{chapter}{#2}{<page>}.toc#2\mychapter<page>

    您会注意到,<type>目录中的不同 s 具有不同的格式。章节看起来不同于节,节又不同于(或至少可能不同于)小节,等等。这些差异要求提供带有<type>\addcontentsline的 ,就像 中所做的那样\mychapter

答案2

你为什么在旁边写“[2]”\mychapter

因为宏被定义为接受 2 个参数。这些参数显然是 (a) 预期的章节编号和 (b) 章节标题。

为什么使用标签进行编号

因为这是引用宏参数的 LaTeX/TeX 语法:#1是第一个参数,#2是第二个参数,等等。

的作用是什么\addcontentline

出于某种原因,宏的创建者\mychapter(我发誓,不是我!)选择使用\chapter*而不是\chapter排版章节标题。在主 LaTeX 文档类中,\chapter*(a) 创建未编号的章节,(b) 不不是自动在目录中创建一个条目。\addcontentsline宏是一种手动方式,用于将该信息插入到创建目录信息的文件中。

相关内容