在我的文档中,我需要在草稿模式下显示一些标签。但它们的高度和深度应为零(目的是不影响结果文本:除标签外,所有标签在草稿和发布模式下都应该相同)。但如果我的标签曾经位于章节标题之前,乳胶不会省略前导\vspace
。这是一个 MWE:
\documentclass[12pt]{report}
\usepackage[english]{babel}
\begin{document}
\vspace{3cm}
Here we see that \verb'\vspace' omits.\pagebreak
\vbox to 0pt{\raisebox{0pt}[\height][0pt]{some text}}
\vspace{3cm}
But here it presents!
\end{document}
甚至技巧也对\raisebox
我没用。
我看到的唯一变体是\newif
像在宏中\ifomitvspace
那样\omitvspacetrue
创建注释,然后\title
进行检查,并且不执行\vspace
if \ifomitvspace
。要关闭此功能,我应该这样做\everypar{\omitvspacefalse}
。但我认为这很丑陋。
更新型多巴胺paracol
不幸的是,我没有找到在环境 中垂直空间内挣扎的方法。由于它重新定义了\everypar
,David Carlisle 的答案不起作用。我猜使用一些标志并重新定义 \@vspace 也不起作用(因为它省略了全部空格而不是只有顶部)。这很可悲。
答案1
总的来说,这很棘手,您可以看看颜色或 showkeys 包如何尝试避免影响原始文本的位置(但没有完全成功)。
代码expl3
l3galley
通过完全控制垂直模式来解决这个问题,如果一切都遵守规则,它就会起作用,但是在 latex2e 中,可以不受限制地访问 latex 和 tex 基元,将垂直列表添加到其中,这实际上不是一个选择。
我会推迟任何垂直模式的使用,直到下一段开始,那时事情更容易控制:
\documentclass[12pt]{report}
\usepackage[english]{babel}
\let\oldeverypar\everypar
\oldeverypar{\the\everypar\the\mynotes\global\mynotes{}}
\newtoks\mynotes
\protected\long\def\mynote#1{%
\ifvmode
\global\mynotes\expandafter{\the\mynotes\smash{\raise\baselineskip\rlap{#1}}}%
\else
\smash{\raise\baselineskip\rlap{#1}}%
\fi}
\newtoks\everypar
\begin{document}
\vspace{3cm}
Here we see that \verb'\vspace' omits.\pagebreak
\mynote{some text}
\vspace{3cm}
But here it presents!
\end{document}