Latex 多行多列和多行页面宽度表格

Latex 多行多列和多行页面宽度表格

我在创建复杂(对我来说)的表格时遇到了一些麻烦。

成为:

表格示例

我写了这段代码:

\begin{tabularx}{\linewidth}{|X|X|X|X|X|X|X|X|}
\hline
\multirow{2}{*}{Short text} & \multicolumn{4}{|>{\hsize=\dimexpr4\hsize+4\tabcolsep+\arrayrulewidth\relax}X|}{Some long multi column text that can be multi line} & \multirow{2}{*}{Some long one column text that can be multi line}  & \multirow{2}{*}{Some long one column text that can be multi line} &  \multirow{2}{*}{Some long one column text that can be multi line}\\
\hline
& long_word & long_word & long_word & long_word &  &  &  \\
\hline
\end{tabularx}

但第二行的单词没有连字符。而且多行不起作用。我做错了什么?

答案1

表格宽度的计算比平常要复杂一些,因为你要指定全部的列宽,而不是可用的列宽。LaTeX 需要提供有关可用列宽的信息。必须从总列宽中减去任何空白填充和垂直规则的宽度才能获得可用的列宽。

让我们标记可用的列宽\xlen\ylen\zlen分别以及全部的列宽分别为\xtotlen\ytotlen\ztotlen。总列宽必须满足

5\xtotlen+\ytotlen+2\ztotlen=\textwidth
\ytotlen=3\xtotlen
\ztotlen=2\totxlen

(旁白:请注意\textwidth=12\xtotlen。)

接下来回想一下

\xtotlen=\xlen+2\tabcolsep+1\arrayrulewidth
\ytotlen=\ylen+2\tabcolsep+1\arrayrulewidth
\ztotlen=\zlen+2\tabcolsep+1\arrayrulewidth

经过一些重新排列后,我们可以表达可用的列宽如下:

\xlen = (\textwidth-24\tabcolsep-12\arrayrulewidth)/12
\ylen = 3\xlen+4\tabcolsep+2\arrayrulewidth
\zlen = 2\xlen+2\tabcolsep+1\arrayrulewidth

眼尖的读者可能已经注意到,这些计算没有考虑到位于第一列左侧的第一个垂直线的宽度;它的宽度等于\arrayrulewidth。为了使宽度计算真正正确,必须将其更改\xlen = (\textwidth-24\tabcolsep-12\arrayrulewidth)/12为。(鉴于默认\xlen = (\textwidth-24\tabcolsep-13\arrayrulewidth)/12值为,我怀疑任何人都不会注意到差异。)\tabcolsep0.4pt


好了,说得够多了!让我们看看这一切是如何进行的。

在此处输入图片描述

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[letterpaper,margin=1in]{geometry} % set page parameters suitably
\usepackage{multirow}  
\usepackage{array}    % for \newcolumntype macro
\usepackage{ragged2e} % for \RaggedRight macro
\newcolumntype{P}[1]{>{\RaggedRight\hspace{0pt}}p{#1}}

%% Compute the three column widths:
\newlength\xlen
\setlength\xlen{\dimexpr\textwidth-24\tabcolsep-13\arrayrulewidth\relax}
\setlength\xlen{\dimexpr0.08333333\xlen\relax} % 1/12 \approx 0.08333333
\newlength\ylen
\setlength\ylen{\dimexpr3\xlen+4\tabcolsep+2\arrayrulewidth\relax}
\newlength\zlen
\setlength\zlen{\dimexpr2\xlen+2\tabcolsep+1\arrayrulewidth\relax}

\newcommand\longword{long\_\discretionary{}{}{}word}

\begin{document}
\noindent % <-- this is important
\begin{tabular}{ | *{5}{P{\xlen}|} P{\ylen}| *{2}{P{\zlen}|} }
\hline
  \multirow{4}{=}{Short text}
& \multicolumn{4}{>{\RaggedRight}P{\dimexpr4\xlen+6\tabcolsep+3\arrayrulewidth}|}{%
     Some long multi-column text which can be multi-line} 
& \multirow{4}{=}{Some long one-column text which can be multi-line}
& \multirow{4}{=}{Some long one-column text which can be multi-line}
& \multirow{4}{=}{Some long one-column text which can be multi-line} \\
\cline{2-5} % not "\hline"
& \longword & \longword & \longword & \longword &  &  &  \\

\hline
\end{tabular}
\end{document}

答案2

对于固定宽度列,在 中\multirow,您应该使用{=}宽度参数,而不是{*}。此外,对于多行单元格,第一个参数 应该是包含的行总数,而不是行数。此外,为了微调多行内容的垂直位置,您可以使用非整数行数。最后,由于 tabularx 似乎在 的参数中对固定宽度列类型存在问题\multicolumn},我使用了multicolumn{4}{c}{\makecell{...\\...}},其中换行是手动完成的。

\documentclass{article}
\usepackage{geometry}
\usepackage{calc}
\usepackage{tabularx, multirow, makecell}

\begin{document}

\centering\small
\setlength{\extrarowheight}{3pt}
\begin{tabularx}{\linewidth}{|*{5}{>{\hsize=0.66\hsize}X|}>{\hsize=2\hsize}X|*{2}{>{\hsize=1.35\hsize}X|}}
\hline
 \multirow{3}{=}{Short text} &
\multicolumn{4}{c|}{\makecell{Some long multi column text\\ that can be multi line}} 
& \multirow{3}{=}{Some long one column text that can be multi line} & \multirow{2}{=}{Some long one column text that can be multi line} & \multirow{2}{=}{Some long one column text that can be multi line}\\
\cline{2-5}
& long\_ word & long\_ word & long\_ word & long\_ word & & & \\
\hline
\end{tabularx}

\end{document} 

在此处输入图片描述

答案3

只是出于好奇,因为作者说

  Proportionally columns should be so: 1-1-1-1-1-3-2-2 

将文本宽度分为 12 列——

前 5 列是文本宽度的 0.08 倍——

下一个是 3 乘以 0.08 --

最后两个是 2 乘以 0.08

在此处输入图片描述

\documentclass{article}
%\usepackage[showframe]{geometry}
\usepackage{graphicx}
\usepackage{ragged2e}
\usepackage{tabularx}

\begin{document}

\begin{table}[!ht]
    \centering
    \renewcommand{\arraystretch}{1.5} % 
    \setlength{\tabcolsep}{4pt}
\begin{tabularx}{\textwidth}
    {
        |*{5}{>{\centering\arraybackslash\hsize=0.08\hsize}X|}
        *{1}{>{\centering\arraybackslash\hsize=0.24\hsize}X|}
        *{2}{>{\centering\arraybackslash\hsize=0.16\hsize}X|}
    }
            \hline%
           G  & G & G & G & G & G & G & G \\
            \hline%
\end{tabularx}
\end{table}

\end{document}

相关内容