我想将树的根定位到一些(数学)文本中。
具体来说,我的代码看起来像这个MWE:
%!TeX program = xelatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand{\BT}[1]{\mathrm{BT}\left(#1\right)}
\begin{document} %----------------------------------------
\[ \BT{M} := \lambda x_1.\dots\lambda x_n.
\tikz[level distance=1.5cm,baseline]{
\node {$y$}
child { node {$\BT{M_1}$} }
child { node {\dots{}} edge from parent[draw=none] }
child { node {$\BT{M_p}$} }
; } \]
\end{document}
并呈现如下内容:
而我想要的是这样的:
有什么办法可以做到这一点(如果可能的话,不需要丑陋的手动间距)?
答案1
\documentclass{article}
\usepackage{fontspec}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand{\BT}[1]{\mathrm{BT}\left(#1\right)}
\begin{document}
\[
\tikz[node distance=0pt,
level distance=1.5cm,baseline]
{
\node (n) {$\vphantom{\lambda)}y$}
child { node {$\BT{M_1}$} }
child { node {\dots} edge from parent[draw=none] }
child { node {$\BT{M_p}$} };
\node[left=of n,inner xsep=-2pt] {$\BT{M} := \lambda x_1\dots\lambda x_n.$};
}
\]
\end{document}
编辑: 第一个建议可以通过使用 来简化tikzmark
。由于它使用overlay
和remember picture
选项,因此需要(至少)编译两次才能实现显示的结果:
\documentclass{article}
\usepackage{fontspec}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcommand{\BT}[1]{\mathrm{BT}\left(#1\right)}
\begin{document}
\[
\BT{M} := \lambda x_1\dots\lambda x_n.\tikzmarknode{a}{y}
\begin{tikzpicture}[overlay, remember picture,
level distance=12mm, sibling distance=11mm]
\node at (a.south) {}
child { node {$\BT{M_1}$} }
child { node {\dots} edge from parent[draw=none] }
child { node {$\BT{M_p}$} };
\end{tikzpicture}
\]
\end{document}
(红线表示文本边框)