在memoir
课程手册中,有以下代码用于将章节标题放在页边距中:
一种不太传统的风格是将整个标题放入页边距。我在这里对标题做了这个
\paragraph
(本手册中没有使用)。代码是:\newcommand{\marginbox}[1]{% \parbox[t][0pt]{6em}{\itshape\raggedleft\leavevmode #1}} \newcommand{\marginhead}[1]{% {\llap{\marginbox{#1}\kern0.5em}}} \setparaindent{0em} \setafterparaskip{0em} \setparaheadstyle{\marginhead} \setparahook{\setsecnumformat{\csname the##1\endcsname\ }} \paragraph{Hang the whole heading in the margin}%
该宏
\marginbox
将其参数 raggedleft 放入\parbox
宽度为 6em 的零高度中,对齐在顶部。该\marginhead
宏将其参数放入 a 中,\marginbox
并将\marginbox
0.5em 放在左侧。\paragraph
然后设置 head 样式以用于\marginhead
排版标题。数字的格式通过\setparahook
和重置\setsecnumformat
。
我已将其调整为准 Expl3,并引用dim
我在页面布局中使用的变量,因此:
\cs_new:Npn \jcsres_marginbox:n #1
{
\parbox[t][0pt]
{ \c_jcsres_marginwidth_dim }
{ \raggedleft \leavevmode \jcsres_section_style:n {#1} }
}
\cs_new:Npn \jcsres_marginhead:n #1
{
{ \llap { \jcsres_marginbox:n{#1} \kern \c_jcsres_marginspace_dim } }
}
\setsecheadstyle{ \jcsres_marginhead:n }
\mode_leave_vertical:
(省略了不相关的细节。是的,我可以从 l3trial/xfont/xfss.dtx复制的定义,并用\tex_kern:D
它来代替\kern
,但这并不能使解释更清楚。)
我正在尝试对此进行更多自定义,并尝试使用 LaTeX3 工具来实现此目的。所以……
\parbox
Expl3 中与和等价的函数有哪些\llap
?我发现了一些l3box
几乎但又不完全符合的函数:
- 对应这种用法
\parbox
我看到了\hbox_to_wd:nn
和\vbox_to_zero:n
,但是我可以将它们组合起来以实现\parbox
给定宽度的0高度框的效果吗?和 - 我发现
\hbox_overlap_left:n
它似乎与相对应\llap
,但我可以按照 Memoir 示例代码对 LaTeX2e 函数进行操作的方式组合 Expl3 函数吗?
此外,这个应用程序感觉像是棺材的工作,要么在l3coffins
或xcoffins
层,而不是明确地使用盒子;但我看不出有什么办法说,“把这个盒子与下一个段落顶部对齐,并向左移动 0.8 em。”是我的直觉误导了我,还是我真的能用棺材让代码更干净?
后续步骤(以及我为什么真的想要这个):
• 正如我几年前在 comp.text.tex 上的帖子中所说,“[回忆录]\marginpar
和边注标题”:我希望能够将其他文本附加到标题。
• 另请参阅分页后重新显示章节标题;我想在分页符后重复这些标题,也许加上一条注释:“(继续)”,而当前的代码复杂程度足以让我感到害怕。