如何用 LaTeX 创建证明树?

如何用 LaTeX 创建证明树?

我怎样才能在 LaTeX 中实现这个证明树?

在此处输入图片描述

有人知道如何实现这一点吗?

答案1

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\DeclareMathOperator{\bfR}{\mathbf{R}}

\begin{document}
  \begin{equation*}
S_1 \bfR_5\begin{cases}
              S_2  \bfR_2 & \begin{cases} 
                        S_4 \bfR_1 & \\
                        & \\
                        S_5 \bfR_3 & \quad S_6 \bfR_4
                \end{cases} \\
              S_3 \bfR_6 &
      \end{cases}
  \end{equation*}
\end{document}

在此处输入图片描述

答案2

\documentclass{article}
\usepackage{amsmath}
\begin{document}

\begin{equation*}
  S_1 \mathbf{R_5}
  \begin{cases}
    S_2 \mathbf{R_2} 
      \begin{cases}
        S_4 \mathbf{R_1} & \\
        S_5 \mathbf{R_3} & S_6 \mathbf{R_4}
      \end{cases}  \\
    S_3 \mathbf{R_6}
  \end{cases}
\end{equation*}

\end{document}

在此处输入图片描述

答案3

我建议定义命令

\infer{conclusion}{premise1\\premise2\\...}

作为

\newcommand\infer[2]{#1\left\{\begin{array}{@{}l@{}}#2\end{array}\right.}

此外,我们使用缩写

\newcommand\claim[2]{S_{#1}\;\mathbf{R}_{#2}}

对校样项目进行排版。

在此处输入图片描述

\documentclass{article}
\newcommand\infer[2]{#1\left\{\begin{array}{@{}l@{}}#2\end{array}\right.}
\newcommand\claim[2]{S_{#1}\;\mathbf{R}_{#2}}
\begin{document}
\[\infer
    {\claim15}% from
    {\infer
       {\claim22}% from
       {\claim41
       \\% and
        \claim53\quad\claim64
       }
    \\% and
     \claim36
    }
\]
\end{document}

答案4

如果您需要绘制大量这样的树或已经熟悉 Forest,那么这很可能会引起您的兴趣。在前一种情况下,值得学习足够的 Forest,因为它允许非常简洁的树规范。在后一种情况下,您可能希望充分利用现有知识,因为它确实允许非常简洁的树规范。

节点内容的格式(S带下标和粗体R带下标)我认为只是指示性的。因此,您需要根据自己的特定需求进行修改。如果节点符合模板模型,那么规范当然可以更简洁,如下所示。

下面的代码设置了一种样式proof schema tree,要求将树的内容指定为用冒号分隔的整数对。然后拆分每个节点的内容,将第一部分作为第一个下标,将第二部分作为第二个下标。然后对其进行适当的格式化,并使用非标准edge path和库brace中的修饰添加花括号decorations.pathreplacing

结果是树可以用

\begin{forest}
  proof schema tree,
  [1:5
    [3:6
      [5:3
        [6:4]
      ]
      [4:1]
    ]
    [2:2]
  ]
\end{forest}

证明模式树

完整代码:

\documentclass[border=10pt,tikz]{standalone}
\usepackage{forest}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\forestset{
  declare count={s content}{0},
  declare count={r content}{0},
  proof schema tree/.style={
    for tree={
      math content,
      grow=0,
      child anchor=parent,
      parent anchor=children,
      l sep'=7.5pt,
    },
    for nodewalk={
      fake=r,
      descendants
    }{
      if={>On>On=&{!u.n children}{1}{n}{1}}{
        edge+={decorate, decoration={brace, amplitude=5pt}},
        edge path'={(.child anchor |- .south) -- (!ul.child anchor |- !ul.north)},
      }{no edge},
    },
    before typesetting nodes={
      for tree={
        split option={content}{:}{s content,r content},
        content/.process={OOw2{s content}{r content}{S_{##1} \mathbf{R_{##2}}}},
      },
    },
  },
}
\begin{forest}
  proof schema tree,
  [1:5
    [3:6
      [5:3
        [6:4]
      ]
      [4:1]
    ]
    [2:2]
  ]
\end{forest}
\end{document}

相关内容