In the memoir class manual,
there is the following code
for putting section headings in the margin:
A less traditional style is to put the whole heading into the margin. I have done this here for a
\paragraphheading (which is not otherwise used in this manual). The code is:\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}%The macro
\marginboxputs its argument, raggedleft, into a zero height\parboxof width 6em, aligned at the top. The\marginheadmacro puts its argument into a\marginboxand puts the\marginbox0.5em to the left. The\paragraphhead style is then set to use\marginheadto typeset the heading. The format for the number is reset via\setparahookand\setsecnumformat.
I’ve adapted this to quasi-Expl3,
and referencing the dim variables I used in the page layout,
thus:
\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 }
(Irrelevant details elided.
Yes, I could have copied the definition of \mode_leave_vertical:
from l3trial/xfont/xfss.dtx,
and used \tex_kern:D instead of \kern,
but that would not have aided clarity.)
I’m trying to customize this a bit more, and I’m trying to use the LaTeX3 tools to that end. So…
What are the Expl3 equivalents of \parbox and \llap?
I’ve found a few functions in l3box
that almost-but-not-quite fit:
- Corresponding to this use of
\parboxI see\hbox_to_wd:nnand\vbox_to_zero:n, but can I combine them to achieve the\parboxeffect of 0-height box of given width? and - I’ve found
\hbox_overlap_left:nwhich seems to correspond to\llap, but can I combine the Expl3 functions the same way as the Memoir example code does the LaTeX2e functions?
Also, this application feels like a job for coffins,
either at the l3coffins or xcoffins layer,
rather than explicitly playing with boxes;
but I don’t see a way to say,
“Put this box top-aligned with, and 0.8 em to the left of,
the next paragraph.”
Is my intuition leading me astray,
or can I actually make the code cleaner using coffins?
Later steps (and reasons why I really want this):
• As in my post to comp.text.tex several years ago,
“[memoir] \marginpar and marginal section headings”:
I’d like to be able to attach other bits of text to heading.
• See also Re-displaying section headings after page-breaks;
I’d like to repeat these headings after page breaks,
perhaps with a note saying, “(Continued)”,
and the current code is just complicated enough to scare me.