我想获取文本左上角的位置和文本右下角的位置。现在我正在使用下面的代码,它对图像有效,但对文本无效,因为它会破坏文本流(见下图。备注:边框说明了由两个测量点创建的矩形,并不在实际输出中)
\begin{tabular}{c c c}
\zlabel{Overlay\arabic{overlay}} \zsavepos{Overlay\arabic{overlay}1} & & \\
& Testquery test test test & \\
& & \zsavepos{Overlay\arabic{overlay}2}\\
\end{tabular}
我如何改进上述代码并避免文本流中断?
答案1
这个答案可能不合适,因为除了X-左上角和右下角的位置,它只给出dz文本,即相对的在某一方面的变化是从短语的开头开始,而不是页面上的绝对坐标。它使用tabto
,而不是zref
。
我根据我在在文本背景上绘制 Tikz 突出显示,虽然这里的结果可能看起来有点混乱,但它可以向您详细展示正在做的事情。
此处,命令\Ohighlight{}
界定了我们希望“测量”的内联文本。红色文本是相对于预先存在的文本设置的(即从中间行开始,带有换行、段落等)。
在\Ohighlight
第二次被叫之前的任何时间点,我可以回忆起X-文本开始和结束的坐标以及dz文本使用。我创建宏\demo
来显示这一点。它重叠了高度规则dz向左移动;然后设置测量的框(青色),正确使用其中线起点。在设置的框下方,它会缩进到文本开头的开头(\tmpx
} 并在文本结尾处创建一条规则(\tmpy
),表明它记住了文本的开始和结束位置。
在这个图形演示下面,它打印了dz,x1, 和x2。
\documentclass{minimal}
\usepackage{xcolor}
\newlength\svpi
\newsavebox\tmpbox
\usepackage{tabto}
\newcommand\Ohighlight[2][]{\color{cyan}%
\tabto*{0in}\edef\tmpx{\TabPrevPos}\tabto*{\tmpx}%
\setlength\svpi{\the\parindent}%
\savebox\tmpbox{%
\begin{minipage}[b]{\textwidth}\parindent\svpi%
\tabto*{\tmpx}#2\strut%
\end{minipage}}%
{#2}%
\vspace*{\dimexpr-\dp\tmpbox-\ht\tmpbox+\dp\strutbox}%
\tabto*{\tmpx}\color{red}#2\unskip\color{black}\ %
\edef\tmpy{\TabPrevPos}%
}
\textwidth=5in
\def\demo{\noindent\llap{%
\rule[-\dp\strutbox]{3pt}{\dimexpr+\dp\tmpbox+\ht\tmpbox+\ht\strutbox}}%
\makebox[0pt][l]{\usebox{\tmpbox}}\\
\tabto{\tmpx}\rule{\dimexpr\tmpy-\tmpx\relax}{3pt}%
\par dz=\the\dimexpr+\dp\tmpbox+\ht\tmpbox+\ht\strutbox; x1,x2: \tmpx, \tmpy}
\begin{document}
The original highlight is drawn over the text.
The original definition works over...
Multi paragraphs, so my fix should try to as well.
\bigskip
Now here is my fix. \Ohighlight{The highlight is drawn under the text}
Does it work multiline?
\demo
multiline?
\Ohighlight{The highlight is drawn under the text The highlight is drawn under the text The highlight is drawn under the text The highlight is drawn under the text
A new paragraph}
And more...
\demo
\Ohighlight{short}
\demo
\end{document}