数组包中的预编码和后编码规范与多行包结合不佳

数组包中的预编码和后编码规范与多行包结合不佳

我有一张长表,其中每个单元格都必须在数学模式下格式化并包含在相同的代码中,即$\{\ldots,<cell>,\ldots\}$。为了避免重复,我使用了包中的功能array,该功能可让您指定要在每个单元格内容之前和之后插入的代码,即>{code}Mc<{code}

但是,这与命令的结合效果很差\multirow,因为虽然跨行单元格的内容似乎正确地位于两行之间,但代码却插入了两次。此外,似乎我必须再次将内容放入数学模式才能使其正常工作。

这是一个简单的例子:

\documentclass{standalone}

\usepackage{array}
\usepackage{multirow}

\begin{document}

    \newcolumntype{L}{>{$\{\ldots,} c <{,\ldots\}$}}

    \begin{tabular}{L L} \hline
        \alpha & \beta \\
        \multirow{2}{*}{$\gamma$} & \delta \\
                                  & \eta \\\hline
    \end{tabular}
\end{document}

结果如下: mwe

那么可以\multirow与这几种列规范相结合吗?

答案1

该调用\multirow{<n>}{*}{<text>}的基本工作原理如下:

  1. 该参数<text>排版在一个框中;
  2. 盒子向下移动来模拟相对于<n>行的居中;
  3. 移位的箱子交给了tabular

只有在步骤 3 之后才会添加前置文本和后置文本。当单元格为空时也会添加此类文本。

请注意,\multirow完全不知道列类型。甚至不知道是在array而不是tabular。因此,参数始终假定为文本模式。

\multirow因此,如果您打算在列中使用,请准备对每个空单元格使用\multicolumn{1}{...}{...}{\multirow{2}{*}{...}}\multicolumn{1}{c}{},或者不要在列中使用前置文本和后置文本。

烦人吗?也许吧。但我早就得出结论,表格很少(如果有的话)需要\multirow

\documentclass[border=4pt]{standalone}
\usepackage{amsmath}
\usepackage{array}
\usepackage{multirow}

\newcommand{\foo}[1]{$\{\dots,#1,\dotsc\}$}

\begin{document}

\begin{tabular}{c c}
\hline
\foo{\alpha} & \foo{\beta} \\
\multirow{2}{*}{\foo{\gamma}} & \foo{\delta} \\
             & \foo{\eta} \\
\hline
\end{tabular}

\end{document}

enter image description here

答案2

我不知道这个解决方案是否适合您,但我已经使用了几个假的multicolumns 并明确将 post/pre 代码添加到multirow

我还添加了几行只是为了表明您不需要修改单行。

\documentclass{standalone}

\usepackage{array}
\usepackage{multirow}

\begin{document}

    \newcolumntype{L}{>{$\{\ldots,} c <{,\ldots\}$}}

    \begin{tabular}{L L} \hline
        \alpha & \beta \\
        \multicolumn{1}{c}{\multirow{2}{*}{$\{\ldots, \gamma ,\ldots\}$}} & \delta \\
        \multicolumn{1}{c}{} & \eta \\
        \alpha & \beta \\
        \alpha & \beta \\
        \hline
    \end{tabular}
\end{document}

enter image description here

相关内容