我正在使用 forest 包制作流程图。由于我反复使用相同的结构,我想定义一个新命令。但是我在新命令中获取换行符时遇到了一些问题,并且一些参数没有按预期执行。
我的树(小版本)如下所示:
并使用以下代码行创建
\documentclass{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[edges]{forest}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{forest}
[\huge \textbf{Main}, circle, draw
[\large{Print\_logo()\\\scriptsize(use output)},align=center, draw]
[\large{InitialiseParameters() \\ \scriptsize(use initialise)},align=center, draw]
[\large{check\_parameters() \\ \scriptsize(use parameters)},align=center, draw]
]
\end{forest}
\end{document}
我想要一个像这样的命令
\newcommand{\subtree}[2]{{\large{#1} \\ \scriptsize{use #2}}, align=center, draw}
当我使用时,我得到了什么\subtree{测试}{模块}是:
所以基本上我有两个问题:
- \\ 不起作用
- align=center 和 draw 被识别为文本,而不是对齐并绘制一个框。
我尝试将其分成两个命令,但效果更差,我尝试使用 \newline 和 \linebreak 代替 \\。似乎没有任何效果。我浏览了论坛并在 Google 上搜索了很多,但没有找到解决方案。希望您能帮助我。
提前致谢,
干杯!
编辑:如果我这样做
\newcommand{\twolines}[2]{{\large{#1} \\ \scriptsize{use #2}}}
然后使用
\begin{forest}
[\twolines{Test}{module},align=center,draw]
\end{forest}
然而,当我尝试进一步尝试时:
\newcommand{\subtree}[2]{\twolines{#1}{#2}, align=center, draw}
我有与以前相同的问题。
答案1
\documentclass[border=3.141592]{standalone}
\usepackage{forest}
\newcommand\tln[2]{\large #1\\ % tln: two line node
\scriptsize #2}
\begin{document}
\begin{forest}
for tree = {
% nodes (common style)
draw,
align=center,
ROOT/.style = {circle, font=\huge\bfseries},
% tree
edge = {-},
s sep=2mm,
l sep=4mm
}
[Main, ROOT,
[\tln{Print\_logo()}{(use output)}]
[\tln{InitialiseParameters()}{(use initialise)}]
[\tln{check\_parameters()}{(use parameters)}]
]
\end{forest}
\end{document}
答案2
以下代码有效:
\documentclass{article}
\usepackage{forest}
\newcommand{\subtree}[2]{\large #1\\\scriptsize use #2, align=center, draw}
\bracketset{action character=@}
\begin{document}
\begin{forest}
[\huge\bfseries Main, circle, draw,
[@\subtree{Print\_logo()}{output}]
[@\subtree{InitialiseParameters()}{initialise}]
[@\subtree{check\_parameters()}{parameters}]
]
\end{forest}
\end{document}