有没有办法在森林环境中的 tcbox 中插入换行符?

有没有办法在森林环境中的 tcbox 中插入换行符?

我正在尝试在 tcolorbox 对象中获取换行符,该对象宽度仅限于其中文本的宽度(或其内部森林节点的宽度)。

标准方法是通过 \tcbox[tikznode]{asdf//asdf} 完成的,但这会在森林环境中产生错误。

有什么方法可以让我达到想要的效果吗?

感谢您的时间和帮助!

梅威瑟:

\documentclass{memoir}

\usepackage[linguistics]{forest}
\usepackage{tikz}
\usepackage{tcolorbox}

\begin{document}

\tcbox[tikznode]{asdf\\asdf\\asdf}

\begin{forest}
    [A [B] [C]]
\end{forest}

\begin{forest}
    [A [B] [C\\\tcbox{asdf\\asdf\\asdf}]]
\end{forest}

%%%%% example below causes error
\begin{forest}
    [A [B] [C\\\tcbox[tikznode]{asdf\\asdf\\asdf}]]
\end{forest}

\end{document}

工作部分的 MWE 结果

上图显示了导致错误的行被注释掉后代码产生的结果。

再次感谢你!

答案1

当使用默认括号表示设置(参见,第 3.3 节)时,括号([])会\tcbox[...]{..}破坏树的语法。将整个节点包裹在一对括号(和)中即可。foresttexdoc forestforest{}

\begin{forest}
    [A [B] [{C\\\tcbox[tikznode]{asdf\\asdf\\asdf}}]]
\end{forest}

在此处输入图片描述

但这只能消除错误,\tcbox结果中会显示为空。我猜这是由于嵌套 s 造成的,从的角度来看tikzpicture,这不受官方支持。制作a ,并将其每个节点排版到单独的 中。因此嵌套。tikztikznode\tcboxtikzpictureforesttikzpicture

幸运的是,tcolorbox提供了一个varwidth upper允许多行\tcbox内容的选项避免嵌套tikzpicture

最后,您可以定义一个默认\tcbox调用的服装。varwidth upper

\documentclass{memoir}

\usepackage[linguistics]{forest}
%\usepackage{tikz} % already loaded by `forest`
\usepackage{tcolorbox}
\usepackage{varwidth} % for tcolorbox option `varwidth upper`

\newtcbox{\forestTcbox}{varwidth upper}

\begin{document}

\begin{forest}
    [A [B] [{C\\\tcbox[varwidth upper]{asdf\\asdf\\asdf}}]]
\end{forest}
%
\begin{forest}
    [A [B] [{C\\\forestTcbox{asdf\\asdf\\asdf}}]]
\end{forest}

\end{document}

在此处输入图片描述

答案2

tcolorbox我根本不会用。该forest包允许您根据自己的规格制作盒子:

在此处输入图片描述

forestset我使用以下代码制作了该盒子:

\documentclass{memoir}

\usepackage[linguistics]{forest}
\usepackage{tikz}

\forestset{mybox/.style={draw=black!75, line width=1.5pt, rounded corners, no edge, fill=gray!10, minimum size=1.7cm, before drawing tree={y+=5mm}}}

\begin{document}

\begin{forest}
    [A [B, fit=band] [C[asdf\\asdf\\asdf, mybox]]]
\end{forest}

\end{document}

相关内容