我正在使用安装了 texlive-full 包的 Debian/Squeeze。
在使用 TikZ 成功制作出普通文章大小的图形后,我开始对使用它制作 a0 尺寸的海报产生了兴趣。
作为我遇到的问题的一个(相当)最小的独立示例,如果任何指示的行未注释(因此基本上当它尝试创建页面宽度的一半或更多或大约一半的弧时),下面的代码将失败并出现“尺寸太大”错误。我正在处理它pdflatex
。
\documentclass[onlymath]{beamer}
\usefonttheme{serif}
\usepackage[orientation=portrait,size=a0,scale=1.0]{beamerposter}
\usepackage{eulervm}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,matrix}
\begin{document}
\begin{frame}[t,fragile]{}
\begin{block}{Big TikZ Test}
\begin{center}
\begin{tikzpicture}
\tikzstyle{blk} = [rectangle,draw,text width=2in,text centered];
\tikzstyle{edge} = [draw,line width=3pt,black!50];
\matrix[row sep=1cm,column sep=1cm] {
\node[blk] (a) {A};
&
\node[blk] (b) {B};
&
\node[blk] (c) {C};
&
\node[blk] (d) {D};
&
\node[blk] (e) {E};
&
\node[blk] (f) {F};
&
\node[blk] (g) {G};
&
\node[blk] (h) {H};
&
\node[blk] (i) {I};
&
\node[blk] (j) {J};
\\
};
\path[edge] (j) edge [->,bend left=30] (i);
\path[edge] (j) edge [->,bend left=30] (h);
\path[edge] (j) edge [->,bend left=30] (g);
\path[edge] (j) edge [->,bend left=30] (f);
\path[edge] (j) edge [->,bend left=30] (e);
% Uncommenting any of these fails with 'Dimension too large.' error
\path[edge] (j) edge [->,bend left=30] (d);
% \path[edge] (j) edge [->,bend left=30] (c);
% \path[edge] (j) edge [->,bend left=30] (b);
% \path[edge] (j) edge [->,bend left=30] (a);
\end{tikzpicture}
\end{center}
\end{block}
\end{frame}
\end{document}
从这里的其他类似问题,我了解到其中涉及一些有限范围的数据类型,但所有建议的代码片段修复(通常涉及包含一些 pgf 包并弄乱一些 fp / fpu 东西)似乎都不适合我(它们会产生自己的错误)。
是否可以通过修改上述代码和/或采用这些工具的不同版本(例如 Debian/Wheezy - 尚未尝试 - 有 PGF 2.10 而 Squeeze 是 2.00)来解决此问题,或者这只是一个根本限制,而我试图将这些工具推得太远?
答案1
更新
问题只出现在边缘上。一种可能性是只缩放边缘。首先我们获取坐标,然后将其除以 10,最后将坐标缩放 10。我更改了原始代码中的一些样式。
\documentclass[onlymath]{beamer}
\usefonttheme{serif}
\usepackage[orientation=portrait,size=a0,scale=1.0]{beamerposter}
\usepackage{eulervm}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,matrix}
\begin{document}
\begin{frame}[t,fragile]{}
\begin{block}{Big TikZ Test}
\begin{center}
\begin{tikzpicture}[blk/.style= {rectangle,draw,text width=2in,text centered},
edge/.style = {draw =black!50 ,line width=3pt,->}]
\matrix[row sep=1cm,column sep=1cm] {%
\node[blk] (a) {A};
&
\node[blk] (b) {B};
&
\node[blk] (c) {C};
&
\node[blk] (d) {D};
&
\node[blk] (e) {E};
&
\node[blk] (f) {F};
&
\node[blk] (g) {G};
&
\node[blk] (h) {H};
&
\node[blk] (i) {I};
&
\node[blk] (j) {J};
\\
};
\path[edge] (j) edge [bend left=30] (i)
edge [bend left=30] (h)
edge [bend left=30] (g)
edge [bend left=30] (f)
edge [bend left=30] (e);
\path (a.south);
\pgfgetlastxy{\ax}{\ay}
\path (b.south);
\pgfgetlastxy{\bx}{\by}
\path (c.south);
\pgfgetlastxy{\cx}{\cy}
\path (d.south);
\pgfgetlastxy{\dx}{\dy}
\begin{scope} [scale=10]
\path[edge] (j) edge [bend left=30] (0.1*\dx,0.1*\dy)
edge [bend left=30] (0.1*\cx,0.1*\cy)
edge [bend left=30] (0.1*\bx,0.1*\by)
edge [bend left=30] (0.1*\ax,0.1*\ay);
\end{scope}
\end{tikzpicture}
\end{center}
\end{block}
\end{frame}
\end{document}
还有一个问题,当我们在日志中创建边缘时,我看到
Missing character: There is no ï in font nullfont!
Missing character: There is no ¿ in font nullfont!
Missing character: There is no ¼ in font nullfont!
Missing character: There is no ï in font nullfont!
Missing character: There is no ¿ in font nullfont!
Missing character: There is no ¼ in font nullfont!
Missing character: There is no ï in font nullfont!
Missing character: There is no ¿ in font nullfont!
Missing character: There is no ¼ in font nullfont!
一条边一个警告
更新 2
也许是“to”中的一个错误。我尝试使用控件,代码编译时没有错误。我使用了一些控制点,但没有进行计算。
\begin{tikzpicture}[blk/.style= {rectangle,draw,text width=2in,text centered},
edge/.style = {draw =black!50 ,line width=3pt,->}]
\matrix[row sep=1cm,column sep=1cm] {%
\node[blk] (a) {A};
&
\node[blk] (b) {B};
&
\node[blk] (c) {C};
&
\node[blk] (d) {D};
&
\node[blk] (e) {E};
&
\node[blk] (f) {F};
&
\node[blk] (g) {G};
&
\node[blk] (h) {H};
&
\node[blk] (i) {I};
&
\node[blk] (j) {J};
\\
};
\path[edge] (j) edge [bend left=30] (i)
edge [bend left=30] (h)
edge [bend left=30] (g)
edge [bend left=30] (f)
edge [bend left=30] (e);
\path[edge] (j) .. controls ([{shift=(210:20)}]j) and ([{shift=(-30:20)}]d) .. (d);
\path[edge] (j) .. controls ([{shift=(210:25)}]j) and ([{shift=(-30:25)}]c) .. (c);
\path[edge] (j) .. controls ([{shift=(210:30)}]j) and ([{shift=(-30:30)}]b) .. (b);
\path[edge] (j) .. controls ([{shift=(210:35)}]j) and ([{shift=(-30:35)}]a) .. (a);
\end{tikzpicture}
答案2
使用
\begin{tikzpicture}[scale=10]
\tikzstyle{blk} = [rectangle,draw,text width=0.2in,text centered];
\tikzstyle{edge} = [draw,line width=0.5pt,black!50];
\matrix[row sep=0.1cm,column sep=0.1cm] {