绝对位置的计算

绝对位置的计算

我的问题是关于使用包 textpos 进行计算。

通过使用 zsavepos 保存文本块的垂直位置并计算其中间位置,我想将文本块定位在相同的垂直位置。

在下面的例子中,它似乎不起作用。

谢谢您的回答。

\documentclass{article}
\usepackage{lipsum}
\usepackage{zref-savepos}
\usepackage[absolute,overlay]{textpos}
\usepackage{calc}

\begin{document}

\zsavepos{begin}
\lipsum[20]
\zsavepos{end}

\begin{textblock*}{2.5cm}[0.5,0.5](2cm,0.5\zposy{begin}sp-0.5\zposy{end}sp)
\noindent \textit{Text that should be centered vertically.}
\end{textblock*}

\begin{textblock*}{2.5cm}[0.5,0.5](2cm,11143907sp)
\noindent \textit{Text approximately properly centered.}
\end{textblock*}

\end{document}

答案1

我认为这里面发生了几件事。

第一个函数\zposy返回从页面底部测量的垂直位置。在下一个示例中,我不再使用包calc,而是使用\dimexprfrom e-TeX

我相信这会给你带来你想要的结果:

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{lipsum}
\usepackage{zref-savepos}
\usepackage[absolute,overlay]{textpos}
\begin{document}

\zsavepos{begin}
\lipsum[20]
\zsavepos{end}

\begin{textblock*}{2.5cm}[0,0.5](2.5cm,{\dimexpr\paperheight-\zposy{begin}sp+(\zposy{begin}sp-\zposy{end}sp)/2})
  \noindent \textit{Text that should be centered vertically.}
\end{textblock*}

\begin{textblock*}{2.5cm}[0,0.5](\dimexpr\paperwidth-3.5cm,11143907sp)
\noindent $\circ$\textit{Text approximately properly centered.}
\end{textblock*}

\end{document}

在此处输入图片描述

顺便,

0.5\zposy{begin}

没有达到您的预期。如果\zposy{begin}5,则0.5\zposy{begin}扩展为0.55不是2.5

要计算 y 位置,您需要执行以下操作之一:

\zposy{begin}/2

或者

\zposy{begin}*\real{0.5}

因此,要正确计算位置使用calc

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{lipsum}
\usepackage{zref-savepos}
\usepackage{calc}
\usepackage[absolute,overlay]{textpos}
\begin{document}

\zsavepos{begin}
\lipsum[20]
\zsavepos{end}

\begin{textblock*}{2.5cm}[0,0.5](2.5cm,\paperheight-\zposy{begin}sp+\zposy{begin}sp*\real{0.5}-\zposy{end}sp*\real{0.5})
  \noindent \textit{Text that should be centered vertically.}
\end{textblock*}

\end{document}

相关内容