我目前正在上句子逻辑课,我们刚刚开始学习真值树这一章,所以我一直在研究如何使用这个qtree
包来生成真值树。我想我已经能够理解树本身的语法,但我想知道是否有办法在树的两侧为每个分支放置带有对齐标题的列。
这是我想要实现的目标的想法:
修改 1:上面的图片实际上不是我创建的树。我的实际上看起来更像
这是我的源代码,来自 Lyx。
\documentclass[english]{article}
\usepackage[OT1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{geometry}
\geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{qtree}
\makeatother
\usepackage{babel}
\begin{document}
$\mbox{\Tree[.A\&\ensuremath{\sim}B [.C [.\ensuremath{\sim}A\ensuremath{\vee\sim}C [.A [.\ensuremath{\sim}B [.\ensuremath{\sim}A \ensuremath{\otimes} ] [.\ensuremath{\sim}C \ensuremath{\otimes} ] ] ] ] ] ]}$
\end{document}
编辑 2:我通过在 eqnarray 环境中使用三棵树设法更接近我想要的效果。我想我现在要问的问题是,是否有办法让树枝不可见qtree
。
\documentclass[english]{article}
\usepackage[OT1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{geometry}
\geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{qtree}
\makeatother
\usepackage{babel}
\begin{document}
\begin{eqnarray*}
\mbox{\Tree[.1.\\2.\\3.\\4.\\5. [.6. ] ]} &
\mbox{\Tree[.A\&\ensuremath{\sim}B\\C\\\ensuremath{\sim}A\ensuremath{\vee\sim}C\\A\\\ensuremath{\sim}B [.\ensuremath{\sim}A\\\ensuremath{\otimes} ] [.\ensuremath{\sim}C\\\ensuremath{\otimes} ] ]} &
\mbox{\Tree[.SM\\SM\\SM\\1,\&D\\1,\&D [.3,\ensuremath{\vee}D ] ]}
\end{eqnarray*}
\end{document}
答案1
虽然我对这种做树的方式并不完全满意,但你可以修补qtree
,使单枝树不产生线。只要你不还需要单个分支,这将满足您的要求。我对您的代码做了一些其他调整:替换\ensuremath{}
为$...$
并将树放入简单的表格中。
\documentclass{article}
\usepackage{etoolbox}
\usepackage{qtree}
\makeatletter
\patchcmd{\qdraw@branches}{(0,1)}{(0,.75)}{}{}
\patchcmd{\qdraw@branches}{\line(0,1){1}}{}{}{}
\makeatother
\begin{document}
\begin{tabular}{ccc}
\Tree[.{1.\\2.\\3.\\4.\\5.} [.6. ] ] &
\Tree[.A\&$\sim$B\\C\\$\sim$A$\vee\sim$C\\A\\$\sim$B {$\sim$A\\$\otimes$} $\sim$C\\$\otimes$ ] &
\Tree[.SM\\SM\\SM\\1,\&D\\1,\&D [.3,$\vee$D ] ]
\end{tabular}
\end{document}
答案2
以下是使用实验性包装器的演示防护树为了森林。这意味着从配额树语法,但更加灵活,不需要手动调整来将行号和对齐方式与树的级别对齐。
这需要 0.09 版本。如果您想要一份副本来玩,请询问。
\documentclass[tikz,border=10pt]{standalone}
\usepackage{prooftrees}% version 0.09
默认情况下\sim
是用关系的间距定义的,但这里应该是序数,所以我们\tnot
用正确的间距定义。
\newcommand*{\tnot}{\ensuremath{\mathord{\sim}}}
类似地,\&
不会为数学关系提供正确的间距,因此我们\aand
为 & 和符号定义适当的间距。
\DeclareMathSymbol{\aand}{\mathbin}{operators}{38}
\begin{document}
防护树提供带有一个强制参数的环境prooftree
。如果参数为空,也可以,但必须存在。如果树需要任何特殊配置,则在第一个参数中设置。当然,树本身会进入适当的环境。
\begin{prooftree}
{
使用来自森林我们对整棵树应用了一些定制选项。
for tree={
首先,我们默认将所有节点内容设置为数学模式,使用森林钥匙math content
。
math content,
其次,我们要改变闭合符号,因为防护树\otimes
而不是\times
默认使用。(如果您愿意\otimes
,只需省略此行。)
close with={$\times$},
},
}
定制到此结束。现在来看看树本身。
第一个节点获取内容。它应该在右侧A \aand \tnot B
对齐。为了实现这一点,我们将键添加到节点。此节点还需要一个复选标记,因此我们也添加了键。SM
just=SM
checked
[A \aand \tnot B, just=SM, checked
继续下一行,我们添加一个C
内容与 相同的节点和另一个节点just=SM
。
[C, just=SM
我们按照同样的方法继续添加节点。
[\tnot A \lor \tnot C, just=SM, checked
[A, just=1 $\aand$D
[\tnot B, just=1 $\aand$D
树的最后一层有一个分支。这意味着方括号模式涉及在开始第二个之前关闭第一个节点。这些节点也需要闭包符号,因此我们将密钥添加close
到每个分支。
[\tnot A, just=3 $\lor$D, close]
[\tnot B, close]
我们可以添加just=3 $\lor$D
到第二个分支而不是第一个分支——这没什么区别,因为防护树无论如何都会把它放在同一个地方。
现在我们用匹配的方括号来关闭树的各个级别。
]
]
]
]
]
我们就完成了。
\end{prooftree}
\end{document}
完整代码:
\documentclass[tikz,border=10pt]{standalone}
\usepackage{prooftrees}% version 0.09
% by default \sim is defined with the spacing of a relation but it should be an ordinal here, so we define \tnot with the correct spacing
\newcommand*{\tnot}{\ensuremath{\mathord{\sim}}}
% define \aand for the & and symbol with the appropriate spacing
\DeclareMathSymbol{\aand}{\mathbin}{operators}{38}
\begin{document}
\begin{prooftree}
{
for tree={
math content,
close with={$\times$},
},
}
[A \aand \tnot B, just=SM, checked
[C, just=SM
[\tnot A \lor \tnot C, just=SM, checked
[A, just=1 $\aand$D
[\tnot B, just=1 $\aand$D
[\tnot A, just=3 $\lor$D, close]
[\tnot B, close]
]
]
]
]
]
\end{prooftree}
\end{document}
答案3
这是实现相同结果的另一种方法。
\documentclass[12pt]{article}
\usepackage{tikz} % for trees
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}[sibling distance=.5cm]
\begin{scope}[xshift=-1.5in] %Column #1 For Numbering
\tikzset{level distance=3.5em}
\tikzset{edge from parent/.style={edge from parent path={(\tikzparentnode\tikzparentanchor) -- (\tikzchildnode\tikzchildanchor)}},every tree node/.style={text width=5em,align=center,anchor=south}}
\Tree [.1\\2\\3\\4\\5 [.6 ] ]
\end{scope}
\begin{scope} %Column #2 For Tree
\tikzset{level distance=5em}
\tikzset{every tree node/.style={align=center,anchor=south}}
\Tree
[.A\&$\sim$B\\C\\$\sim$A$\vee\sim$C\\A\\$\sim$B $\sim$A\\$\otimes$ $\sim$C\\$\otimes$ ]
\end{scope}
\begin{scope}[xshift=1.5in] %Column #3 For Justification
\tikzset{level distance=3.5em}
\tikzset{edge from parent/.style={edge from parent path={(\tikzparentnode\tikzparentanchor) -- (\tikzchildnode\tikzchildanchor)}},every tree node/.style={text width=5em,align=center,anchor=south}}
\Tree [.SM\\SM\\SM\\1,\&D\\1,\&D
[.3,$\vee$D
] ]
\end{scope}
\end{tikzpicture}
\end{document}
我遇到的问题是它不具有概括性,因为需要指定和协调级别距离。