表格中的文本换行(已加载多行包)

表格中的文本换行(已加载多行包)

我搜索了一下,但找不到可靠的方法来在列跨多行的表格中换行。关于如何让此表格适合页面,您有什么想法吗?:

\documentclass[12pt,a4paper]{article}
\usepackage{booktabs}
\usepackage{multirow}

\begin{document}
    \begin{tabular}{cccc}
    \toprule
    & & \multicolumn{2}{c}{Logic of rule adoption} \\
    \cmidrule{3-4}
       & & Logic of consequences & Logic of appropriateness \\
    \midrule
    \multirow{2}{*}{Principal actor in rule adoption process} & EU-driven & External incentives model & Social learning model \\
      & CEE-driven & Lesson-drawing model & Lesson-drawing model \\
    \bottomrule
    \end{tabular}
 \end{document}

答案1

在回答有关包装包含在内的文本的问题时\multirow,您可以将内容放在指定宽度的<stuff>段落框中:\parbox{<len>}{<stuff>}<len>

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\usepackage{multirow}% http://ctan.org/pkg/multirow

\begin{document}
  \begin{tabular}{cccc}
    \toprule
    & & \multicolumn{2}{c}{Logic of rule adoption} \\
    \cmidrule{3-4}
    & & Logic of     & Logic of \\
    & & consequences & appropriateness \\
    \midrule
    \multirow{2}{*}{\parbox{4cm}{Principal actor in rule adoption process}} & EU-driven & External incentives model & Social learning model \\
    & CEE-driven & Lesson-drawing model & Lesson-drawing model \\
    \bottomrule
  \end{tabular}
\end{document}

但是,就您的文档规格而言,这仍然太宽了(12pt,a4paper)。因此,这里可能有一个更好的表格布局和一些边距调整(使用geometry):

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\usepackage[margin=3cm]{geometry}% http://ctan.org/pkg/geometry

\begin{document}
\noindent\begin{tabular}{ccc}
    \toprule
    & \multicolumn{2}{c}{Logic of rule adoption} \\
    \cmidrule{2-3}
    \parbox{0.3\linewidth}{\centering Principal actor in rule adoption process} & 
    \parbox{0.3\linewidth}{\centering Logic of consequences} & 
    \parbox{0.3\linewidth}{\centering Logic of appropriateness} \\
    \midrule
    EU-driven & External incentives model & Social learning model \\
    CEE-driven & Lesson-drawing model & Lesson-drawing model \\
    \bottomrule
  \end{tabular}
\end{document}

注意\noindent避免段落缩进,否则会将表格推到右侧,超出文本(右)边距。

答案2

首先,您最初尝试的代码中存在一些错误(列太多,多行定义错误)。因此我们的起点代码应如下所示:

\documentclass[12pt,a4paper]{article}
\usepackage{booktabs}
\usepackage{multirow}

\begin{document}
\begin{tabular}{ccc}
\toprule
\multirow{2}{*}{Principal actor in rule adoption process}
& \multicolumn{2}{c}{Logic of rule adoption} \\
\cmidrule{2-3}
& Logic of consequences & Logic of appropriateness \\
\midrule

EU-driven & External incentives model & Social learning model \\
CEE-driven & Lesson-drawing model & Lesson-drawing model \\

\bottomrule
\end{tabular}
\end{document}

看起来像应该工作是将列转换为段落(换行)列;您可以使用数组包和特殊的 p 定义使它们居中。(我假设你需要使它们保持居中。)我还添加了 \noindent,以便表格之前没有段落缩进(常见做法)。

\documentclass[12pt,a4paper]{article}
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\usepackage{multirow}
\usepackage{array}

\begin{document}
\noindent
\begin{tabular}%
{>{\centering\arraybackslash}p{0.3\textwidth}%
>{\centering\arraybackslash}p{0.3\textwidth}%
>{\centering\arraybackslash}p{0.3\textwidth}}
\toprule
\multirow{2}{*}{Principal actor in rule adoption process}
& \multicolumn{2}{c}{Logic of rule adoption} \\
\cmidrule{2-3}
& Logic of consequences 
& Logic of appropriateness \\
\midrule
EU-driven & External incentives model & Social learning model \\
CEE-driven & Lesson-drawing model & Lesson-drawing model \\
\bottomrule

\end{tabular}
\end{document}

但是,这不起作用,因为多行不“遵守”段落列定义,因此文本不会换行。 (多行文档没有提到这个“功能”,令我惊讶的是,这个问题和类似问题的其他答案中都没有提到这一点,因为对我来说,这是非常不直观的。)

因此我们需要将多行包装在 parbox 中以“手动重新应用列格式”:

\documentclass[12pt,a4paper]{article}
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\usepackage{multirow}
\usepackage{array}

\begin{document}
\noindent
\begin{tabular}%
{>{\centering\arraybackslash}p{0.3\textwidth}%
>{\centering\arraybackslash}p{0.3\textwidth}%
>{\centering\arraybackslash}p{0.3\textwidth}}
\toprule
\multirow{2}{*}{\parbox{0.3\textwidth}{\centering Principal actor in rule adoption process}}
& \multicolumn{2}{c}{Logic of rule adoption} \\
\cmidrule{2-3}
& Logic of consequences 
& Logic of appropriateness \\
\midrule
EU-driven & External incentives model & Social learning model \\
CEE-driven & Lesson-drawing model & Lesson-drawing model \\
\bottomrule

\end{tabular}
\end{document}

您可以恢复为 {ccc} 列定义,并让 parbox 的宽度固定 <= 该列的任何其他行内容,但这有点笨拙。最好保留它们,这样就可以获得到处环绕、居中文本的好处。

编辑:实际上,如果您手动设置多行宽度,它也可以起作用:

\multirow{2}{0.3\textwidth}{\centering Principal actor in rule adoption process}}

这也许是一个更简洁的解决方案,但有点神秘的是,为什么手动指定宽度(参见 *)会导致它开始换行,但直到手动添加后才会居中。(我假设是因为指定的宽度隐式应用了段落样式换行。)至少使用 parbox 可以使其明确。

编辑2:更通用的是,如果你到处都使用 \linewidth 而不是 \textwidth,并且多行宽度为\linewidth不是 0.3\linewidth)。\linewidth 似乎为您提供了上下文宽度,在表格单元格中,即列宽。但是,我还没有看到有关 \linewidth 的描述(包括此网站上的全面答案:\textwidth、\linewidth 和 \hsize 之间的区别) 提到了这个表格上下文(它们都谈论列表、小页面和 parbox),所以我非常惊讶它是这样工作的。也许是因为 parbox 被暗中使用了(?),或者 \linewidth 比人们意识到的更通用?

答案3

您可能还需要为每行添加一些垂直间距。例如,\\[3ex]\hline 否则,如果换行的文本很长,它将溢出到后续行。换行文本单元格的高度由非多行单元格的高度总和决定。在我的情况下 - 换行的单元格更长 - 因此切\hline过它。

[3ex]只需使用或等扩展每行的高度即可[4ex]。除非有人有更好的解决方案。这为我解决了问题。

相关内容