siunitx 表中的对齐

siunitx 表中的对齐

请考虑以下示例:

\documentclass[
  a4paper,
  12pt
]{article}

\usepackage[
  hmargin = 2.4cm,
  vmargin = 3cm
]{geometry}
\usepackage[
  locale = DE,
  detect-weight = true,
  detect-inline-weight = math,
  round-mode = places,
  round-precision = 1
]{siunitx}

\def\mlrA{1ex}
\def\mlrB{\hspace{0.5em}}
\newcommand*\saenk[1]{\raisebox{-0.5ex}{#1}}

\ExplSyntaxOn
  \cs_new_eq:NN \calc \fp_eval:n
\ExplSyntaxOff

\begin{document}

% constants
\def\masse{80}
\def\Jorden{9.8}
\def\Maanen{1.6}
\def\Juliper{26.5}
\def\Pluto{0.3}
\def\Mars{3.8}
\def\Venus{8.8}
\def\Merkur{5.4}
\def\Neptun{11.0}
\def\Uranus{10.4}
\def\Saturn{11.3}

\begin{center}
\large
 \begin{tabular}{
        |>{\raggedright\arraybackslash}m{2.4cm}
   *{3}{|>{\centering\arraybackslash}m{4cm}}|
 }
  \hline
    \multicolumn{1}{|c|}{\textbf{Planet}}
  &                      \textbf{Tyngdekraften p{\aa} \SI{1}{\kg}}
  &                      \textbf{Tyngdekraften p{\aa} personen}
  &        \vspace{0.5ex}\textbf{Svarer til Jordens tr{\ae}k i}                                                              \\[\mlrA]
  \hline Jorden  & \mlrB\SI{\Jorden}{\N}  &                                &                                                 \\[\mlrA]
  \hline Månen   & \mlrB\SI{\Maanen}{\N}  &                                &                                                 \\[\mlrA]
  \hline Jupiter &      \SI{\Juliper}{\N} &                                &                                                 \\[\mlrA]
  \hline Pluto   & \mlrB\SI{\Pluto}{\N}   &                                &                                                 \\[\mlrA]
  \hline Mars    & \mlrB\SI{\Mars}{\N}    &                                &                                                 \\[\mlrA]
  \hline Venus   & \mlrB\SI{\Venus}{\N}   &                                &                                                 \\[\mlrA]
  \hline Merkur  & \mlrB\SI{\Merkur}{\N}  & \SI{\calc{\masse*\Merkur}}{\N} & \saenk{\SI{\calc{\masse*\Merkur/\Jorden}}{\kg}} \\[\mlrA]
  \hline Neptun  &      \SI{\Neptun}{\N}  &                                &                                                 \\[\mlrA]
  \hline Uranus  &      \SI{\Uranus}{\N}  &                                &                                                 \\[\mlrA]
  \hline Saturn  &      \SI{\Saturn}{\N}  &                                &                                                 \\[\mlrA]
  \hline
 \end{tabular}
\end{center}

\end{document}

输出

我如何自动地N将表格第二列的单位()和对应的数字对齐?

我看过代码了siunitx手册中的表 49但无法让它工作。因此,我S再次删除了表格代码中的 -column,以使其看起来正确。

答案1

您可以使用table-space-text-pos<列规范。

由于某种原因,最后一栏出现了问题S<这似乎与ctable 和 siunitx:最后一列没有正确居中(可能不兼容?)我发现在末尾添加另一列会有所帮助,另请参阅彼得·格里尔评论

如果你改为\mlrA.5ex你可以用以下方式替换第一列

>{\raggedright\arraybackslash\rule{0pt}{\dimexpr1em+.5ex}}b{2.4cm}

你不需要像这样的宏\saenk

\mlrA你甚至可以使用类似的东西来摆脱它

>{\raggedright\arraybackslash\rule[-1.5ex]{0pt}{\dimexpr1em+2ex}}b{2.4cm}

(这些测量值与产生垂直间距的测量值不同,但您可以明白我的意思。)

但是,对于实际的多行单元格(如标题中的单元格)而言,这无济于事,因为它们被 TeX 视为一行上的一个字符,并且它们比同一行的单行单元格增加了更多高度。您至少需要为最高的标题添加另一个特殊支柱。

结果如下面代码 B 所示。我还将所有多行列规范更改为b垂直b对齐。

代码

\documentclass[
  a4paper,
  12pt
]{article}

\usepackage[
  hmargin = 2.4cm,
  vmargin = 3cm
]{geometry}
\usepackage[
  locale = DE,
  detect-weight = true,
  detect-inline-weight = math,
  round-mode = places,
  round-precision = 1
]{siunitx}
\usepackage{xfp}

\def\mlrA{1ex}

\ExplSyntaxOn
  \newcommand*\siunitxNumberUnitProduct{\l__siunitx_number_unit_product_tl}
\ExplSyntaxOff

\begin{document}

\def\masse{80}
\def\Jorden{9.8}
\def\Maanen{1.6}
\def\Juliper{26.5}
\def\Pluto{0.3}
\def\Mars{3.8}
\def\Venus{8.8}
\def\Merkur{5.4}
\def\Neptun{11.0}
\def\Uranus{10.4}
\def\Saturn{11.3}

\begin{center}
\large
\begin{tabular}{
 |>{\raggedright\arraybackslash}m{2.4cm}
 |S[table-format = 2.1,
    table-space-text-post = \siunitxNumberUnitProduct\si{\N}]<{\siunitxNumberUnitProduct\si{\N}}
 |S[table-format = 3.0,
    table-space-text-post = \siunitxNumberUnitProduct\si{\N}]<{\siunitxNumberUnitProduct\si{\N}}
 |S[table-format = 3.1,
    table-space-text-post = \siunitxNumberUnitProduct\si{\kg}]<{\siunitxNumberUnitProduct\si{\kg}}
 |@{}c@{} % something's fishy with S in the last column
}
\hline\multicolumn{1}{|c|}{\textbf{Planet}}
    & \multicolumn{1}{>{\centering}m{4cm}|}{\textbf{Tyngdekraften p{\aa} \SI{1}{\kg}}}
    & \multicolumn{1}{>{\centering}m{4cm}|}{\textbf{Tyngdekraften p{\aa} personen}}
    & \multicolumn{1}{>{\centering}m{4cm}|}{\textbf{Svarer til Jordens tr{\ae}ki}}  \\[\mlrA]
  \hline Jorden  & \Jorden  & \fpeval{\masse*\Jorden} & \fpeval{\masse*\Jorden/\Jorden} & \\[\mlrA]
  \hline Månen   & \Maanen  & \fpeval{\masse*\Maanen} & \fpeval{\masse*\Maanen/\Jorden} & \\[\mlrA]
  \hline Jupiter & \Juliper & \fpeval{\masse*\Juliper}& \fpeval{\masse*\Juliper/\Jorden}& \\[\mlrA]
  \hline Pluto   & \Pluto   & \fpeval{\masse*\Pluto}  & \fpeval{\masse*\Pluto/\Jorden}  & \\[\mlrA]
  \hline Mars    & \Mars    & \fpeval{\masse*\Mars}   & \fpeval{\masse*\Mars/\Jorden}   & \\[\mlrA]
  \hline Venus   & \Venus   & \fpeval{\masse*\Venus}  & \fpeval{\masse*\Venus/\Jorden}  & \\[\mlrA]
  \hline Merkur  & \Merkur  & \fpeval{\masse*\Merkur} & \fpeval{\masse*\Merkur/\Jorden} & \\[\mlrA]
  \hline Neptun  & \Neptun  & \fpeval{\masse*\Neptun} & \fpeval{\masse*\Neptun/\Jorden} & \\[\mlrA]
  \hline Uranus  & \Uranus  & \fpeval{\masse*\Uranus} & \fpeval{\masse*\Uranus/\Jorden} & \\[\mlrA]
  \hline Saturn  & \Saturn  & \fpeval{\masse*\Saturn} & \fpeval{\masse*\Saturn/\Jorden} & \\[\mlrA]
  \hline
\end{tabular}
\end{center}
\end{document}

代码 B

\documentclass[
  a4paper,
  12pt
]{article}

\usepackage[
  hmargin = 2.4cm,
  vmargin = 3cm
]{geometry}
\usepackage[
  locale = DE,
  detect-weight = true,
  detect-inline-weight = math,
  round-mode = places,
  round-precision = 1
]{siunitx}

\ExplSyntaxOn
  \newcommand*\siunitxNumberUnitProduct{\l__siunitx_number_unit_product_tl}
\ExplSyntaxOff

\begin{document}

\def\masse{80}
\def\Jorden{9.8}
\def\Maanen{1.6}
\def\Juliper{26.5}
\def\Pluto{0.3}
\def\Mars{3.8}
\def\Venus{8.8}
\def\Merkur{5.4}
\def\Neptun{11.0}
\def\Uranus{10.4}
\def\Saturn{11.3}

\newcommand*\myStrut{\rule[-1.5ex]{0pt}{\dimexpr1em+2ex}}
\newcommand*\myStrutH{\rule{0pt}{\dimexpr1em+.5ex}}

\begin{center}
\large
\begin{tabular}{
 |>{\raggedright\arraybackslash\myStrut}b{2.4cm}
 |S[table-format = 2.1,
    table-space-text-post = \siunitxNumberUnitProduct\si{\N}]<{\siunitxNumberUnitProduct\si{\N}}
 |S[table-format = 3.0,
    table-space-text-post=\siunitxNumberUnitProduct\si{\N}]<{\siunitxNumberUnitProduct\si{\N}}
 |S[table-format = 3.1,
    table-space-text-post=\siunitxNumberUnitProduct\si{\kg}]<{\siunitxNumberUnitProduct\si{\kg}}
 |@{}c@{} % something's fishy with S in the last column
}
  \hline\multicolumn{1}{|>\myStrut c|}{\textbf{Planet}}
      & \multicolumn{1}{>{\centering\myStrutH}b{4cm}|}{\textbf{Tyngdekraften p{\aa} \SI{1}{\kg}}}
      & \multicolumn{1}{>{\centering}b{4cm}|}{\textbf{Tyngdekraften p{\aa} personen}}
      & \multicolumn{1}{>{\centering}b{4cm}|}{\textbf{Svarer til Jordens tr{\ae}ki}}  \\
  \hline Jorden  & \Jorden  & \calc{\masse*\Jorden} & \calc{\masse*\Jorden/\Jorden} & \\
  \hline Månen   & \Maanen  & \calc{\masse*\Maanen} & \calc{\masse*\Maanen/\Jorden} & \\
  \hline Jupiter & \Juliper & \calc{\masse*\Juliper}& \calc{\masse*\Juliper/\Jorden}& \\
  \hline Pluto   & \Pluto   & \calc{\masse*\Pluto}  & \calc{\masse*\Pluto/\Jorden}  & \\
  \hline Mars    & \Mars    & \calc{\masse*\Mars}   & \calc{\masse*\Mars/\Jorden}   & \\
  \hline Venus   & \Venus   & \calc{\masse*\Venus}  & \calc{\masse*\Venus/\Jorden}  & \\
  \hline Merkur  & \Merkur  & \calc{\masse*\Merkur} & \calc{\masse*\Merkur/\Jorden} & \\
  \hline Neptun  & \Neptun  & \calc{\masse*\Neptun} & \calc{\masse*\Neptun/\Jorden} & \\
  \hline Uranus  & \Uranus  & \calc{\masse*\Uranus} & \calc{\masse*\Uranus/\Jorden} & \\
  \hline Saturn  & \Saturn  & \calc{\masse*\Saturn} & \calc{\masse*\Saturn/\Jorden} & \\
  \hline
\end{tabular}
\end{center}

\end{document}

相关内容