尝试编译简单文档时:
\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*
作用。