以下代码(MWE)
\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage[absolute]{textpos}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{textblock}{4}[0,0](1.3,2.5)
\begin{center}
SOME TITLE TEXT SOME TITLE TEXT\\
SOME TITLE TEXT SOME TITLE TEXT
\end{center}
\end{textblock}
\thispagestyle{empty}
\mbox{} \clearpage %flush this page
\begin{figure}
\begin{tikzpicture}
\path[draw] (20mm,150mm) -- (20mm,250mm);
\path[draw] (100mm,150mm) -- (100mm,250mm);
\end{tikzpicture}
\end{figure}
\end{document}
预计将产生两页;
第一个包含一些标题文本,第二个包含两条平行线。
相反,在第二页附加了第一页(看一下图片)
我正在使用pdflatex
MikTeX 2.9(已更新)并用 进行编译-enable-write18
。
怎么了?
答案1
问题在于textpos
包和externalize
库都利用了 TeX shipout 机制。
据称,externalize
应该忽略环境之外的所有文本tikzpicture
,包括textblock
环境中的文本。然而,textpos
在absolute
模式中,这些文本包含在页面末尾附带的框内,显然 tikz 对此并不知情,因此干扰了正在externalize
尝试构建的“页面”。
我发现的窍门是textpos
在使用后清空此框。在这个特定示例中,以下 MWE 有效,但我不知道它是否足够通用。请在您的实际用例中尝试它并告诉我们。
\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage[absolute]{textpos}
\makeatletter
\def\cleartextposbox{\global\setbox\TP@holdbox\vbox{}}
\makeatother
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{textblock}{4}[0,0](1.3,2.5)
\begin{center}
SOME TITLE TEXT SOME TITLE TEXT\\
SOME TITLE TEXT SOME TITLE TEXT
\end{center}
\end{textblock}
\thispagestyle{empty}
\null\newpage\cleartextposbox % <-----
\begin{figure}
\begin{tikzpicture}
\path[draw] (20mm,150mm) -- (20mm,250mm);
\path[draw] (100mm,150mm) -- (100mm,250mm);
\end{tikzpicture}
\end{figure}
\end{document}