如何在 OPmac 中将任意项目添加到目录中

如何在 OPmac 中将任意项目添加到目录中

在尝试为图书项目定制目录时,我想在目录中的两个项目之间添加一些垂直空间。

从阅读 OPmac 源代码来看,TOC 似乎是从 TeX 读取时的 .ref 文件生成的\input opmac。因此,为了添加自定义 TOC 条目,需要在该\input opmac行之前写入代码。

为此我写了这篇文章:

\def\Xspace#1{\addto\toclist{\par#1}}
\input opmac
.
.
.
\Xspace{{\vskip 20pt}}
.
.
.
\bye

我确实实现了在期望看到的位置插入 20pt 垂直空间的目标,但我对需要将东西放在 {{ }} 双括号中并不感到兴奋,也不确定如何解决这个问题。

我的问题是:OPmac 中是否有更惯用的方法来实现向目录添加任意内容的目标?

答案1

当然,如果您需要声明.ref文件中使用的新命令(例如\Xspace),那么您必须在之前定义它\input *.ref,这在期间完成\input opmac

另一方面,可以将简单的命令写入文件.ref而无需声明新的特殊宏。相反

\wref\Xspace{{\vskip 20pt}}

你可以写

\write\reffile{\string\addto\string\toclist{\vskip20pt}}

但是这种方法\addto\toclist存在一个问题。\toclist在两种不同情况下使用:生成目录时和\outlines宏生成 PDF 轮廓时。在第二种情况下,\tocline宏(包含在中\toclist)被重新定义。

我的第一个想法略有不同。当排版设计师需要打印不同形状的目录时,他可以重新定义宏\tocline。此宏有五个参数:

\tocline {level}{recommended font}{number}{text}{page}

其中\level=0,为章节、\level=1为节、为小节等。您可以复制来自\level=2的定义并添加新行:\toclineopmac.tex

\def\tocline#1#2#3#4#5{%
   \ifnum#1=0 \vskip20pt \relax \fi % <<< this line is new, adds the desired \vskip
   {\leftskip=#1\iindent \rightskip=2\iindent
   \ifischap\advance\leftskip by\iindent\fi
   \ifnum#1>1 \advance\leftskip by\iindent\fi
   \toclinehook \noindent\llap{#2\toclink{#3}\enspace}%
      {#2#4\unskip}\nobreak\tocdotfill\pglink{#5}\nobreak\hskip-2\iindent\null\par}}

我不太喜欢把东西放进去{{ }}

此双括号用于宏上下文中\wref

\wref\Xcommand{{first}{second}{third}}

\Xcommand当具有多个参数时,这更有意义。

相关内容