当我尝试将表环境设为自定义环境时,表环境不起作用

当我尝试将表环境设为自定义环境时,表环境不起作用

我有下表,可以完美编译

\documentclass{article}

\usepackage{booktabs}
\usepackage[margin=32mm]{geometry}
\usepackage{tabularx}
\usepackage{float}

\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}[H]\centering
    \begin{tabularx}{\textwidth}{ccYYcYY@{}}
        \toprule
                      && \multicolumn{2}{c}{Next State} && \multicolumn{2}{c}{Output} \\
        \cmidrule{3-4} \cmidrule{6-7}
        Present State && $x = 0$ & $x = 1$ && $x = 0$ & $x = 1$\\
        \midrule
                000   &&  010    &   011   &&   0     &    0    \\
                001   &&  001    &   001   &&   1     &    1    \\
                010   &&  110    &   011   &&   0     &    0    \\
                011   &&  000    &   101   &&   1     &    1    \\[0.5em]
                100   &&  111    &   101   &&   0     &    0    \\
                101   &&  000    &   101   &&   0     &    1    \\
                110   &&  000    &   001   &&   1     &    0    \\
                111   &&  101    &   011   &&   0     &    0    \\
        \bottomrule
    \end{tabularx}
    \caption{State table for the sequential circuit discussed}
\end{table}
\end{document}

基于此,我想创建一个环境,以便我可以重复使用这个表(列数不必改变)。我尝试过这样定义它(我只是提取了表的beginend部分并省略了内容):

\newenvironment{statetable}%
{\begin{table}[H]\centering
    \begin{tabularx}{\textwidth}{ccYYcYY@{}}
        \toprule
        && \multicolumn{2}{c}{Next State} && \multicolumn{2}{c}{Output} \\
        \cmidrule{3-4} \cmidrule{6-7}
        Present State && $x = 0$ & $x = 1$ && $x = 0$ & $x = 1$ \\
        \midrule}%
{\bottomrule
    \end{tabularx}
    \caption{State table for the sequential circuit discussed}%
\end{table}}

所以我可以像这样使用它:

% \begin{statetable}
 000   &&  010    &   011  &&   0    &    0    \\
 001   &&  001    &   001  &&   1    &    1    \\
 010   &&  110    &   011  &&   0    &    0    \\
 011   &&  000    &   101  &&   1    &    1    \\[0.5em]
 100   &&  111    &   101  &&   0    &    0    \\
 101   &&  000    &   101  &&   0    &    1    \\
 110   &&  000    &   001  &&   1    &    0    \\
 111   &&  101    &   011  &&   0    &    0    \\
% \end{statetable}

但我收到以下错误:

ABD: EveryShipout initializing macros
! Misplaced alignment tab character &.
l.52  000   &
             &  010    &   011  &&   0    &    0    \\
?

答案1

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx}
\usepackage{float}
\usepackage{booktabs}
\newcolumntype{Y}{>{\centering\arraybackslash}X} 

\newenvironment{statetable}% 
{\table
    \tabularx{\textwidth}{cYYYY}
        \toprule
        & \multicolumn{2}{c}{Next State} & \multicolumn{2}{c}{Output} \\
        \cmidrule(lr){2-3} \cmidrule(l){4-5}
        Present State & $x = 0$ & $x = 1$ & $x = 0$ & $x = 1$ \\
        \midrule
        }%
{\bottomrule
    \endtabularx
    \caption{State table for the sequential circuit discussed}%
\endtable}


\newenvironment{altstatetable}% 
{\table
    \begin{tabular*}{\textwidth}{c@{\extracolsep{\fill}}cccc}
        \toprule
        & \multicolumn{2}{c}{Next State} & \multicolumn{2}{c}{Output} \\
        \cmidrule(r){2-3} \cmidrule{4-5}
        Present State & $x = 0$ & $x = 1$ & $x = 0$ & $x = 1$ \\
        \midrule
        }%
{\bottomrule
    \end{tabular*}
    \caption{State table for the sequential circuit discussed}%
\endtable}


\begin{document}
 \begin{statetable}
 000   &  010    &   011  &   0    &    0    \\
 001   &  001    &   001  &   1    &    1    \\
 010   &  110    &   011  &   0    &    0    \\
 011   &  000    &   101  &   1    &    1    \\[0.5em]
 100   &  111    &   101  &   0    &    0    \\
 101   &  000    &   101  &   0    &    1    \\
 110   &  000    &   001  &   1    &    0    \\
 111   &  101    &   011  &   0    &    0    \\
 \end{statetable}
 
 \begin{altstatetable}
 000   &  010    &   011  &   0    &    0    \\
 001   &  001    &   001  &   1    &    1    \\
 010   &  110    &   011  &   0    &    0    \\
 011   &  000    &   101  &   1    &    1    \\[0.5em]
 100   &  111    &   101  &   0    &    0    \\
 101   &  000    &   101  &   0    &    1    \\
 110   &  000    &   001  &   1    &    0    \\
 111   &  101    &   011  &   0    &    0    \\
 \end{altstatetable}

\end{document}

在 a 内部使用\begin{tabularx}and不起作用。以下引用的文档中也对此进行了解释:\end{tabularx}\newenvironmenttabularx

这种抓取环境主体的机制确实存在缺点(与 AMS 对齐环境相同),即您无法通过以下代码创建扩展环境

\newenvironment{foo}{\begin{tabularx}{XX}}{\end{tabularx}}

因为代码正在寻找一个文字字符串\end{tabularx}来停止扫描。从 2.02 版开始,可以通过 在定义中直接使用\tabularxand来避免此问题:\endtabularx

\newenvironment{foo}{\tabularx{XX}}{\endtabularx}

table我也对环境应用了同样的技术。

\cmidrule此外,我还使用修剪选项删除了多余的空列并在相邻的命令中引入了间隙((l)(r),有关更多信息,请参阅booktabs文档)。

由于您似乎不需要在列内使用换行符,因此我决定使用与 常规类型列tabular*结合使用而不是的方法来添加表格的替代版本。\extracolsep{\fill}}ctabularx

答案2

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx}
\usepackage{environ, booktabs}
\newcolumntype{Y}{>{\centering\arraybackslash}X} 

\NewEnviron{note}{
    \begin{tabularx}{\textwidth}{ccYYcYY@{}}
                \toprule
        Present State && $x = 0$ & $x = 1$ && $x = 0$ & $x = 1$\\
        \midrule
        000   &&  010    &   011   &&   0     &    0    \\
                \bottomrule
    \end{tabularx} 
}

\begin{document}
    \begin{note}
        
    \end{note}
\end{document}

相关内容