marginpar 中的 vspace 添加了不必要的垂直空间

marginpar 中的 vspace 添加了不必要的垂直空间

我正在尝试使用 来微调 marginpars 的位置\vspace。但是,结果并不像预期的那样,即使我包括vspace{0pt}marginpar 也会被推低,如下面的 MWE 所示。我该如何摆脱这个不需要的空间?

我不确定这个问题是相关的。 有与\topskipmarginpars 等价的吗?

\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}

示例输出

相关内容