pgfmathresult 出现意外结果

pgfmathresult 出现意外结果

请查看以下 MWE。

\documentclass{scrartcl}
\usepackage{etoolbox}
\usepackage[absolute]{textpos}
\usepackage{tikz}
\begin{document}
\foreach \i in {1,2,3,...,30} {%
   \pgfmathparse{int(mod(\i,8))}%\pgfmathresult
   \begin{textblock*}{1cm}(5cm,5cm)
   \begin{tikzpicture}
    \node at (0,0) {test};
   \end{tikzpicture}
   \end{textblock*}
   \ifnumequal{\pgfmathresult}{0}{\newpage}{}
}
\end{document}

查看结果时,只有一个空白页。只有激活 \pgfmathresult(在循环的第一行)时,我才能获得所需的四页。但显然我不希望结果数字出现在我的页面上...

我需要改变什么?

答案1

问题是,textblock在绝对模式下,在输出例程中将某些内容放在页面上,而不是在排版模式下。这意味着,TeX 认为页面上没有放置任何内容,因此\newpage不会执行任何操作。请参阅textpos文档的第 2.2 节。该文档中的解决方案:放在\null之前\newpage,或任何产生不可见输出的内容,例如~

 \ifnumequal{\pgfmathresult}{0}{\null\newpage}{}

顺便说一句,现在你把 8 份“测试”叠放在一起。这是你想要的吗?

答案2

环境textblock会将内容排版到框中,在水平模式下不会发生变化。在垂直模式下\newpage没有效果,因此您必须\leavevmode在 之前添加textblock

环境textblock在 shipout 上排版内容,这就是为什么\newpage会看到空白页并且没有效果,所以您必须在页面的某个位置添加\leavevmode\null(取决于您是否需要缩进框)。

\documentclass{scrartcl}
\usepackage{etoolbox}
\usepackage[absolute]{textpos}
\usepackage{tikz}
\begin{document}
\foreach \i in {1,2,3,...,30} {%
   \pgfmathparse{int(mod(\i,8))}
   \begin{textblock*}{1cm}(5cm,5cm)
   \begin{tikzpicture}
    \node at (0,0) {test};
   \end{tikzpicture}
   \end{textblock*}
   \ifnumequal{\pgfmathresult}{0}{\leavevmode\newpage}{}
}
\end{document}

相关内容