保留垂直 lastskip 超过 \write

保留垂直 lastskip 超过 \write

有没有办法保存垂直的\lastskip\write或者更一般地说,有没有办法编写一个“垂直版本”的\@bsphack…… \@esphack

在以下最小示例中

\documentclass{article}
\parindent0pt
\author{}
\title{}

\makeatletter
\def\myAux{\write\@auxout{\string\def\string\mypage{\thepage}}}%%does disturb \lastskip
% \def\myAux{}%%                                                 does not disturb \lastskip
\makeatother

\begin{document}

First example: lastskip preserved\par
\vskip5pt

\addvspace{5pt}
Paragraph with 5pt space above: correct\par
\vskip5pt

\myAux
\addvspace{5pt}
Paragraph with 10pt space above: not correct!.
\end{document}

我的目标是让第二个的行为与第一个一样。为了实现这一点,\addvspace我需要如何定义 -Macro ?\myAux

而且,只是出于好奇:为什么首先要\write重置?\lastskip\z@

笔记:

  • 根据这个问题\immediate\write在这种情况下会有所帮助,但是因为我想存储最终输出的实际页码,所以我无法使用\immediate(对吗?)。

  • 假设文本 -> 空格 -> 书写 -> 空格 -> 文本的顺序是固定的。我的真实示例最终如下所示:小节后接一个段落,该段落包含两个单独的内联标题和一个边注

    它是一个小节(“3. Keine...”),作为独立标题, 0.5\baselineskip下方有空间,还有两个连续的内联标题(立法者,不要问……),其中第一个标题0.5\baselineskip上方有空间。如果两个或多个标题发生冲突,则应仅将其中一个值插入为垂直跳过(0.5\baselineskip而不是1\baselineskip)。在这两个标题块之间有一个宏,它会在边距中生成数字,还会调用\write.aux 文件:

    \subsection{3. Keine größeren Wettbewerbsverzerrungen}
    
    \Randnummer{30}
    \paragraph{a) Allgemeiner Regelungsinhalt.}
    \subparagraph{aa) Noch genauere Beschreibung was der Regelinhalt ist.}
    
    Selbst wenn...
    

    -macro\Randnummer需要位于 \subsection和 段落标题之间,因为 marginnote 应放置在与内联标题第一行相同的高度,而不是 的高度,也不是\subsection段落实际文本的起始位置,因此我无法将其移动到 后面\paragraph或 之前\subsection。我还注意到,marginnote 机制和连续标题本身都不会导致 的重置\lastskip,而只是\write。上面的 MWE 是核心问题的最小化版本。

相关内容