以下文件中表格的最后两列对齐不正确。我似乎不知道哪里出了问题。
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,tabularx,float}
\usepackage[add-decimal-zero = true,add-integer-zero = true,round-integer-to-decimal,round-mode = places,round-precision=1]{siunitx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand{\mcx}[2]{\multicolumn{#1}{>{\hsize=\dimexpr3\hsize+4\tabcolsep\relax}C}{#2}}
\newcommand{\mcone}[1]{\multicolumn{1}{C}{#1}}
\begin{document}
\begin{table}
\caption{\label{orgc39fb42}
Prevalence of Undernourishment estimated for India with different parameter estimates}
\begin{tabularx}{\textwidth}{lS[table-format=1.3,round-precision=3]S[table-format=1.3,round-precision=3]S[table-format=2,round-precision=0]S[table-format=2,round-precision=0]}
\toprule
Mean & \mcone{CV} & \mcone{Skew} & \mcx{2}{Prev of Unment and met} \\
& & & \mcone{MPEX=1791} & \mcone{MPEX=2037}\\
\midrule
2455 & 0.25 & 0.55 & 15 & 23\\
2455 & 0.294 & 0.528 & 18 & 26\\
2135 & 0.294 & 0.528 & 27 & 39\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
答案1
的定义\mcx
有错误。可以用不同的方法纠正,但对我来说最简单的方法如下:-)
\newcommand{\mcx}[2]{\multicolumn{#1}{>{\hsize=\dimexpr#1\hsize
+ #1\tabcolsep + #1\tabcolsep\relax}C|}{#2}}
除此之外,我会删除siunitx
在加载包时设置的选项,并将本地需求写入sisetup
本地采用的选项。
一套完整的姆韦是:
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,tabularx,float}
\usepackage{siunitx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand{\mcx}[2]{\multicolumn{#1}{>{\hsize=\dimexpr#1\hsize
+ #1\tabcolsep + #1\tabcolsep\relax}C|}{#2}}
\newcommand{\mcone}[1]{\multicolumn{1}{C}{#1}}
\begin{document}
\begin{table}
\caption{\label{orgc39fb42}
Prevalence of Undernourishment estimated for India with different parameter estimates}
\begin{tabularx}{\textwidth}{l
S[table-format=1.3]
S[table-format=1.3]
S[table-format=2.0]
S[table-format=2.0]
}
\toprule
Mean & \mcone{CV} & \mcone{Skew} & \mcx{2}{Prev of Unment and met} \\
& & & \mcone{MPEX=1791} & \mcone{MPEX=2037} \\
\midrule
2455 & 0.25 & 0.55 & 15 & 23 \\
2455 & 0.294 & 0.528 & 18 & 26 \\
2135 & 0.294 & 0.528 & 27 & 39 \\
\bottomrule
\end{tabularx}
\end{table}
这使
看看下表是否也对您来说更好:
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[skip=1ex]{caption}
\usepackage{booktabs,tabularx}
\usepackage{siunitx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand{\mcx}[2]{\multicolumn{#1}{>{\hsize=\dimexpr#1\hsize
+ #1\tabcolsep + #1\tabcolsep\relax}C}{#2}}
\newcommand{\mcone}[1]{\multicolumn{1}{C}{#1}}
\begin{document}
\begin{table}
\caption{\label{orgc39fb42}
Prevalence of Undernourishment estimated for India with different parameter estimates}
\begin{tabularx}{\textwidth}{l
S[table-format=1.3]
S[table-format=1.3]
S[table-format=2.0]
S[table-format=2.0]
}
\toprule
& & & \mcx{2}{Prev of Unment and met} \\
\cmidrule(lr){4-5}
Mean & \mcone{CV} & \mcone{Skew} & \mcone{MPEX=1791} & \mcone{MPEX=2037} \\
\midrule
2455 & 0.25 & 0.55 & 15 & 23 \\
2455 & 0.294 & 0.528 & 18 & 26 \\
2135 & 0.294 & 0.528 & 27 & 39 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
笔记:
在定义中\multicolumn
考虑tabularx
列类型时,X
从tabularx
多列单元格的宽度考虑,仅考虑单元格内容的最大宽度,而不是单元格的宽度。换句话说
\multicolumn{2}{>{\hsize=2\hsize}X}{...}
不考虑tabcolsep
这两列中的所有空格,因此multicolumn
单元格对于四个空格来说更窄tabcolsep
。因此,上面定义了“\newcommand\mcx{...}”的广义解决方案(通过它更简单的排版表)姆韦作为:
\newcolumntype{C}{>{\centering\arraybackslash}X}% definition of `C`
\newcommand{\mcx}[2]{\multicolumn{#1}{>{\hsize=\dimexpr#1\hsize
+ #1\tabcolsep
+ #1\tabcolsep\relax}
C}{#2}}
或简称:
\newcommand{\mcx}[2]{\multicolumn{#1}{>{\hsize=\dimexpr#1\hsize
+ #1\tabcolsep2 \relax}
C}{#2}}
答案2
您可能对如何排版跨越两个标题单元格的字符串的问题想得太多了,尤其是当需要排版的字符串相当短时。\mcx
我不会摆弄宏,而是使用一个简单的\multicolumn{2}{c}{...}
指令来排版相关字符串。(是的,这就是全部!)
为了给标题提供更多的视觉结构,我还提供了一个\cmidrule(l){4-5}
指令。
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,tabularx,float}
\usepackage[add-decimal-zero = true,
add-integer-zero = true,
round-integer-to-decimal,
round-mode = places,
round-precision=1]{siunitx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand{\mcone}[1]{\multicolumn{1}{C}{#1}}
\begin{document}
\begin{table}
\caption{Prevalence of Undernourishment estimated for India with
different parameter estimates} \label{orgc39fb42}
\begin{tabularx}{\textwidth}{ l
S[table-format=1.3,round-precision=3]
S[table-format=1.3,round-precision=3]
S[table-format=2,round-precision=0]
S[table-format=2,round-precision=0]}
\toprule
Mean & \mcone{CV} & \mcone{Skew} &
\multicolumn{2}{c}{Prev of Unment and met} \\
\cmidrule(l){4-5} % <--- new
& & & \mcone{MPEX=1791} & \mcone{MPEX=2037}\\
\midrule
2455 & 0.25 & 0.55 & 15 & 23\\
2455 & 0.294 & 0.528 & 18 & 26\\
2135 & 0.294 & 0.528 & 27 & 39\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
附录:上述方法之所以有效,是因为要排版的字符串相对较短 —— 具体来说,它的宽度小于 2 个基本C
列。如果您有另一个包含较长字符串的表格,或者字符串需要跨越 3 个(或更多!)列,您可能需要重新定义宏,\mcx
如下所示:
\newcommand{\mcx}[2]{\multicolumn{#1}%
{>{\hsize=\dimexpr #1\hsize +\numexpr2*#1-2\relax\tabcolsep \relax}C}%
{#2}}
然后将字符串排版为\mcx{2}{Prev of Unment and met}
。(你可以自己验证\mcx{2}{Prev of Unment and met}
和生成的解决方案\multicolumn{2}{c}{Prev of Unment and met}
是相同的。)
这种修改后的形式如何(为什么)起作用\mcx
?假设有n
列需要由字符串跨越,该字符串可能比列长(因此可能需要自动换行)。每个底层列n
的可用宽度为,其总宽度(包括两侧的空白填充)为。因此,类型列的总宽度为。由于组合列的总宽度应等于此长度,因此C
\hsize
\hsize+2\tabcolsep
n
C
n\hsize+2n\tabcolsep
可用的合并列的宽度为n\hsize+2(n-1)\tabcolsep
。用 TeX 语法表达此计算结果为
\hsize=\dimexpr #1\hsize +\numexpr2*#1-2\relax\tabcolsep \relax
C
这就是定义中给出的“前缀” \mxc
。(请自行验证 的计算\numexpr2*#1-2\relax\tabcolsep
结果为2(n-1)
。)
答案3
看看@Zarko 和@Mico 的答案是否更正确。就留在这里,直到看到其中一个答案被接受
如果您不喜欢我评论中的答案,请尝试以下操作:
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,tabularx,float}
\usepackage[add-decimal-zero = true,add-integer-zero = true,round-integer-to-decimal,round-mode = places,round-precision=1]{siunitx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand{\mcx}[2]{\multicolumn{#1}{>{\hsize=\dimexpr#1\hsize+\numexpr#1-1\relax\tabcolsep\relax}C}{#2}}
\newcommand{\mcone}[1]{\multicolumn{1}{C}{#1}}
\begin{document}
\begin{table}
\caption{\label{orgc39fb42}
Prevalence of Undernourishment estimated for India with different parameter estimates}
\begin{tabularx}{\textwidth}{lS[table-format=1.3,round-precision=3]S[table-format=1.3,round-precision=3]S[table-format=2,round-precision=0]S[table-format=2,round-precision=0]}
\toprule
Mean & \mcone{CV} & \mcone{Skew} & \mcx{2}{Prev of Unment and met} \\
& & & \mcone{MPEX=1791} & \mcone{MPEX=2037}\\
\midrule
2455 & 0.25 & 0.55 & 15 & 23\\
2455 & 0.294 & 0.528 & 18 & 26\\
2135 & 0.294 & 0.528 & 27 & 39\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
我已经改变了你的 mcx 定义。