独立中心制作两页文档

独立中心制作两页文档

我试图让 tikz 自动机适合页面,使用独立的 documentclass 预编译图形,然后使用\includegraphics[width=\textwidth{}(这在Tikz 自动机放置得太靠右)。我犯了一个错误,将 tikzpicture 嵌套在center环境中,从而在自动机前面插入了一个空白页。因此 \includegraphics{}只包含空白的第一页。为什么包含center环境会导致独立页面增加?

以下是最初有问题的、大多是最小的 MWE:

\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,automata,positioning}

\begin{document}

\begin{center}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
                semithick]


\node[initial,state, accepting, align = center] (A)                    {*\textsc{NonHigh}\\Id-hi \\ Id-low \\ Id-hi\& low};

\path (A)   edge [loop right, align=center] node {a:i \\ {$ \langle 0, 1, 1, 1 \rangle $} } (A)
        edge [loop above, align=center] node {a:e \\ {$ \langle 1, 0, 1, 0 \rangle $}} (A)
    edge [loop below, align=center] node {a:a \\ {$\langle 2, 0, 0, 0\rangle$}} (A);            
    \foreach \looseness/\label [count=\n] in {8/e:e \\ {$ \langle 1, 0, 0, 0 \rangle $}, 12/i:e \\ {$ \langle 1, 1, 0, 0 \rangle $}}
        \path [->] (A) edge [
            loop above, align = center,
            every loop/.append style={
                looseness=\looseness,
                in=60-0.8*\looseness,
                out=120+0.8*\looseness
            }] node {\label} ();


        \foreach \looseness/\label [count=\n] in {10/e:i \\ {$\langle 0, 1, 0, 0\rangle$}, 15/i:i \\{ $\langle 0, 0, 0, 0 \rangle$} }
        \path [->] (A) edge [
            loop right, align = center,
            every loop/.append style={
                    looseness=\looseness,
                    in=330-0.8*\looseness,
                    out=30+0.8*\looseness
            }] node {\label} ();


        \foreach \looseness/\label [count=\n] in {8/e:a \\ {$ \langle 2, 0, 1, 0 \rangle $}, 12/i:a \\ {$\langle 2, 1, 1, 1\rangle$} }
        \path [->] (A) edge [
                loop below, align = center,
                every loop/.append style={
                    looseness=\looseness,
                    in=240-0.8*\looseness,
                    out=300+0.8*\looseness
        }] node {\label} ();

\end{tikzpicture}
\end{center}

\end{document}

答案1

这里对环境为什么没有意义的解释center是很好的,但它们并没有解释为什么你会得到一个空白页,而不是环境被默默地或嘈杂地忽略或出现错误。

这里有一种方法可以让您了解为什么您会得到空白页而不是center环境被忽略。

etoolbox定义了一些命令,这些命令对于研究宏的含义很有用。关键的背景信息是环境实际上只是匹配的命令对。因此,对于任何\begin{envname}... \end{envname},都有一个 ,\envname... \endenvname这就是 LaTeX 在后台实现环境的方式。因此,我们要寻找 的含义\center

\documentclass[tikz]{standalone}
\usepackage{etoolbox}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}

\verb|\begin{center}| is defined in terms of a command \verb|\center|\dots

What does \verb|\center| mean?

\csmeaning{center}

% Second run using information obtained on first run
OK.
What does \verb|\trivlist| mean?

\csmeaning{trivlist}

And \verb|\centering|?

\csmeaning{centering}

\dots
\end{document}

<code>center</code> 环境的含义

如您所见,启动center环境会做很多事情。\csmeaning{}如果您愿意,可以通过输入其他宏来进一步跟踪结果。

因此,基本上,当你启动环境时,一堆东西会被放在文档的第一页上center。诚然,它基本上只是空间但空间就像字母、数字、图片和东西一样。

现在tikzpicture是 识别的默认环境standalone。您可以使用 设置非默认环境\standaloneenv{},它们将以相同的方式处理。每次启动这样的“特殊”环境时,都会执行standalone一系列操作。特别是,它确保内容在单独的页面上排版。由于环境启动的页面上已经有内容centerstandalone因此为 启动一个新页面tikzpicture

