确定页面上某个框的位置(例如)

确定页面上某个框的位置(例如)

假设我有一些像这样的 .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}

相关内容