我的问题是关于使用包 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
,而是使用\dimexpr
from 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}