请查看以下 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}