假设我有一些像这样的 .tex 代码
...
bla bla \framebox{Hello World} bla bla
...
我想读出pt
页面上框架框的位置(左侧和顶部或底部,以 s 为单位),并将其存储在变量中\myleft
。\myright
读出页面上的当前位置也足够了。(我想稍后在另一个程序中突出显示该框,因此我需要知道它在生成的 pdf 中的绝对位置。)
Synctex 似乎能够做到这一点,所以应该是可能的......但是如何做到呢?
答案1
\zsavepos
您可以使用参考值包。请注意,您需要使用 LaTeX 两次才能准确获得位置。
\documentclass{article}
\usepackage{zref-savepos}
\usepackage{fp}
\begin{document}
\zsavepos{XY}\fbox{Testing }
\medskip
\zposx{XY}, \zposy{XY}
\def\X{\FPdiv\result{\zposx{XY}}{65536}\result}
\def\Y{\FPdiv\result{\zposy{XY}}{65536}\result}
\X, \Y
\end{document}
编辑:显示使用fp
包进行计算的最少内容。
答案2
您可以使用 TikZ 及其选项的功能remember picture
。它需要两次编译运行。
\documentclass{article}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\lipsum[1]
\tikz[remember picture]\node(x){\framebox{Test}};
\lipsum[2-3]
% Later
% There are better ways to do this, I'm sure:
\begin{tikzpicture}
\path let \p0 = (x.north west) in
% \x0, \y0 hold the position from the lower left page corner
[/utils/exec={\message{x = \x0, y = \y0}}];
\end{tikzpicture}
\end{document}
答案3
需要运行两次 pdflatex
\documentclass{book}
\usepackage[savepos]{zref}
\begin{document}
\ldots
bla bla \zsavepos{fbox}\framebox{Hello World} bla bla
\ldots
the fbox starts at (\zposx{fbox}sp;\zposy{fbox}sp), which is the same
as (\the\numexpr \zposx{fbox}/65536\relax pt;
\the\numexpr \zposy{fbox}/65536\relax pt),
always measured from the left and bottom of the page
\end{document}