![不影响其他文本位置的文本](https://linux22.com/image/241027/%E4%B8%8D%E5%BD%B1%E5%93%8D%E5%85%B6%E4%BB%96%E6%96%87%E6%9C%AC%E4%BD%8D%E7%BD%AE%E7%9A%84%E6%96%87%E6%9C%AC.png)
我希望能够在文档中放置文本块,而不会影响其主要部分的布局。(具体来说,我正在为之前写的考试写解决方案;我希望能够添加解决方案而不会导致原始考试的文本移动。)
不管怎样,原来的间距主要是通过“\vfill”处理的,我希望它们仍然占用相同的空间。(原则上,这意味着如果解决方案太长,它会超出并最终落在下一个问题的顶部,我预计必须手动检查以确保这种情况不会发生。)
更新:以下是举个例子,只是间距不太正确。(打字机字体的内容是解决方案。)关键是我想保留原始考试内容的间距,同时将解决方案(包括格式)插入留下的空隙中。如果空间不足,我预计任何解决方案都可能导致疯狂的事情发生,但我希望典型情况是,我的解决方案适合分配的空间,相对无缝。
答案1
\newsavebox{\zerobox}
\newenvironment{nospace}
{\par\edef\theprevdepth{\the\prevdepth}\nointerlineskip
\setbox\zerobox=\vtop to 0pt\bgroup
\hrule height0pt\kern\dimexpr\baselineskip-\topskip\relax
}
{\par\vss\egroup\ht\zerobox=0pt \wd\zerobox=0pt \dp\zerobox=0pt
\box\zerobox}
Here ends the text of the question
\begin{nospace}
Here is the solution
\end{nospace}
\vfill
以下是一个示例文档:
\documentclass[a4paper]{article}
\usepackage{multicol}
\newsavebox{\zerobox}
\newenvironment{nospace}
{\par\edef\theprevdepth{\the\prevdepth}\nointerlineskip
\setbox\zerobox=\vtop to 0pt\bgroup
\hrule height0pt\kern\dimexpr\baselineskip-\topskip\relax
}
{\par\vss\egroup\ht\zerobox=0pt \wd\zerobox=0pt \dp\zerobox=0pt
\box\zerobox}
\begin{document}
Some text that may have descenders
\begin{nospace}
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
Here is some text
\end{nospace}
\vspace{10cm}
\textbf{And here is something else}
\newpage
Some text that may have descenders
\vspace{10cm}
\textbf{And here is something else}
\end{document}
结果如下,表明插入不占用空间
答案2
对此有多种可能性,取决于您的确切需要。
您可以使用\llap{<text>}
和\rlap{<text>}
分别添加不占用任何水平空间以及向左或向右重叠的文本。
使用\raisebox{<raise amount>}[<set height>][<set depth>]{<text>}
,即\raisebox{0pt}[0pt][0pt]{<text>}
您可以将文本的高度和深度设置为零(实际上不提高它)。这也可以通过\smash{<text>}
宏完成。
例如,您可以使用\llap{\smash{<text>}}
将一些文本放置在当前位置的左侧,而不占用任何垂直或水平空间。但是,这将进入水平模式,例如,如果您正处于段落之间,则会开始一个新段落。
然后是我的adjustbox
包提供了键set height
、set depth
和lap
,例如\adjustbox{set height=0pt,set depth=0pt,lap=-\width}{<text>}
将与上面提到的 相同\llap{\smash{<text>}}
。在这种特定情况下,使用该包没有真正的好处,但您可以轻松添加更多,例如,如果您需要换行或框架,则分别添加minipage
或fbox
键。请参阅我的回答文本(框)相对于其他文本的定位举个例子。
最后,如果您使用选项,您可以使用 TikZ 将文本放置在当前页面的绝对位置remember picture,overlay
。overlay
整个图片也不会占用任何空间。然后文本将成为\node {<text>};
答案3
作弊一下!用白色打印答案!稍后您可以将颜色更改为正常颜色。(您可以为此编写一个宏)。
\documentclass{article}
\usepackage{xcolor}
\usepackage{lipsum}
\parindent0pt
\begin{document}
\textbf{Question}
\lipsum[1]
\textbf{Answer}
\textcolor{white}{
\lipsum[1]}
\textbf{Question}
\end{document}