我正在尝试使用 来微调 marginpars 的位置\vspace
。但是,结果并不像预期的那样,即使我包括vspace{0pt}
marginpar 也会被推低,如下面的 MWE 所示。我该如何摆脱这个不需要的空间?
我不确定这个问题是相关的。 有与\topskip
marginpars 等价的吗?
\documentclass{scrartcl}
\setlength{\textwidth}{60mm}
\setlength{\marginparwidth}{50mm}
\begin{document}
Nulla malesuada porttitor diam.\marginpar{No vspace command}
\vspace{5ex}
Nulla malesuada porttitor diam.\marginpar{\vspace{0pt}A 0pt vspace offset}
\end{document}
答案1
\vspace
开头的命令将跳过\marginpar
确立为框中的第一个对象,因此垂直对齐将是该空间的顶部。
您可以测量边注的高度,然后根据该高度进行备份。
\documentclass{scrartcl}
\usepackage{color}
\setlength{\textwidth}{60mm}
\setlength{\marginparwidth}{50mm}
\newcommand{\fixedmarginpar}[2]{%
\setbox0=\vtop{#2}\marginpar{\vspace{-\ht0}\vspace{#1}#2}%
}
\begin{document}
Nulla malesuada porttitor diam.%
\llap{\color{red}\vrule width 6cm height 0pt depth .4pt}%
\rlap{\color{red}\vrule width 5cm height 2pt depth .4pt}%
\fixedmarginpar{-2pt}{No vspace command}
\end{document}
红色规则只是为了显示基线并确保 marginpar 正确提高了 2pt。
答案2
您将在标准 LaTeX 中看到与该类相同的效果article
。
的内容\marginpar
被放入一个\vtop
框中,该框将其包含的第一个框的基线与当前基线对齐。插入\vspace
包含新的垂直材料,因此会更改使用的基线。\vspace{0pt}
结果是文本上方的高度为零的框,因此其基线(即下一行文本的顶部)与当前基线对齐。
lualatex 下运行的包lua-visual-debug
将向您清楚地证明这一点。
因此,您需要指定一个负数\vspace
才能获得零效果。对于您的情况\vspace{-6.83331pt}
,可以通过\setbox0=\hbox{A}\the\ht0
以下方式找到:
\documentclass{article}
\setlength{\textwidth}{60mm}
\setlength{\marginparwidth}{50mm}
\begin{document}
\thispagestyle{empty}
Nulla malesuada porttitor
diam.\marginpar{\setbox0=\hbox{A}\vspace{\dimexpr-\ht0}A
\setbox0=\hbox{A}$-$\the\ht0\ vspace offset}
\end{document}