森林节点中的逐字文本

森林节点中的逐字文本

在 MWE 中

\documentclass{scrartcl}

\usepackage{forest}

\forestset{termtree/.style = {align = center, l sep = 18pt, s sep = 15pt,
  where n children = 0 {tier = leaves}{}}}

\begin{document}

\begin{forest}
for tree = {termtree}
[pow [- [6] [3]] [2]]
\end{forest}

\end{document}

产生输出

在此处输入图片描述

我想pow^这样的方式来代替,这样我就可以输入

[^ [- [6] [3]] [2]]

并且符号^也出现在图形中。

所有符号和数字都应以等宽字体显示。\verb{}因此,用 包装所有节点内容可能是理想的选择。但是,我还没有做到这一点。

编辑

根据下面的前三条评论,我想出了以下代码:

\documentclass{scrartcl}

\usepackage{forest}

\forestset{termtree/.style = {
  align = center,
  font = \ttfamily,
  l sep = 18pt, s sep = 15pt,
  where n children = 0 {tier = leaves}{}}}

\begin{document}

\begin{forest}
for tree = {termtree}
[\^{} [- [6] [3]] [2]]
\end{forest}

\end{document}

这产生了预期的结果,只留下一个问题:是否有任何方法可以\^{}在环境^内部进行替换forest

答案1

以下按照 Alan Munn 的建议使^内部活动。它使用技巧作为活动和 LaTeX 的使用:forest\lowercase~^\AddToHook

\documentclass{scrartcl}

\usepackage{forest}

\begingroup
\lccode`\~=`\^
\lowercase{\endgroup
\AddToHook{env/forest/begin}
  {%
    \catcode`\^=13
    \def~{\^{}}%
  }%
}
\forestset{termtree/.style = {
  align = center,
  font = \ttfamily,
  l sep = 18pt, s sep = 15pt,
  where n children = 0 {tier = leaves}{}}}


\begin{document}

\begin{forest}
for tree = {termtree}
[^ [- [6] [3]] [2]]
\end{forest}

\end{document}

一种更干净的方式,利用相应插槽\ttfamily处的字体^,而不是使用重音。

\documentclass{scrartcl}

\usepackage{forest}

\ExplSyntaxOn
\cs_new_protected:Nx \__matthias_hat: { \char_generate:nn { `\^ } { 12 } }
\NewDocumentCommand{\activatehat}{}
  {
   \char_set_active_eq:nN { `\^ } \__matthias_hat:
   \char_set_catcode_active:n { `\^ }
  }
\ExplSyntaxOff

\forestset{
  termtree/.style = {
    align = center,
    font = \ttfamily,
    l sep = 18pt,
    s sep = 15pt,
    where n children = 0 {tier = leaves}{},
  },
}
\AddToHook{env/forest/begin}{\activatehat}

\begin{document}

\begin{forest}
for tree = {termtree}
[^ [- [6] [3]] [2]]
\end{forest}

\end{document}

在此处输入图片描述

相关内容