命令类似于 \afterpage,但针对的是行而不是页

命令类似于 \afterpage,但针对的是行而不是页

有时我想告诉 latex 在完成当前正在排版的行后执行某些操作。例如,可能想在段落中间使用命令\needspace{4\baselineskip}(假设needspace已加载包)来防止当前段落后出现分页符。如果做得天真,这可能会过早结束当前段落。

我知道一些标准的 latex 命令会\vspace自动等到当前行结束才执行。有没有办法让其他命令也模仿这种行为?

注意:就我个人而言,我认为在这种情况下 MWE 没什么用。但是,如果我不提供,我肯定有人会要求提供,因此这里有一个不完全最小化的工作示例:

\documentclass[letterpaper]{article}
\usepackage{lipsum}
\usepackage{needspace}

\usepackage{amsthm}
\theoremstyle{plain}
\newtheorem{exercise}{Exercise}

\usepackage{xcolor}
\newcommand{\blank}[1]{\textcolor{white}{#1}}
%\newcommand{\blank}[1]{#1}

\begin{document}
\lipsum[1-4]
\begin{exercise}
This is an exercise that involves an equation, which is printed below.
\begin{equation}
1+1=2
\end{equation}
Please study the equation and somehow do something in the Solution box,
which may or may not be filled in depending on which line is commented out.
Please study the equation and\needspace{4\baselineskip}\noindent somehow do something in the Solution box,
which may or may not be filled in depending on which line is commented out.
\end{exercise}
\begin{proof}[Solution]
\blank{%
\lipsum[5-6]\qedhere%
}
\end{proof}
\end{document}

答案1

基本答案是否定的。Donald Arseneau 的magaz软件包竭尽全力将不同的格式应用于段落的第一行。参见为什么仅用于第一行排版的颜色(使用 magaz 包)会影响整个文档?对段落中任意一点进行这样的操作会更加困难。

请注意,它\vspace不是在行后执行,而是在它出现的位置执行,但会重新插入(在排版完整个段落之后)在包含原始空格命令的行之后。(标记和插入(例如图形)的工作方式类似)。

基本要点是,整个段落基本上设置为一行,当调用段落分隔符将段落分成几行时,所有宏(和分配)都已完成。 分隔符只处理框。

注意 luatex 提供的回调可能会使上述答案无效。


请注意,您可以定义类似的命令\vspace在行之间插入垂直材料,但这些命令在错误的地方执行,无法根据换行做出任何决定,例如\vadjust{\hbox{hello}}在当前行后插入 hello。

相关内容