餐桌上的灾难

餐桌上的灾难

平均能量损失

\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

软件包dcolumnD列类型允许您指定 LaTeX 应为数字的小数部分留出多少空间(以位数为单位);您也可以选择指定数字主体(小数点前)的位数。这对于在哪里数字将被排版,但不会实际打印多少位数字。将第三个参数设置为Dto-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 列类型。这里我使用第一个表演示了这个想法,保持第二个表不变以供比较。

  1. 对齐方式 {c} 可由您选择:{l} {r}

  2. d{2}表示 2 位小数。如果为负数,则列中可以使用任意数量的小数,并且所有条目都将以分隔符为中心。

  3. \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

  1. 您指定句号(或其他分隔符)后的最大位数。数字会调整到右侧,对于较短的数字,会保留一些位置以使所有句号一个接一个地排列。

相关内容