我有一张长表,其中每个单元格都必须在数学模式下格式化并包含在相同的代码中,即$\{\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}
那么可以\multirow
与这几种列规范相结合吗?
答案1
该调用\multirow{<n>}{*}{<text>}
的基本工作原理如下:
- 该参数
<text>
排版在一个框中; - 盒子向下移动来模拟相对于
<n>
行的居中; - 移位的箱子交给了
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}
答案2
我不知道这个解决方案是否适合您,但我已经使用了几个假的multicolumn
s 并明确将 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}