如何在 qtree 中水平对齐方程,并使方程的一个字符居中?

如何在 qtree 中水平对齐方程,并使方程的一个字符居中?

我的 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$}}

其结果如下:

在此处输入图片描述

相关内容