我的 qtree 有以下代码:
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\makeatletter
\usepackage{qtree}
\makeatother
\usepackage{babel}
\begin{document}
\Tree [.$\neg\left(\varphi\sqcup\psi\right)\circ \neg\varphi\sqcup\psi$
[.$\circ \left(\varphi \sqcup \psi \right)$ {$\varphi, \psi \circ$}
{$\circ \varphi,\psi$} ] ]
\hfill
\textbf{(8.2.1)}
\end{document}
我试图以\circ
角色为中心,这样我的树中的线从\circ
方程式中的开始$\neg\left(\varphi\sqcup\psi\right)\circ \neg\varphi\sqcup\psi$
,到\circ
方程式中的结束$\circ \left(\varphi \sqcup \psi \right)$
。我试过了\hspace{}
,但设置正确的值以使方程式正确对齐是可怕地乏味。
我想做以下两件事之一:
只需调整我的 qtree 中的衬里,使它们不从中心开始,而是从 开始\circ
。
或者更加可取的方法是:通过水平对齐我的方程来补偿正常的画线方式。
LaTeX 是否qtree
提供了命令来自动围绕我的公式中的一个这样的字符进行水平对齐?
答案1
在这种方法中,我将除 之外的所有组件重叠\circ
,以便树将以该符号为中心。我\hfill
在左右两侧都使用了 ,以便将\circ
水平居中在线上。
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{qtree}
\usepackage{lipsum}
\parskip 1ex
\begin{document}
\lipsum[1]
\hfill\Tree [.$\llap{$\neg\left(\varphi\sqcup\psi\right)$}\circ \rlap{$\neg\varphi\sqcup\psi$}$
[.$\circ \rlap{$\left(\varphi \sqcup \psi \right)$}$ {$\llap{$\varphi, \psi$} \circ$}
{$\circ\rlap{$\varphi,\psi$}$} ] ]
\hfill
\textbf{(8.2.1)}
\lipsum[2]
\end{document}
通过创建宏可以快速轻松地实现该过程的自动化
\newcommand\ccen[2]{\llap{$#1$}$\circ$\rlap{$#2$}}
即提供了 左右两侧的内容\circ
。其用法如下:
\hfill\Tree [.\ccen{\neg\left(\varphi\sqcup\psi\right)}{\neg\varphi\sqcup\psi}
[.\ccen{}{\left(\varphi \sqcup \psi \right)} {\ccen{\varphi, \psi}{}}
{\ccen{}{\varphi,\psi}} ] ]
\hfill
\textbf{(8.2.1)}
如果想要 周围有空间\circ
,则此定义可以做到:
\newcommand\ccen[2]{\llap{$#1$}${}\mathrel{\circ}{}$\rlap{$#2$}}
其结果如下: