ebproof 在表格环境中吗?

ebproof 在表格环境中吗?

尝试编译简单文档时:

\documentclass[12pt, letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{ebproof}

\begin{document}

\begin{tabular}{ c c c }
    \begin{prooftree*}
        \infer{0}{foo}
    \end{prooftree*}
    &
    \begin{prooftree*}
        \infer{0}{bar}
    \end{prooftree*}
    &
    \begin{prooftree*}
        \infer{0}{baz}
    \end{prooftree*}
    \\
    \begin{prooftree*}
        \infer{0}{foo}
    \end{prooftree*}
    &
    \begin{prooftree*}
        \infer{0}{bar}
    \end{prooftree*}
    &
    \begin{prooftree*}
        \infer{0}{baz}
    \end{prooftree*}
\end{tabular}

\end{document}

我收到错误:

! Argument of \ebproof_statement_parse:w has an extra }.
<inserted text>
                \par
l.9             \infer{0}{foo}

我也没有在 ebproof 的文档中看到任何提到表格环境破坏的内容。

答案1

prooftree*环境更像是一个显示数学环境。因此您不应该在 c 列中使用它。

ebproof用于 &对齐文本块。这意味着它可能与表格混淆&。用括号包围环境以保护它们:

\documentclass[12pt, letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{ebproof}

\begin{document}

    \begin{tabular}{ ccc} %e.g. p{4cm} p{4cm} p{4cm}} for prooftree*
    {\begin{prooftree}
        \infer{0}{foo}
    \end{prooftree}}
    &
    {\begin{prooftree}
        \infer{0}{bar}
    \end{prooftree}}
    &
    {\begin{prooftree}
        \infer{0}{baz}
    \end{prooftree}}
    \\\relax
    {\begin{prooftree}
        \infer{0}{foo}
    \end{prooftree}}
    &
    {\begin{prooftree}
        \infer{0}{bar}
    \end{prooftree}}
    &
    {\begin{prooftree}
        \infer{0}{baz}
    \end{prooftree}}
\end{tabular}

\end{document}

答案2

你不能使用prooftree*,因为它本质上

\[
<proof tree>
\]

这在牢房里是不合法的tabular

因此您必须使用prooftree,但还有另一个问题:除非您稍微改变定义,否则括号是必需的。

\documentclass[12pt, letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{ebproof}

\ExplSyntaxOn
\RenewDocumentEnvironment { prooftree } { s O{} } {
  \group_align_safe_begin:
  \keys_set_known:nnN { ebproof / proof~style } { #2 } \l_tmpa_tl
  \keys_set:nV { ebproof } \l_tmpa_tl
  \tl_set:Nx \l_ebproof_start_level_tl { \int_use:N \g_ebproof_level_int }
  \vbox_set:Nw \l_tmpa_box
  \ebproof_setup_statements:
} {
  \vbox_set_end:
  \ebproof_pop:N \l_ebproof_a_box
  \int_compare:nNnF { \g_ebproof_level_int } = { \tl_use:N \l_ebproof_start_level_tl } {
    \PackageError{ebproof}{Malformed~proof~tree}{
      Some~hypotheses~were~declared~but~not~used~in~this~tree.}
  }
  \IfBooleanTF { #1 } {
    \[ \box_use:N \l_ebproof_a_box \]
    \ignorespacesafterend
  } {
    \hbox_unpack:N \c_empty_box
    \bool_if:NTF \l_ebproof_center_bool {
      \hbox:n { $ \tex_vcenter:D { \box_use:N \l_ebproof_a_box } $ }
    } {
      \box_use:N \l_ebproof_a_box
    }
  }
  \group_align_safe_end:
}
\ExplSyntaxOff

\begin{document}

\begin{tabular}{ |c| }
\hline
\begin{prooftree}
  \hypo{ \Gamma, A &\vdash B }
  \infer1[abs]{ \Gamma &\vdash A\to B }
  \hypo{ \Gamma \vdash A }
  \infer2[app]{ \Gamma \vdash B }
\end{prooftree}\\
\hline
\end{tabular}
\begin{prooftree}
  \hypo{ \Gamma, A &\vdash B }
  \infer1[abs]{ \Gamma &\vdash A\to B }
  \hypo{ \Gamma \vdash A }
  \infer2[app]{ \Gamma \vdash B }
\end{prooftree}
\begin{prooftree*}
  \hypo{ \Gamma, A &\vdash B }
  \infer1[abs]{ \Gamma &\vdash A\to B }
  \hypo{ \Gamma \vdash A }
  \infer2[app]{ \Gamma \vdash B }
\end{prooftree*}

\end{document}

与原版相比,变化在于增加了

\group_align_safe_begin:

在开始和

\group_align_safe_end:

在最后。您可能希望让软件包作者知道这一点。

在示例中,我使用了 a 内部tabular和外部的环境;我还展示了它的prooftree*作用。

在此处输入图片描述

相关内容