newcommand 中有两行

newcommand 中有两行

我正在使用 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{测试}{模块}是:

newcommand 的输出(请忽略这些奇怪的线条——它们来自树中的线条)

所以基本上我有两个问题:

  1. \\ 不起作用
  2. 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}

相关内容