![森林节点中的逐字文本](https://linux22.com/image/459895/%E6%A3%AE%E6%9E%97%E8%8A%82%E7%82%B9%E4%B8%AD%E7%9A%84%E9%80%90%E5%AD%97%E6%96%87%E6%9C%AC.png)
在 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}