TikZ 占用两页来显示空输出

TikZ 占用两页来显示空输出

下面的简单 .tex 文件使用 TexShop 生成一个三页的 PDF(我在 Mac 上使用的是最新版本),其中前两页是空白的,第三页包含“此处的普通文本”部分。

我做错了什么?为什么 TexShop 需要两个页面来显示这么小的 TikZ 图片,为什么它无法正确显示?

\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}

\newdimen\myUnit

\setlength{\myUnit}{1cm}


\begin{document}
  \begin{tikzpicture}
  \pgfmathsetmacro{\xOne}{\myUnit}% 
 \pgfmathsetmacro{\xTwo}{2*\myUnit}% 
 \pgfmathsetmacro{\xThree}{\myUnit}%
  \pgfmathsetmacro{\yOne}{2*\myUnit}% 
 \pgfmathsetmacro{\yTwo}{\myUnit}% 
 \pgfmathsetmacro{\yThree}{\myUnit}%
  \useasboundingbox (0,0) (\xOne+\xTwo+\xThree,\yOne+\yTwo+\yThree);
 \path[draw=cyan] (0,0)
 -- ++(\xOne,\yOne)
 -- ++(\xTwo,\yTwo)
 -- ++(\xThree,-\yThree) 
 -- ++(\xThree,\yThree) 
 -- ++(\xTwo,-\yTwo)
 -- ++(\xOne,\yOne)
 -- cycle
 ;
  \end{tikzpicture}
  Normal text here
\end{document}

答案1

您的文件tikzpicture实际上变得相当大,因此无法放在第一页,然后 LaTeX 放弃并将其放在第二页。要查看它是否变得有点大,请添加\usetikzlibrary{backgrounds},然后[show background rectangle]在 之后添加\begin{tikzpicture}

要理解为什么会失败,请注意长度存储为,而 1cm 大约是 28.45 点。因此,\xOne\xTwo几乎是预期的 30 倍,请考虑以下示例:

\documentclass{article}
\usepackage{tikz,array}
\newdimen\myUnit
\setlength{\myUnit}{1cm}
\begin{document}
\pgfmathsetmacro{\xOne}{\myUnit}% 
\pgfmathsetmacro{\xTwo}{2*\myUnit}% 
\pgfmathsetmacro{\xThree}{\myUnit}%
\pgfmathsetmacro{\yOne}{2*\myUnit}% 
\pgfmathsetmacro{\yTwo}{\myUnit}% 
\pgfmathsetmacro{\yThree}{\myUnit}%   

\begin{tabular}{>{\ttfamily}ll}
myUnit & \the\myUnit \\
xOne & \xOne \\
xTwo & \xTwo \\
xThree & \xThree \\
yOne & \yOne \\
yTwo & \yTwo \\
yThree & \yThree    
\end{tabular}
\end{document}

输出结果如下:

在此处输入图片描述

为了解决这个问题,您可以使用\pgfmathsetlengthmacro代替,参见下面的示例,或者您可以使用\pgfmathsetmacro{\myUnit}{1}代替长度。

\documentclass{article}
\usepackage{tikz}
\newdimen\myUnit
\setlength{\myUnit}{1cm}

\begin{document}
\begin{tikzpicture}
\pgfmathsetlengthmacro{\xOne}{\myUnit}% 
\pgfmathsetlengthmacro{\xTwo}{2*\myUnit}% 
\pgfmathsetlengthmacro{\xThree}{\myUnit}%
\pgfmathsetlengthmacro{\yOne}{2*\myUnit}% 
\pgfmathsetlengthmacro{\yTwo}{\myUnit}% 
\pgfmathsetlengthmacro{\yThree}{\myUnit}%
\useasboundingbox (0,0)  (\xOne+\xTwo+\xThree,\yOne+\yTwo+\yThree);
 \path[draw=cyan] (0,0)
 -- ++(\xOne,\yOne)
 -- ++(\xTwo,\yTwo)
 -- ++(\xThree,-\yThree) 
 -- ++(\xThree,\yThree) 
 -- ++(\xTwo,-\yTwo)
 -- ++(\xOne,\yOne)
 -- cycle
 ;
  \end{tikzpicture}
  Normal text here
\end{document}

在此处输入图片描述

相关内容