1.测量段落的总高度:
您好,我正在尝试绘制一个与段落高度和宽度相同的黑框,其中包含多行。为此,我需要知道段落的大小,我正在使用以下函数:
\documentclass{article}
\newlength{\mytextheight}
\newsavebox{\mytext}
\newcommand{\TestHeight}[1]
{
\savebox{\mytext}{#1}
\settoheight{\mytextheight}{\usebox{\mytext}}
{#1}
Height of Text: \the\mytextheight\\
}
\begin{document}
\TestHeight{This is sample text.}
\TestHeight{\Large This is larger text.}
\TestHeight{
This is sample text with multiple lines.\\
This is the second line.
The height is the same height as with one single line !! ?? \\
settoheight is very bad...
}
\end{document}
测试后可以看出,高度根本不是理想的高度(单线和多线的高度相同)。-> 如何真正测量这一点?
2. 用相同尺寸、相同位置的黑色矩形替换段落
在我们获得良好的高度后,如何创建一个 tikz 宏,用相同位置上具有完全相同尺寸(高度、宽度)的黑色矩形替换段落中的文本?我试过这个宏,但根据上面的解释,它显然不起作用,因为总高度不好:
\usepackage{tikz} %to be used with package below:
\newlength\heighthide
\newlength\widthhide
\newcommand\hide[1]{%
\settoheight{\heighthide}{#1}%
\settowidth{\widthhide}{#1}%
\tikz{\node[inner sep=0pt,rectangle,draw,
text height=\heightconf,
text width=\widthconf,
fill=black]{};}
}
提前感谢你的帮助。
答案1
a 中的文本\savebox
全部排版在一行上。您需要\parbox
在 内部使用 a \savebox
。
用黑框表示真实段落也存在一些问题,主要问题是恢复行距的正确深度。
该示例使用了两列只是为了并排查看效果。
\documentclass{article}
\usepackage{multicol}
% in a \parbox the indent is set to zero, so we save it
\newlength{\saveparindent}
\AtBeginDocument{\setlength{\saveparindent}{\parindent}}
\newsavebox{\mytext}
\newcommand{\hide}[1]{%
\savebox{\mytext}{%
\parbox[t]{\columnwidth}{
\setlength{\parindent}{\saveparindent}
#1\par\xdef\savedprevdepth{\the\prevdepth}
}%
}%
\noindent
\vrule height \ht\mytext % the height of \mytext
depth \dp\mytext % the depth of \mytext
width \columnwidth
\par
% restore \prevdepth to compute correctly the interline glue
\prevdepth\savedprevdepth
}
\begin{document}
\begin{multicols}{2}
Some text.
A paragraph that in the next column will be hidden.
Another hidden paragraph.
Some text.
Some text.
\hide{A paragraph that in the next column will be hidden.
Another hidden paragraph.}
Some text.
\end{multicols}
\end{document}