![TikZ 占用两页来显示空输出](https://linux22.com/image/335688/TikZ%20%E5%8D%A0%E7%94%A8%E4%B8%A4%E9%A1%B5%E6%9D%A5%E6%98%BE%E7%A4%BA%E7%A9%BA%E8%BE%93%E5%87%BA.png)
下面的简单 .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}