Ticks Graphs Forest 图片没有完全绘制在 tikzpicture 边界框中

Ticks Graphs Forest 图片没有完全绘制在 tikzpicture 边界框中

我正在尝试使用 tikz 图形的森林库创建树形图。编译时,整个图片移出了 tikz 边界框。有什么建议可以让图片居中吗?

有问题的 tikzpicture 是这个(是的,它不是真的很简单,但仍然应该足够简单。

由于它使用了 tikz 图库,所以编译时需要 lualatex。

\documentclass[]{beamer}
\usepackage[linguistics,external]{forest}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,shapes.geometric,arrows,hobby,backgrounds,calc,arrows.meta}
\usetikzlibrary{graphs,graphdrawing}

\begin{document}

\begin{tikzpicture}[show background rectangle]
  \newcommand{\plus}{\color{darkgreen}{$+$}}
  \newcommand{\minus}{\color{darkred}{$-$}}
% [every node/.style={edge={thick,blue}}]
\colorlet{darkred}{red!80!black}
\colorlet{darkgreen}{green!80!black}
   \begin{forest}
   %aligns the bottom lines
   for tree={
    where n children=0{tier=terminal,!u.tier=second,!uu.tier=third}{},
   }
   [ {$\{m_7,m_{11}\}$}
     [{$\{m_8,m_9\}$}
       [{$\{m_1,m_2,m_4\}$}
         [{$\{m_1,m_3\}$}
            [1][2],
         ]
         [{$\{\dots\}$}
           [3][4\\\plus]
         ]
       ]
       [{$\{m_7\}$}
         [ {$\{m_7\}$}
           [{5\\\minus},for ancestors={edge={darkred,very thick}},edge={darkred,very thick}][6]
         ]
         [ {$\{\dots\}$}
           [7\\\plus][8\\\plus]
         ]
       ]
     ]
    [{$\{\dots\}$}
     [{$\{\dots\}$}[9\\\minus][10]]
     [{$\{\dots\}$}[11][12\\\minus]]
    ]
   ]
   \end{forest}
\end{tikzpicture}

\end{document}

答案1

用它没有环境tikzpicture。如果您需要框架,请使用简单的\fbox

在此处输入图片描述

答案2

Forest 使用tikzpicture和嵌套它们不受支持,并且通常会产生奇怪的结果。因此,Herbert 的回答是正确的。但是,您的代码中还有其他几个潜在的陷阱 - 主要是whereinside的使用for tree。所以,这是您的代码的一个稍微清理过的版本。我还展示了如何使用 Ti 添加框架Z,如果您愿意的话。只需删除该tikz+行即可将其删除。

where您在 中使用for tree是不明智的。在最好的情况下,它效率低下。在最坏的情况下,它会带来麻烦并可能导致奇怪的效果。这是因为where已经这样做了for tree。要么使用where,要么使用 ,if而不是where

$您可以通过合理使用 来避免节点混乱math content。您不希望多行节点使用这种方法,但它适用于所有非终端节点。

\documentclass[border=10pt]{standalone}
\usepackage[linguistics]{forest}

\begin{document}

{% use a group if the definitions should be local (as we're losing the tikzpicture)
  \newcommand{\plus}{\color{darkgreen}{$+$}}%
  \newcommand{\minus}{\color{darkred}{$-$}}%
  \colorlet{darkred}{red!80!black}%
  \colorlet{darkgreen}{green!80!black}%
  \begin{forest}
    %aligns the bottom lines
    % don't nest a where in a for tree as where already does for tree - it can do strange things
    % using math content saves cluttering the nodes with $, but we don't want this for the last level, as these are multiline 
    where n children=0{tier=terminal,!u.tier=second,!uu.tier=third}{math content},
    tikz+={\draw (current bounding box.south west) rectangle (current bounding box.north east);},
    [{\{m_7,m_{11}\}}
      [{\{m_8,m_9\}}
        [{\{m_1,m_2,m_4\}}
          [{\{m_1,m_3\}}
            [1][2]
          ]
          [{\{\dots\}}
            [3][4\\\plus]
          ]
        ]
        [{\{m_7\}}
          [ {\{m_7\}}
            [{5\\\minus},for ancestors={edge={darkred,very thick}},edge={darkred,very thick}][6]
          ]
          [ {\{\dots\}}
            [7\\\plus][8\\\plus]
          ]
        ]
      ]
      [{\{\dots\}}
        [{\{\dots\}}[9\\\minus][10]]
        [{\{\dots\}}[11][12\\\minus]]
      ]
    ]
  \end{forest}%
}

\end{document}

其输出与赫伯特的没有什么不同。

框架清理代码

相关内容