我需要使用 XeLaTeX 排版页面上的几个单词结尾的坐标,相对于页面的左下角。例如,我需要一个\getposition{label}
可以按以下方式使用的宏:
\documentclass{article}
\begin{document}
Blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla
blabla blabla\getposition{abc} blabla blabla blabla blabla blabla\getposition{def} blabla blabla blabla
blabla blabla blabla\getposition{ghi} blabla blabla blabla blabla blabla blabla blabla
blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla
blabla blabla.\getposition{jkl}
\end{document}
因此,我需要在日志文件或其他文件中列出标签和坐标(以 sp 为单位),如下所示:
abc:1562354sp,78944895sp
def:2562153sp,78944895sp
ghi:1326435sp,64253484sp
jkl:645435sp,13264356sp
我尝试了\pdfsavepos
、和\pdflastxpos
,但它在日志文件中只写入零(因为它只知道发货时间的信息,但我如何跟踪多个“最后位置”?)。\pdflastypos
\message
当然,我可以进入 XDV 文件并计算每个点的位置,但这意味着要处理 DVI 堆栈并计算所有水平元素的宽度,直到标记点。我知道有实用程序dvipos
可以做到这一点,但它似乎不适用于 XDV 文件。
还有其他方法可以直接获取信息吗,也许使用 TikZ 或其他方法?
答案1
\documentclass{article}
\makeatletter
\def\getposition#1{%
\pdfsavepos
\write\@auxout{%
\gdef\string\X#1{\the\pdflastxpos}%
\gdef\string\Y#1{\the\pdflastypos}}%
}
\makeatother
\begin{document}
Blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla
blabla blabla\getposition{abc} blabla blabla blabla blabla blabla\getposition{def} blabla blabla blabla
blabla blabla blabla\getposition{ghi} blabla blabla blabla blabla blabla blabla blabla
blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla
blabla blabla.\getposition{jkl}
\ifdefined\Xabc abc is at (\Xabc,\Yabc)\else\typeout{re-run latex}\fi
\ifdefined\Xghi ghi is at (\Xghi,\Yghi)\else\typeout{re-run latex}\fi
\end{document}
你把它们全部写入辅助文件,然后在第二次运行时将它们取出