我正在使用 TexLive 2017,想记录物体的位置。但是\vspace*{\fill}
当它在环境中时,最后一个物体的底部通常会超过一页multicols*
。这是 MWE:
\documentclass[a4paper,12pt]{article}
\usepackage[demo]{graphicx}
\usepackage{zref-savepos}
\usepackage[%
includeheadfoot, headheight=15pt, headsep=14pt, footskip=25pt,
top=8mm, bottom=8mm, left=1cm, right=1cm]{geometry}
\usepackage{multicol}
\setlength{\columnseprule}{0.4pt}
\begin{document}
\newwrite\writer
\openout\writer=\jobname.coors\relax
\begin{multicols*}{2}
\noindent%
\begin{minipage}[t]{\linewidth}
\zsavepos{tl}\includegraphics[width=0.9\linewidth]{demo}\zsavepos{br}
\end{minipage}%
\par%
\zsavepos{vfill-top}\vspace*{\fill}\zsavepos{vfill-bot}\pagebreak[0]
\edef\temp{\zposy{vfill-top} \zposy{vfill-bot}}
\write\writer\expandafter{\temp}
\end{multicols*}
\closeout\writer
\end{document}
经过两次编译后:
$ cat jobname.coors
44648671 -3423457
的底部\vspace*{\fill}
为负数,表示底部超出页面。
我做了两个独立的实验:
当
\zsavepos{tl}\includegraphics[width=0.9\linewidth]{demo}\zsavepos{br}
替换为时\includegraphics[width=0.9\linewidth]{demo}
,记录的坐标为45435103 3130143
。看起来不错。当删除
\begin{minipage}[t]{\linewidth}
和时,记录的坐标为。看起来也不错。\end{minipage}%
45435103 3130143
我不知道这是否是某些包的问题,或者我使用它们不正确,以及记录\vspace*{\fill}
内部位置的正确方法是什么multicols*
。
答案1
如果您想记录结束位置,则应该使用一个盒子:
\documentclass[a4paper,12pt]{article}
\usepackage[demo]{graphicx}
\usepackage{zref-savepos}
\usepackage[%
includeheadfoot, headheight=15pt, headsep=14pt, footskip=25pt,
top=8mm, bottom=8mm, left=1cm, right=1cm]{geometry}
\usepackage{multicol}
\setlength{\columnseprule}{0.4pt}
\begin{document}%\today
\begin{multicols*}{2}
\noindent%
\begin{minipage}[t]{\linewidth}
\zsavepos{tl}\includegraphics[width=0.9\linewidth]{demo}\zsavepos{br}
\end{minipage}%
\par%
\zsavepos{vfill-top}\vspace*{\fill}\mbox{\zsavepos{vfill-bot}}\pagebreak[0]
\edef\temp{\zposy{vfill-top} \zposy{vfill-bot}} \show\temp
\end{multicols*}
\end{document}
答案2
顺便提一下,我最近也遇到了同样的问题。解决此相关问题的方法是多编译几次 latex,这样就不需要使用 \hbox 或 \mbox 了。我目前已经编译了 3 次。