将表格列的 p 宽度传递给多行宽度以实现自动换行

将表格列的 p 宽度传递给多行宽度以实现自动换行

给出下表:

\documentclass{standalone}

\usepackage{booktabs, siunitx, multirow}

\begin{document}

    \begin{tabular}{p{1.5cm}lSS}
        \toprule
        & a & x & y \\ \midrule
        \multirow{2}{=}{entdimensionalisiert} & abc & 0,00 & 20,95  \\
        & def & 0,004 & 0,7 \\ \midrule
        \multirow{2}{=}{normalisiert} & abc & 0,00& 20,95  \\
        & def & 1,00 & 175,00 \\ \bottomrule
    \end{tabular}   

\end{document}

我怎样才能将 p 列的宽度传递给两个多行,以便每个多行内的文本可以相应地自动换行? 而不是*尝试宽度信息=,但无济于事。

答案1

编辑:现在被视为 OP 评论。添加了使用LuaLaTeX引擎编译 MWE 的解决方案。它还允许对单元格内容中的第一个单词进行连字符处理。

siunitx列包的使用S可以像在 MWE 中使用一样简单:只需S在没有任何选项的情况下,预期在数字中写入具有默认整数和小数位数的简单数字。但是包的功能要强大得多。它允许指定(作为选项)整数和小数的数量:(table-format=<number of integer digits>.<number of decimal digits> 基本选项)、数字舍入、添加符号等。有关详细信息,请参阅包文档。它通过许多示例进行了说明。

使用\multirow{2}{=}{...}是正确的方法,但是您编译的 MWEpdfLaTeX不支持单元格文本中第一个单词的连字符。您可以通过两种方式解决问题:

  • 通过在单词中插入连字符点\-,如以下 MWE 中所做的那样:
\documentclass[margin=2mm]{standalone}

\usepackage{booktabs, multirow}
\usepackage{siunitx}

\begin{document}
    \begin{tabular}{ p{19mm} l S[table-format=1.3] S[table-format=3.2] }
        \toprule
        & a & {x} & {y} \\ \midrule
\multirow{2}{=}{entdimen\-sionalisiert} 
        & abc & 0,00 & 20,95  \\
        & def & 0,004 & 0,7 \\ \midrule
\multirow{2}{=}{normalisiert} 
        & abc & 0,00& 20,95  \\
        & def & 1,00 & 175,00 \\ \bottomrule
    \end{tabular}
\end{document}

在此处输入图片描述

  • 或者通过将包添加babel到 MWE 然后通过以下方式进行编译LuaLaTeX
\documentclass[margin=2mm]{standalone}
\usepackage[ngerman]{babel}   % <---

\usepackage{booktabs, multirow}
\usepackage{siunitx}

\begin{document}
    \begin{tabular}{ p{17mm} l S[table-format=1.3] S[table-format=3.2] }
        \toprule
        & a & {x} & {y} \\ \midrule
\multirow{2}{=}{entdimensionalisiert}
        & abc & 0,00 & 20,95  \\
        & def & 0,004 & 0,7 \\ \midrule
\multirow{2}{=}{normalisiert}
        & abc & 0,00& 20,95  \\
        & def & 1,00 & 175,00 \\ \bottomrule
    \end{tabular}
\end{document}

在此处输入图片描述

答案2

以下是使用新tabularray包的解决方案(加拿大运输安全局)。

\documentclass{article}

\usepackage{booktabs, siunitx}
\usepackage{tabularray}
\UseTblrLibrary{booktabs, siunitx}

\begin{document}

\begin{tblr}{p{1.7cm}lSS}
    \toprule
    & a & x & y \\ \cmidrule{2-4}
    \SetCell[r=2]{t} entdimensionalisiert & abc & 0,00 & 20,95  \\
    & def & 0,004 & 0,7 \\ \midrule
    \SetCell[r=2]{t} normalisiert & abc & 0,00& 20,95  \\
    & def & 1,00 & 175,00 \\ \bottomrule
\end{tblr} 
    
\end{document}

输出表

我已将宽度增加到1.7cm,因为否则文本“entDimensionisert”将跨越 3 行。

相当于tabularray。宽度自动从表格列定义中获取\multirow{2}\SetCell[r=2]

笔记

这必须用 LuaLaTex 进行编译才能允许对段落中的第一个单词进行连字。

相关内容