如何避免 a0 尺寸 TikZ 图形中出现“尺寸太大”错误?

如何避免 a0 尺寸 TikZ 图形中出现“尺寸太大”错误?

我正在使用安装了 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] {

相关内容