相当于盒子的 \pdfsavepos 吗?

相当于盒子的 \pdfsavepos 吗?

假设我使用一个环境来排版一些文本,该环境将文本放在一个我指定宽度的框中。 (我不在乎这是一个小页面、表格还是其他什么。)我想将框的坐标写入文件。 (我可能会使用 xetex,因为这涉及希腊文本,而且在我尝试过的其他 tex 实现中这似乎太痛苦了。)在 pdftex 及其扩展(如 xetex)中,我可以\pdfsavepos在文本的开头和结尾使用,并使用 write18 写入坐标。 但我认为这实际上不会给我框的左上角和右下角坐标的坐标。 我想它会记录基线(?)上第一个字符之前和最后一个字符之后一个点的位置。

有没有办法输出框的实际坐标,或者我必须通过基于框的宽度、字体的上升和下降高度以及可能的框/环境的边距进行算术来估算它?如果我必须自己做算术,是否有一些方便、自动化的方法来找出正在排版的字体的相关字体尺寸?

答案1

您可以将内容放在盒子寄存器中,然后访问其宽度、高度和深度以及位置\pdfsavepos(这需要多次运行乳胶)

在此处输入图片描述

\documentclass{article}

\newsavebox\zzz

\makeatletter
\newcommand\usewithpos[2]{%
  \ifcsname zz#1\endcsname\else
  \expandafter\gdef\csname zz#1\endcsname{{}{}{}{}{}}%
   \fi
\pdfsavepos
\protected@write\@auxout{}{%
  \gdef\expandafter\string\csname zz#1\endcsname{%
  {\noexpand\the\pdflastxpos}{\noexpand\the\pdflastypos}{\the\wd#2}{\the\ht#2}{\the\dp#2}}}%
  \usebox{#2}}
\makeatother
\newcommand\boxdims[5]{%
 \par
  position (#1sp,#2sp)\par width #3, height #4, depth #5
}
\begin{document}

\savebox\zzz{\parbox{3cm}{one\\twooooo\\threeeeeeeee}}


A paragraph with no interest.

and here we use the box \fbox{\usewithpos{a}{\zzz}}

\savebox\zzz{\makebox[2cm]{x}}

and a second box \fbox{\usewithpos{b}{\zzz}}.


The first box is:

 \expandafter\boxdims\zza.

The second box is:

 \expandafter\boxdims\zzb.

\end{document}

相关内容