prooftrees(tikz)样式参数

prooftrees(tikz)样式参数

我一直在尝试使用 prooftrees 包中的 forest 包创建外观不错的 prooftrees。我对 Tex 总体上还比较陌生,我正在尝试为我的 prooftrees 创建一个 ./style,其中包含一个参数,这样当它分支出来时我就可以获取一些文本。目前我有这个

\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage{forest}
\forestset{
  smullyan tableaux/.style={
    for tree={
      math content
    },
    where n children=1{
      !1.before computing xy={l=\baselineskip},
      !1.no edge
    }{},
    closed/.style={
      label=below:$\times$
    },
    open/.style={
      label=below:$\bigcirc$
    },
    text/.style={
      label=below:{#1}
    }
  },
}
\begin{document}
% and where I'm trying to call "text" with the argument #1
\begin{forest}
  smullyan tableaux
  [\forall{x}(P(x) \rightarrow Q(x)) \wedge \forall{x}P(x) \rightarrow \forall{x}Q(x): F
    [\mid
      [\forall{x}(P(x) \rightarrow Q(x)) \wedge \forall{x}P(x): T
        [\forall{x}Q(x): F
          [\mid
            [Q(t): F
              [\mid
                [\forall{x}(P(x) \rightarrow Q(x)): T
                  [\forall{x}P(x): T
                    [\mid
                      [P(t) \rightarrow Q(t): T, text={Hey}
                        [P(t): F
                          [\mid
                            [P(t): T, closed
                            ]
                          ]
                        ]
                        [Q(t): T, closed
                        ]
                      ]
                    ]
                  ]
                ]
              ]
            ]
          ]
        ]
      ]
    ]
  ]
\end{forest}
\end{document}

答案1

您必须将 翻倍#,即text/.style={label=below:{##1}}。原因是此定义本身出现在定义中;对于每个嵌套级别,您必须将符号翻倍#。如果您text不是将其定义为定义的一部分smullyan tableaux而是将其定义为定义之外的部分,则包含 的定义#将起作用。

请注意有一个包防护树;如果你做了更多的证明,看看它,也许它是有用的。

这是您的证明树的简化版本,以证明您的定义现在有效。

\documentclass{article}
\usepackage{forest}
\begin{document}
\forestset{
  smullyan tableaux/.style={
    for tree={
      math content
    },
    where n children=1{
      !1.before computing xy={l=\baselineskip},
      !1.no edge
    }{},
    closed/.style={
      label=below:$\times$
    },
    open/.style={
      label=below:$\bigcirc$
    },
    text/.style={
      label=below:{##1}
    }
  },
}
\begin{forest}
  smullyan tableaux
  [P(t) \rightarrow Q(t): T, text={Hey}
    [P(t): F
      [\mid
        [P(t): T, closed
        ]
      ]
    ]
    [Q(t): T, closed
    ]
  ]
\end{forest}
\end{document}

在此处输入图片描述

答案2

这是prooftrees的一个版本。请注意,我已将样式smullyan tableaux更改为,以避免覆盖标准 Titextmy textZ 键。

如果我们使用,我们可以通过消除所有s 并让绘制分支prooftrees来显著简化树规范。这需要,这不是默认值。唯一的缺点是,当 wff 不是推理产生的第一个公式时,我们需要使用 ,因为显然无法区分这种情况与它是第二个且不需要分支的情况。但这只需要添加应该与其前任分组的 wff。\midprooftreessingle branchesgroupedprooftreesgrouped

为了消除编号,我们使用not line numbering。为了自定义闭合符号,我们使用close with

\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage{prooftrees}
\forestset{
  smullyan tableaux/.style={
    close with=\ensuremath{\times},
    my text/.style={% don't overwrite a standard TikZ key!
      label={[yshift=-5pt]below:{##1}},
      l sep'+=5pt,
    },
    not line numbering,
    single branches
  },
}
\begin{document}
\begin{prooftree}
  {
    smullyan tableaux
  }
  [\forall{x}(P(x) \rightarrow Q(x)) \land \forall{x}P(x) \rightarrow \forall{x}Q(x): F
    [\forall{x}(P(x) \rightarrow Q(x)) \land \forall{x}P(x): T
      [\forall{x}Q(x): F, grouped
        [Q(t): F
          [\forall{x}(P(x) \rightarrow Q(x)): T
            [\forall{x}P(x): T, grouped
              [P(t) \rightarrow Q(t): T, my text={Hey}
                [P(t): F
                  [P(t): T, close
                  ]
                ]
                [Q(t): T, close
                ]
              ]
            ]
          ]
        ]
      ]
    ]
  ]
\end{prooftree}
\end{document}

smullyan 画面 prooftrees prooftree

相关内容