至少,我是这么认为的。这是我目前的理解。也许有人可以建议更正/改进这个答案。

答案2

环境center对于类来说是多余的standalone,因为它会剪切您正在创建的图片之外的所有内容。

因此不需要,图片将始终居中。使用此类时删除环境即可解决该问题。

答案3

第一页是由环境引起的,这center一点已经解释过了。因此边界框的修复仍然存在,由于循环的控制点,边界框太大了。

边界框由四个节点决定。不幸的是,节点start没有名称。但由于它是第一个节点,因此使用实际的左边界框边框。

循环\foreach已按顺序排序,外部节点排在最后。因此,(tmp)为节点赋予一个临时名称,并将外部边界记住在(bbnorth)(bbeast)和 中(bbsouth)

最后构建最终坐标(bbll)和(bbur),其中包含最终边界框的左下角和右上角。由于节点具有inner sep默认值0.3333em,因此边界框会进行相应的校正。

然后\pgfresetboundingbox抛弃当前边界框并[use as bounding box]启用边界框记录,该边界框由左下角(bbll)和右上角建立(bbur)

\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,automata,positioning}

\begin{document}
\begin{tikzpicture}[
  ->,
  >=stealth',
  shorten >=1pt,
  auto,
  node distance=2.8cm,
  semithick,
]
  \node[initial,state, accepting, align = center] (A)
    {*\textsc{NonHigh}\\Id-hi \\ Id-low \\ Id-hi\& low};
  \coordinate (bbwest) at (current bounding box.west);

  \path (A) edge [loop right, align=center]
    node {a:i \\ {$ \langle 0, 1, 1, 1 \rangle $} } (A)
    edge [loop above, align=center]
    node {a:e \\ {$ \langle 1, 0, 1, 0 \rangle $}} (A)
    edge [loop below, align=center]
    node {a:a \\ {$\langle 2, 0, 0, 0\rangle$}} (A);

  \foreach \looseness/\label [count=\n] in {%
    8/e:e \\ {$ \langle 1, 0, 0, 0 \rangle $},
    12/i:e \\ {$ \langle 1, 1, 0, 0 \rangle $}}
  \path [->] (A)
    edge [
      loop above,
      align = center,
      every loop/.append style={
        looseness=\looseness,
        in=60-0.8*\looseness,
        out=120+0.8*\looseness
      }
    ]
  node (tmp) {\label} ();
  \coordinate (bbnorth) at (tmp.north);

  \foreach \looseness/\label [count=\n] in {%
    10/e:i \\ {$\langle 0, 1, 0, 0\rangle$},
    15/i:i \\{ $\langle 0, 0, 0, 0 \rangle$}}
  \path [->] (A)
    edge [
      loop right,
      align = center,
      every loop/.append style={
        looseness=\looseness,
        in=330-0.8*\looseness,
        out=30+0.8*\looseness
    }]
    node (tmp) {\label} ();
  \coordinate (bbeast) at (tmp.east);

  \foreach \looseness/\label [count=\n] in {%
    8/e:a \\ {$ \langle 2, 0, 1, 0 \rangle $},
    12/i:a \\ {$\langle 2, 1, 1, 1\rangle$}}
  \path [->] (A)
    edge [
      loop below,
      align = center,
      every loop/.append style={
        looseness=\looseness,
        in=240-0.8*\looseness,
        out=300+0.8*\looseness
    }]
    node (tmp) {\label} ();
  \coordinate (bbsouth) at (tmp.south);

  \path
    (bbwest |- bbsouth) ++(.3333em, .3333em) coordinate (bbll)
    (bbeast |- bbnorth) ++(-.3333em, -.3333em) coordinate (bbur)
    \pgfextra{\pgfresetboundingbox}
    [use as bounding box]
    (bbll) (bbur)
  ;
\end{tikzpicture}
\end{document}

相关内容