我可以检索 pdf 页面上某些指定文本的位置以供后续使用吗?

我可以检索 pdf 页面上某些指定文本的位置以供后续使用吗?

我正在处理 LaTeX 中的文本(我的系统上安装了 TeXLive 2017),如果有任何方法可以“保存”单词的水平位置(单词的开头、中点或结尾),以便我可以从我保存的水平位置开始下一行,这将非常有帮助。

下面的例子表达了我所想的意思:

\documentclass[11pt,a4paper]{article}
\usepackage{tabto}

\begin{document}
\noindent What I'd like to do is the following: I'm writing something, then I make a jump
\newline
\noindent\phantom{jump} from the end of last word
\newline
\noindent\phantom{jump from the end of last wo}or the midpoint
\newline
\noindent\phantom{jump from the end of last woor the }or the beginning of it
\end{document}

显然,我首先必须打开pdflatex该文件,然后发现输出 pdf 文件的第二行以单词“jump”开头,然后回到我的 .tex 文件,\nextline在输入“从最后一个单词的末尾”之前执行并幻影出单词“jump”,然后pdflatex再次打开该文件,依此类推。

我真正想要做的是定义一个命令(或者使用它,如果它已经存在),以便在几次pdflatex执行中,我可以获得与以下内容相同的结果:

\documentclass[11pt,a4paper]{article}
\usepackage{tabto}

\begin{document}
\noindent What I'd like to do is the following: I'm writing something, then I make a \xendsave{jump}{\xPosTag}
\newline
\noindent \xskipto{\xPosTag} from the end of last \xmidsave{word}{\xPosTag}
\newline
\noindent \xskipto{\xPosTag} or the \xbeginsave{midpoint}{\xPosTag}
\newline
\noindent \xskipto{\xPosTag} or the beginning of it
\end{document}

如有任何建议,我们将不胜感激:)提前谢谢

费德里科

编辑:根据建议,我使用了该zref包,以及tabto(我用它来跳到保存的 x 位置)和xfp(用于计算)。

以下是我所取得的成果:

\documentclass[11pt,a4paper]{article}
\usepackage{tabto}

\usepackage[savepos]{zref}
\usepackage{xfp}

\newcommand{\xsptolinepospt}[1]{
  \fpeval{#1/65536.-(1in+\hoffset+\oddsidemargin)}
}
\newcommand{\xcapoend}[1]{ 
  #1\zsaveposx{xendtag}
  \newline
  \noindent \tabto{\xsptolinepospt{\zposx{xendtag}} pt}
}
\newcommand{\xcapobegin}[1]{ 
  \zsaveposx{xbegintag}#1
  \newline
  \noindent \tabto{\xsptolinepospt{\zposx{xbegintag}} pt}
}
\newcommand{\xcapomiddle}[1]{ 
  \zsaveposx{xbegintagg}#1\zsaveposx{xendtagg}
  \newline
  \noindent \tabto{\xsptolinepospt{ \fpeval{ 0.5*(\zposx{xbegintagg}+\zposx{xendtagg})} } pt}
}

\begin{document}
\noindent What I'd like to do is the following: I'm writing something, 
then I make a \xcapoend{jump}from 
the end of last\xcapomiddle{word}or 
the\xcapobegin{midpoint}or the beginning of it
\end{document}

我的代码不太优雅。但是,它工作正常;它要求我pdflatex多次访问文件才能收敛到所需的结果,一旦我看到它发生,我就认为这是可以预料到的,因为它的zsavepos工作方式(就我所能理解的而言)。

相关内容