不使用表格或表格的情况下在 tabularx 单元格中进行垂直填充

不使用表格或表格的情况下在 tabularx 单元格中进行垂直填充

问题是每个单元格顶部的规则与其内容之间没有足够的空间。

在我的示例中,使用\arraystretch不起作用,因为我没有将其放在或环境tabularx中。tabulartable

我不确定这是否与我使用\parbox或有关\mutlirow。这就是我将其保存在此处的 MWE 中的原因。

\documentclass{scrartcl}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{multirow}
\usepackage{tabularx}
\usepackage{calc}
\newlength{\mrwidth}

\begin{document}
\newcommand{\mytext}{And then it happened… a door opened to a world…
    rushing through the phone line like heroin through an addict's veins, an
    electronic pulse is sent out, a refuge from the day-to-day incompetencies is
    sought… a board is found.}

\setlength{\mrwidth}{0.2\textwidth-2\tabcolsep}
\renewcommand\arraystretch{1.1}  % <-- doesn't work here

\begin{tabularx}{\textwidth}{|X|X|X|X|X|}
    \hline
    \multirow{2}*{\parbox{\mrwidth}{\mytext}}
        &b&c&d&e\\\cline{2-5}
    &\parbox{\mrwidth}{\mytext}
        &c&d&e\\\hline
\end{tabularx}
\end{document}

在此处输入图片描述

答案1

这种\rewnewcommand\araystretch{1.1}方法并不能解决所有问题... 您的表格非常不寻常,因此无法帮助在multirow单元格中放置文本。对于您的情况,您需要另一种方法,例如使用gapedcellsfrom 包makecell

\documentclass{scrartcl}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{makecell}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{calc}

\begin{document}
\newcommand{\mytext}{And then it happened ... a door opened to a world ...
    rushing through the phone line like heroin through an addict's veins, an
    electronic pulse is sent out, a refuge from the day-to-day incompetencies 
    is a board is found.}

\setcellgapes{5pt}
\makegapedcells
\begin{tabularx}{\textwidth}{|X|X|X|X|X|}
    \hline
    \multirow{10}*{\parbox{\linewidth}{\mytext}}
        &b&c&d&e\\\cline{2-5}
    &\mytext
        &c&d&e\\\hline
\end{tabularx}
\end{document}

在此处输入图片描述

笔记:\arraystretch正如名称所暗示的那样,它可以在任何数组环境中工作,从到array甚至tabular(tabu它们中的大多数都基于array)。关于表中列的宽度:如果没有必要让所有列都具有相同的宽度,您可以更改它,例如使用>{\setlength\hsize{0.5\hsize}}X(使其变窄),或者甚至在列中只有一行文本的单元格的情况下使用l列类型。通过这种方式,您可以增加其他列的宽度X并在其中获得更好的文本格式。

现在,如果您减小字体大小和形状,您就可以获得稍微好一点的文本格式:

{\sffamily\small
\begin{tabularx}{\textwidth}{|X|X|X|X|X|}
...
\end{tabularx}
}

在此处输入图片描述

除此之外,值得考虑包ragged2e及其宏\RaggedRight。有了它,文本不再对齐,但连字符仍然有效。有了它,您可以获得以下结果:

在此处输入图片描述

(视为 \sffamily\small 字体)。上述 MWE 的变更包括:\usepackage{ragged2e}在序言和表格中添加:

\begin{tabularx}{\textwidth}{|X|X|X|X|X|}
    \hline
    \multirow{10}*{\parbox{\mrwidth}{\RaggedRight\mytext}}
        &b&c&d&e\\\cline{2-5}
    &\RaggedRight\mytext
        &c&d&e\\\hline
\end{tabularx}

附录: 为了给您提供良好的答案,我忘记了一个非常基本的mutirow未来:用 定义它的宽度linewidth。这引入了p{\linewidth}一种单元格类型,其中文本会自动拆分为多行文本。因此,parbox似乎不是必需的(关于这一点,让我想起了 Bernard 的回答,它在哪里使用),但是连字符似乎有所不同。如果您进一步将字体大小减小到 ,则可以观察到差异footnotesize

在此处输入图片描述

上图中第一列没有使用\parbox,使用 后,此列的文字形状与第二列相同。

答案2

使用该makecell包及其\setcellgapes命令,这很容易,您可以获得更简单的代码。无需\parbox计算宽度。

\documentclass{scrartcl}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}
\usepackage{geometry}
\geometry{showframe, a4paper}
\usepackage{ragged2e}
\usepackage{multirow}
\usepackage{tabularx, makecell}
\setcellgapes{4pt}

\begin{document}
\newcommand{\mytext}{And then it happened… a door opened to a world…
    rushing through the phone line like heroin through an addict's veins, an
    electronic pulse is sent out, a refuge from the day-to-day incompetencies is
    sought… a board is found.}

{\setlength\tabcolsep{4pt}
\makegapedcells
\noindent\begin{tabularx}{\linewidth}{|*{5}{>{\RaggedRight\arraybackslash}X|}}
    \hline
    \multirow{2}{\linewidth}{\mytext}
        &b&c&d&e\\\cline{2-5}
    & \mytext
        &c&d&e\\\hline
\end{tabularx}}

\end{document}

在此处输入图片描述

相关内容