回忆录:使用 Expl3 或 xcoffins 将标题放在边距中

回忆录:使用 Expl3 或 xcoffins 将标题放在边距中

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 并将\marginbox0.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 工具来实现此目的。所以……

\parboxExpl3 中与和等价的函数有哪些\llap?我发现了一些l3box 几乎但又不完全符合的函数:

  • 对应这种用法\parbox 我看到了\hbox_to_wd:nn\vbox_to_zero:n,但是我可以将它们组合起来以实现\parbox给定宽度的0高度框的效果吗?和
  • 我发现\hbox_overlap_left:n 它似乎与相对应\llap,但我可以按照 Memoir 示例代码对 LaTeX2e 函数进行操作的方式组合 Expl3 函数吗?

此外,这个应用程序感觉像是棺材的工作,要么在l3coffinsxcoffins层,而不是明确地使用盒子;但我看不出有什么办法说,“把这个盒子与下一个段落顶部对齐,并向左移动 0.8 em。”是我的直觉误导了我,还是我真的能用棺材让代码更干净?

后续步骤(以及我为什么真的想要这个):
• 正如我几年前在 comp.text.tex 上的帖子中所说,“[回忆录]\marginpar和边注标题”:我希望能够将其他文本附加到标题。
• 另请参阅分页后重新显示章节标题;我想在分页符后重复这些标题,也许加上一条注释:“(继续)”,而当前的代码复杂程度足以让我感到害怕。

相关内容