德国议会的文件中都有四分之一页码(例如第 9686 页 D 表示第 9686 页的第四季度,(例子))。如何在 LaTeX 中创建此类编号并将这些编号包含在目录中?
答案1
这是一个非常有趣的问题。所以我尝试在我最喜欢的宏包(即纯 TeX)中解决这个问题。你可以从中得到启发,你(或其他人)可以尝试将这些想法重新实现到 LaTeX 中。
我们需要设置\output
例程才能进行指定的页面设计。我没有这样做(为了简单起见,并且因为普通的 TeX 不是所需的宏包)。我只使用定义的\dopage
宏“手动”设置了一个页面进行实验。但主要原理在这里展示。
\input opmac
\def\lorem{Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu
libero, nonummy eget, consectetuer id, vulputate a, magna. Donec
vehicula augue eu neque. Pellentesque habitant morbi tristique
senectus et netus et malesuada fames ac turpis egestas. Mauris ut
leo.}
\splittopskip=12pt
\long\def\dopage#1{%
\setbox0=\vbox{\hsize=7cm \emergencystretch=2em \penalty0
#1\par\nobreak\vfil\penalty0}
\setbox1=\vsplit0 to0pt
\hbox{\vbox to240pt{\hbox{(A)}\vfil\hbox{(B)}\vfil}\kern5pt
\vbox{\setpartpage{A}%
\setbox1=\vsplit0 to 120pt
\edef\tmp{\the\dp1}\box1 \kern-\tmp
\setpartpage{B}%
\vsplit0 to120pt}%
\kern5pt\vrule\kern5pt
\vbox{\setpartpage{C}%
\setbox1=\vsplit0 to 120pt
\edef\tmp{\the\dp1}\box1 \kern-\tmp
\setpartpage{D}%
\vsplit0 to120pt}%
\kern5pt\vbox to240pt{\hbox{(C)}\vfil\hbox{(D)}\vfil}}
}
\def\setpartpage#1{\wref\addto{\noexpand\toclist{\def\noexpand\partpage{#1}}}}
\def\pglink#1{#1 \partpage}
\maketoc
\vskip1cm
\dopage{
\sec First item
\lorem
\sec Second item
\lorem \par \lorem
\sec Third item
\lorem
}
\bye
结果是:
解释:我们需要将\vsplit
页面内容分为四个部分,前两个部分为第一列,后两个部分为第二列。然后我们需要将\write
每个部分之前的页面部分信息添加到 REF 文件(如果使用 LaTeX,则为 AUX 或 TOC 文件)。这是通过\setpartpage
宏完成的。例如,我们使用 OPmac 在 REF 文件中包含以下内容:
%% OPmac - REF file
\Xpage{1}
\addto\toclist {\def \partpage {A}}
\Xtoc{1}{\rm }{1}{First item }{1}
\addto\toclist {\def \partpage {B}}
\Xtoc{1}{\rm }{2}{Second item }{1}
\addto\toclist {\def \partpage {C}}
\addto\toclist {\def \partpage {D}}
\Xtoc{1}{\rm }{3}{Third item }{1}
这意味着\toclist
读取 REF 文件后将包括:
\def\partpage {A}
\tocline{1}{\rm}{1}{First item }{1} % {level}{font}{sec number}{text}{page}
\def\partpage {B}
\tocline{1}{\rm}{2}{Second item }{1}
\def\partpage {C}
\def\partpage {D}
\tocline{1}{\rm}{3}{Third item }{1}
现在,我们只需要重新定义,\tocline
以便它不仅打印
#5
(pageno),还打印\partpage
。我通过重新定义
\pglink
在 tocline 中用于打印页码的那个来实现这一点。这不是很有概念性,因为\hyperlinks
这里已经损坏,但我们只将其用作实验代码。