\list 命令

\list 命令

请考虑以下第 82 页的代码清单TikZ & PGF 3.0.1a 版手册

TikZ 和 PGF 手册中的代码清单

\def\lecture#1#2#3#4#5#6{
  \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm] at (#4) {
    Lecture #1: \textcolor{orange}{\textbf{#2}}
    \list{--}{\topsep=2pt\itemsep=0pt\parsep=0pt
              \parskip=0pt\labelwidth=8pt\leftmargin=8pt
              \itemindent=0pt\labelsep=2pt}
    #5
    \endlist
  };
}

该清单使用了一对命令:\list\endlist。该\list命令接受两个参数:{--}{\topset...=2pt}

\list命令未在 TikZ 手册的索引中列出,也没有在 Knuth 的索引中列出TeX 书或 Lamport 的乳胶

此命令属于哪个系统/包?
它的语法是什么?
它的语义是什么?

答案1

上述代码对于初学者来说并不是特别有指导意义,应该附上说明性说明。

它利用了两个事实:

  1. 由于 的设置, 的主参数中的代码\node在 中执行,这形成了一个 (TeX) 组;\parboxtext width

  2. 这样的代码\begin{env}...\end{env}本质上等同于

    \begingroup
    <some bookkeeping>
    \env
    ...
    \endenv
    <some bookkeeping>
    \endgroup
    

在这种情况下,簿记是无关紧要的,因为整个施工都是在 提供的组中进行的\parbox

\list...\endlist切勿在野外使用,因为不进行记账几乎肯定会产生不利影响。

从老师的角度来看,代码最好是

\newcommand{\lecture}[6]{%
  \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm] at (#4) {
    Lecture #1: \textcolor{orange}{\textbf{#2}}
    \begin{list}{--}{%
      \setlength{\topsep}{2pt}%
      \setlength{\itemsep}{0pt}%
      \setlength{\parsep}{0pt}%
      \setlength{\parskip}{0pt}%
      \setlength{\labelwidth}{8pt}%
      \setlength{\leftmargin}{8pt}%
      \setlength{\itemindent}{0pt}%
      \setlength{\labelsep}{2pt}%
    }%
    #5
    \end{list}
  };
}

诸如此类的优化需要经验,实际上收获并不大。

更好的是,可以这样做

\newenvironment{lecturelist}
 {\begin{list}{--}{%
    \setlength{\topsep}{2pt}%
    \setlength{\itemsep}{0pt}%
    \setlength{\parsep}{0pt}%
    \setlength{\parskip}{0pt}%
    \setlength{\labelwidth}{8pt}%
    \setlength{\leftmargin}{8pt}%
    \setlength{\itemindent}{0pt}%
    \setlength{\labelsep}{2pt}%
  }%
  {\end{list}}

进而

\newcommand{\lecture}[6]{%
  \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm] at (#4) {
    Lecture #1: \textcolor{orange}{\textbf{#2}}
    \begin{lecturelist}
    #5
    \end{lecturelist}
  };
}

在 的代码中,lecturelist最好将\begin{list}\end{list}分别改为\list和:记账将由和\endlist负责,因此无需在内部完成。如果未能正确关闭包,它还会提供更好的错误消息。\begin{lecturelist}\end{lecturelist}lecturelist

相关内容