在浏览了此网站上的其他一些答案后,我尝试使用 tikz-qtree 包排版树。它工作得很好,但根据设计,它不允许您在树节点中使用宏,除非您使用两个特定的宏\node
并\edge
直接定义 TikZ 节点和边。
我想要的是
\tikzset{every tree node/.style={
execute at begin node=\code\bgroup,
execute at end node=\egroup}}
目前,\code
本地设置一些符号,然后将文本设置为 TT 字体:
\newcommand{\code}[1]{{\def\_{\wild}%
\def\"{\quot}% dummy " for hightlighting...
\def\~{\symbol{126}}%
\def\^{\symbol{94}}%
\texttt{#1}}}
这可以编译,但不会以 TT 字体排版节点文本。奇怪的是,如果我直接将 \impl 更改为 \texttt,它做以 TT 字体排版。我知道 TikZ 会使用空字体等来确保只在需要时才进行排版,因此我并不惊讶于这种节点字体更改的棘手性。
我在另一个问题中看到建议使用\begingroup
/\endgroup
而不是\bgroup
/ \egroup
。我试过了,但 LaTeX 抱怨“缺少 } 插入;额外的 } 或忘记了 \endgroup”
以下是一个最小(非)工作示例:
\usepackage{tikz-qtree}
\usepackage{tikz}
\usetikzlibrary[trees]
\newcommand{\code}[1]{{\def\_{\wild}%
\def\"{\quot}% dummy " for hightlighting...
\def\~{\symbol{126}}%
\def\^{\symbol{94}}%
\texttt{#1}}}
\begin{tikzpicture}[grow=down]
\tikzset{every tree node/.style={
execute at begin node=\strut\code\bgroup,
execute at end node=\egroup}};
\Tree [.html head body ]
\end{tikzpicture}
我不确定我对\bgroup
/的使用是否\egroup
错误,或者我对 的定义是否\code
有误......
答案1
我无法直接回答您的问题,但我可以为您提供另一种更直接的解决方案:
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{trees}
\begin{document}
\newcommand{\code}{\def\_{\wild}%
\def\"{\quot}% dummy " for hightlighting...
\def\~{\symbol{126}}%
\def\^{\symbol{94}}%
\ttfamily}
\begin{tikzpicture}[grow=down]
\tikzset{every tree node/.style={font=\code}}
\Tree [.html head body ]
\end{tikzpicture}
\end{document}
此外,无论出于什么原因,当我删除 定义中的一个组时\code
,您的示例仍按预期工作。也许那个额外的组会让 TikZ 感到困惑?