如何指定表头的多列宽度?

如何指定表头的多列宽度?

我想从单独的文件中读取/输入表格主体。我主要使用以下方法解决了这个问题这个问题

但是当我尝试从单独的文件读取多列表时,失败了。以下是示例。

%main.tex
\documentclass{article}
\usepackage{filecontents,catchfile}
\begin{filecontents*}{table.tex}
%table.tex
    \hline
    A & B  & C & D  \\   \hline
    E & \multicolumn{3}{l|}{This is generated by excel2latex macro. I want to let it auto wrap according to the width of (B+C+D) }   \\      \hline

\end{filecontents*}

\begin{document}

Table test.

\section{Insert a full table}

    \begin{tabular}{|p{2cm}|p{2cm}|p{2cm}|p{2cm}|}
    \hline
    A & B  & C & D  \\   \hline
    E & \multicolumn{3}{p{6cm}|}{This is generated by excel2latex macro. I want to let it auto wrap according to the width of (B+C+D) }   \\      \hline
    \end{tabular}%

\section{ Input the body of table from a separate file}

\CatchFileDef{\mytable}{table.tex}{}% table.tex > \mytable
    \begin{tabular}{|p{2cm}|p{2cm}|p{2cm}|p{2cm}|}
  \mytable
    \end{tabular}%

\end{document}

我只是不想手动定义表体中的宽度,因为它是自动生成的。

答案1

假设 B、C 和 D 列属于p以下类型可用的宽度由长度参数 、 和 给出\colB\colC\colD您的示例代码中,这些长度相等2cm全部的但是,B、C 和 D 列的宽度为不是等于2cm。相反,每列的总宽度等于2cm+2\tabcolsep,其中\tabcolsep是控制插入到列左侧和右侧的空白量的参数。(在标准 LaTeX 文档类中,此参数的默认值为6pt。)

合并B、C 和 D 列的宽度(不计算 B 列左侧和 D 列右侧的垂直条的宽度)为

\colB + \colC + \colD + 6\tabcolsep + 2\arrayrulewidth 

(我隐含地假设包array正在被加载。如果不是这样,那么应该省略这个2\arrayrulewidth术语。)您可能猜到它2\arrayrulewidth代表两个内部垂直条的组合宽度——将 B 与 C 以及 C 与 D 分隔开的垂直条。此参数的默认值在0.4pt标准文档类中。

可用的三列的宽度略小一些,因为我们不能在\tabcolsepB 的左边缘和 D 的右边缘施加。因此给出

\colB + \colC + \colD + 4\tabcolsep + 2\arrayrulewidth

可以创建一个名为的长度变量,\combinedlength并将其值设置为上面的表达式。因此,外部文件的内容table.tex将由

\hline
A & B  & C & D  \\   \hline
E & \multicolumn{3}{p{\combinedlength}|}{This is generated by excel2latex macro. I want to let it auto wrap according to the width of (B+C+D) }   \\      
\hline

完整的 MWE:

在此处输入图片描述

\documentclass{article}
\usepackage{array,filecontents,catchfile}
\begin{filecontents*}{table.tex}
\hline
A & B  & C & D  \\   \hline
E & \multicolumn{3}{p{\combinedlength}|}{This is generated by excel2latex macro. I 
want to let it auto wrap according to the width of (B+C+D) }   \\      
\hline
\end{filecontents*}

%% Define some length parameters and set their values
\newlength\colB \setlength\colB{2cm}
\newlength\colC \setlength\colC{2cm}
\newlength\colD \setlength\colD{2cm}
\newlength\combinedlength 
\setlength\combinedlength{%
    \dimexpr\colB+\colC+\colD+4\tabcolsep+%
    2\arrayrulewidth\relax}

\begin{document}
\section{ Input the body of table from a separate file}

\CatchFileDef{\mytable}{table.tex}{}% table.tex > \mytable
    \begin{tabular}{|p{2cm}|p{\colB}|p{\colC}|p{\colD}|}
    \mytable
    \end{tabular}%
\end{document}

答案2

我已经通过指定 \multicolumn{ncols}{ p{\tablewidth} }{long sentence...} 解决了这个问题

然后在其外部使用小页面环境

%main.tex
\documentclass{article}
\usepackage{filecontents,catchfile}
\begin{filecontents*}{table.tex}
%table.tex
    \hline
    A & B  & C & D  \\   \hline
    E & \multicolumn{3}{ p{\tablewidth} }{This is generated by excel2latex macro. This is generated by excel2latex macro. This is generated by excel2latex macro. I want to let it auto wrap according to the width of (B+C+D) }   \\      \hline

\end{filecontents*}

\begin{document}

Table test.

\section{Insert a full table}

    \begin{tabular}{|p{2cm}|p{2cm}|p{2cm}|p{2cm}|}
    \hline
    A & B  & C & D  \\   \hline
    E & \multicolumn{3}{p{6cm}|}{This is generated by excel2latex macro. I want to let it auto wrap according to the width of (B+C+D) }   \\      \hline
    \end{tabular}%

\section{ Input the body of table from a separate file}

\CatchFileDef{\mytable}{table.tex}{}% table.tex > \mytable
    \begin{tabular}{|p{2cm}|p{2cm}|p{2cm}|p{2cm}|}
  \mytable
    \end{tabular}%

\end{document}

答案3

我使用 tabularx 环境及其 X 列格式并解决了这个问题。

\documentclass{article}

\usepackage{bigstrut}
\usepackage{tabularx}

\begin{document}


\begin{tabularx}{70mm}{|p{20mm}|p{20mm}|l|}
% Table generated by Excel2LaTeX from sheet 'Sheet1'
\hline
A     & B     & C \bigstrut\\
\hline
\multicolumn{3}{|X|}{This is combined from A+B+C, and the contents is very very long.} \bigstrut\\
\hline

\end{tabularx}%

\end{document}

相关内容