我正在尝试在 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}
上图显示了导致错误的行被注释掉后代码产生的结果。
再次感谢你!
答案1
当使用默认括号表示设置(参见,第 3.3 节)时,括号([
和]
)会\tcbox[...]{..}
破坏树的语法。将整个节点包裹在一对括号(和)中即可。forest
texdoc forest
forest
{
}
\begin{forest}
[A [B] [{C\\\tcbox[tikznode]{asdf\\asdf\\asdf}}]]
\end{forest}
但这只能消除错误,\tcbox
结果中会显示为空。我猜这是由于嵌套 s 造成的,从的角度来看tikzpicture
,这不受官方支持。制作a ,并将其每个节点排版到单独的 中。因此嵌套。tikz
tikznode
\tcbox
tikzpicture
forest
tikzpicture
幸运的是,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}