平均能量损失
\documentclass[a4paper]{article}
\usepackage{dcolumn}
\usepackage{multirow}
\usepackage{lipsum}
\begin{document}
\newcolumntype{d}[1]{D{.}{.}{#1}}
\begin{tabular}{l|c|r|d{2}|d{1}|d{0}|d{-2}|}
aaaaaaa & bbbbbbbbbbbbbb & cccccc & ddddddd & eeeeee & ffffff & gg \\
abcdefg & abcdefg & abcde & 123.45 & 123.45 & 123.45 & 123.45 \\
abcdef & abcdef & abcd & 123.4 & 123.4 & 123.4 & 123.4 \\
abcde & abcde & abcde & 23.45 & 23.45 & 23.45 & 23.45 \\
abcd & abcd & abcd & 3.45 & 3.45 & 3.45 & 3.45 \\
abc & abc & abc & 23.4 & 123.45 & 23.45 & 123.4 \\
\end{tabular}
\lipsum[1]
\begin{tabular}{l|c|r|d{2}|d{1}|d{0}|d{-2}|}
aaaaaaa & bbbbbbbbbbbbbb & cccccc & ddddddd & eeeeee & ffffff & gg \\
abcdefg &
\multirow{4}{*}{\begin{tabular}{r} zzzzz\\ zzzz\\ zzz\\ zz\\ z\\ \end{tabular}}
& abcde & 123.45 & 123.45 & 123.45 & 123.45 \\
abcdef & & abcd & 123.4 & 123.4 & 123.4 & 123.4 \\
abcde & & abcde & 23.45 & 23.45 & 23.45 & 23.45 \\
abcd & & abcd & 3.45 & 3.45 & 3.45 & 3.45 \\
abc & & abc & 23.4 & 123.45 & 23.45 & 123.4 \\
\end{tabular}
\end{document}
问题
有什么区别
{2}, d{1}, d{0}, d{-2}
?根据手册,它是小数位数,但此选项不会截断数字,不会将 23.45 更改为 23.4(对于d{1}
),此选项是做什么用的?在手册中是
\newcolumntype{,}{D{.}{.}{2}}
但是不起作用(错误:非法的前导令牌(d):使用了`c'。)为什么以及有什么区别?查看第二张表格,第二列,如何在不嵌套表格的情况下做到这一点?如何将列对齐到右侧并随后放置在中心?
答案1
有了siunitx
这种表格,你就有了非常强大的界面。我也更喜欢booktabs
命令,避免使用垂直规则。由于第一次尝试导致溢出 15pt,我使用了局部修改来\tabcolsep
减少列间空间。
\documentclass[a4paper]{article}
\usepackage{siunitx,booktabs}
\usepackage{lipsum}
\begin{document}
\lipsum[2]
\begin{table}[htp]
\centering
\addtolength{\tabcolsep}{-1.1pt}
\begin{tabular}{
l
c
r
S[table-format=3.2]
S[table-format=3.2]
S[table-format=3.2]
S[table-format=3.2]
}
\toprule
aaaaaaa & bbbbbbbbbbbbbb & cccccc & {ddddddd} & {eeeeee} & {ffffff} & {gg} \\
\midrule
abcdefg & abcdefg & abcde & 123.45 & 123.45 & 123.45 & 123.45 \\
abcdef & abcdef & abcd & 123.4 & 123.4 & 123.4 & 123.4 \\
abcde & abcde & abcde & 23.45 & 23.45 & 23.45 & 23.45 \\
abcd & abcd & abcd & 3.45 & 3.45 & 3.45 & 3.45 \\
abc & abc & abc & 23.4 & 123.45 & 23.45 & 123.4 \\
\bottomrule
\end{tabular}
\caption{A good table}
\end{table}
\lipsum[3]
\end{document}
答案2
软件包dcolumn
的D
列类型允许您指定 LaTeX 应为数字的小数部分留出多少空间(以位数为单位);您也可以选择指定数字主体(小数点前)的位数。这对于在哪里数字将被排版,但不会实际打印多少位数字。将第三个参数设置为D
to-1
是程序包的快捷方式,表示“让 LaTeX 尽可能自动格式化数字列”。如您的示例代码所示,负数越多就越不利。(附言:如果您希望 LaTeX 自动截断和/或舍入数字,则应使用程序包S
的列类型siunitx
,该类型的年代要比现在晚得多dcolumn
。)
就格式而言,真正让数字列陷入麻烦的是,你有相当长的标题,这些标题没有排版,没有任何“保护”。D
默认情况下,类型列中的所有材料都被视为数字,并以数学模式排版。由于 LaTeX 无法在“dddddd”、“eeeee”、“ffffffff”和“gg”中找到小数点,因此它只是将字符串向上排列,以便最后一个字符占据个位列,即立即放置在左边(虚数) 小数点。
补救措施需要两个步骤:首先,将非数字标题用类似 的内容括起来,multicolumn{1}{c}{...}
以告知 LaTeX 它们不是数字。您可能不希望这些标题在数学模式下排版,对吧?其次,使用列规范(例如D{.}{.}{2}
或更好的是),D{.}{.}{3.2}
在 类型的列中获取居中的数字数据D
。
\documentclass[a4paper]{article}
\usepackage{dcolumn}
\newcolumntype{d}[1]{D{.}{.}{#1}}
\newcolumntype{g}{D{.}{.}{3.2}}
\newcommand{\mc}[1]{\multicolumn{1}{c|}{#1}}
\setlength\parindent{0pt} % just for this example
\begin{document}
width of textblock:
\hrule
\bigskip
before:
\begin{tabular}{l|c|r|d{2}|d{1}|d{0}|d{-2}|}
aaaaaaa & bbbbbbbbbbbbbb & cccccc & ddddddd & eeeeee & ffffff & gg \\
abcdefg & abcdefg & abcde & 123.45 & 123.45 & 123.45 & 123.45 \\
abcdef & abcdef & abcd & 123.4 & 123.4 & 123.4 & 123.4 \\
abcde & abcde & abcde & 23.45 & 23.45 & 23.45 & 23.45 \\
abcd & abcd & abcd & 3.45 & 3.45 & 3.45 & 3.45 \\
abc & abc & abc & 23.4 & 123.45 & 23.45 & 123.4 \\
\end{tabular}
\bigskip
after:
\begin{tabular}{l|c|r|g|g|g|g|}
aaaaaaa & bbbbbbbbbbbbbb & cccccc
& \mc{ddddddd} & \mc{eeeeee} & \mc{ffffff} & \mc{gg} \\
abcdefg & abcdefg & abcde & 123.45 & 123.45 & 123.45 & 123.45 \\
abcdef & abcdef & abcd & 123.4 & 123.4 & 123.4 & 123.4 \\
abcde & abcde & abcde & 23.45 & 23.45 & 23.45 & 23.45 \\
abcd & abcd & abcd & 3.45 & 3.45 & 3.45 & 3.45 \\
abc & abc & abc & 23.4 & 123.45 & 23.45 & 123.4 \\
\end{tabular}
\bigskip
\hrule
\end{document}
答案3
如果您有表标题,请插入\multicolumn{1}{c}{heading}
以覆盖 D 列类型。这里我使用第一个表演示了这个想法,保持第二个表不变以供比较。
对齐方式 {c} 可由您选择:{l} {r}
d{2}
表示 2 位小数。如果为负数,则列中可以使用任意数量的小数,并且所有条目都将以分隔符为中心。\newcolumntype{,}{D{.}{.}{2}}
:comm,
表示 .tex 文件中的分隔符。因此,它通常是 '.' 或 ','。在您的例子中,您使用了句点.
代码
\documentclass[a4paper]{article}
\usepackage{dcolumn}
\usepackage{multirow}
\usepackage{lipsum}
\begin{document}
\newcolumntype{d}[1]{D{.}{.}{#1}}
\noindent
\begin{tabular}{l|c|r|d{2}|d{2}|d{2}|d{2}|}
\multicolumn{1}{c|}{aaaaaaa} & \multicolumn{1}{c|}{bbbbbbbbbbbbbb} & \multicolumn{1}{c|}{ccc} & \multicolumn{1}{l|}{ddddddd} & \multicolumn{1}{r|}{eeeeee} & \multicolumn{1}{c|}{ffffff} & \multicolumn{1}{c|}{gg} \\
abcdefg & abcdefg & abcde & 123.45 & 123.45 & 123.45 & 123.45 \\
abcdef & abcdef & abcd & 123.4 & 123.4 & 123.4 & 123.4 \\
abcde & abcde & abcde & 23.45 & 23.45 & 23.45 & 23.45 \\
abcd & abcd & abcd & 3.45 & 3.45 & 3.45 & 3.45 \\
abc & abc & abc & 23.4 & 123.45 & 23.45 & 123.4 \\
\end{tabular}
\lipsum[1]
\noindent
\begin{tabular}{l|c|r|d{2}|d{1}|d{0}|d{-2}|}
aaaaaaa & bbbbbbbbbbbbbb & cccccc & ddddddd & eeeeee & ffffff & gg \\
abcdefg &
\multirow{4}{*}{\begin{tabular}{r} zzzzz\\ zzzz\\ zzz\\ zz\\ z\\ \end{tabular}}
& abcde & 123.45 & 123.45 & 123.45 & 123.45 \\
abcdef & & abcd & 123.4 & 123.4 & 123.4 & 123.4 \\
abcde & & abcde & 23.45 & 23.45 & 23.45 & 23.45 \\
abcd & & abcd & 3.45 & 3.45 & 3.45 & 3.45 \\
abc & & abc & 23.4 & 123.45 & 23.45 & 123.4 \\
\end{tabular}
\end{document}
答案4
- 您指定句号(或其他分隔符)后的最大位数。数字会调整到右侧,对于较短的数字,会保留一些位置以使所有句号一个接一个地排列。