Tabularx(xltabular)仅包含多列,无法正确展开

Tabularx(xltabular)仅包含多列,无法正确展开

我有一张包含 20 个相等列的表格。我需要做的是使用这 20 列的部分内容进行多列分组。表格需要分布在整个文本宽度上。

%--LATEX-COMPILER:lualatex:LATEX-COMPILER       % Specify which compiler to be used
%LATEX-COMPILE-COUNT:1:LATEX-COMPILE-COUNT      % How many iterations to make the compiler
\documentclass[paper=a4,fontsize=18pt]{article}
\usepackage{geometry}
\geometry{
% verbose,
portrait,       % page orientation (landscape or portrait)
a4paper,        % paper size
tmargin=5mm,    % page top margin
bmargin=5mm,    % page bottom margin
lmargin=5mm,   % page left margin
rmargin=5mm % page right maring
}

\usepackage[utf8]{inputenc}
\usepackage[defaultsans]{opensans} %font
\usepackage[T1, T2A]{fontenc}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{layouts}
\usepackage{xltabular}
\usepackage{layouts}


\newcommand{\smf}{ % small font
    \fontsize{9}{11}\selectfont
}


 
\begin{document}


     \noindent
     \begin{xltabular}{\textwidth}{|*{20}{>{\centering\arraybackslash\hsize=0.88\hsize}X|}}
\hline
 \multicolumn{20}{|c|}{ \centering \textbf{ test } } \\  
       \multicolumn{2}{|l}{ \smf test} & 
        \multicolumn{2}{l}{  } & 
         \multicolumn{6}{l}{ \smf test } & 
           \multicolumn{3}{l}{ \smf test} &  
             \multicolumn{7}{l|}{ \smf test }   \\ \hline 
             1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1 \\ \hline
\end{xltabular}



     \noindent
\begin{xltabular}{\textwidth}{|*{20}{>{\centering\arraybackslash\hsize=0.88\hsize}X|}}
\hline
 \multicolumn{20}{|c|}{ \centering \textbf{ test } } \\  
       \multicolumn{2}{|l}{ \smf test} & 
        \multicolumn{2}{l}{  } & 
         \multicolumn{6}{l}{ \smf test } & 
           \multicolumn{3}{l}{ \smf test} &  
             \multicolumn{7}{l|}{ \smf test }   \\ \hline 
           
\end{xltabular}

\end{document}

表 1 产生了我需要的结果。表 2 根本没有扩展。我以前使用 tabu,它有一个命令 \tabuphantomline,可以解决这个问题,但由于它不再维护,我决定切换到其他表。提前谢谢您!

编辑

由于某种原因,删除一行会出现以下错误!缺少}插入。

仅当 xltabular 与多列、X 类型的列和命令 \kill 结合使用时才会发生这种情况。这种情况发生在环境中pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017),在 pdfTeX, Version 3.14159265-2.6-1.40.21 (MiKTeX 20.12)

这很好用

\begin{xltabular}{\textwidth}{|X|X|X|} % vertical rules for illustrative purposes only
   % \multicolumn{1}{|c|}{very long content } & setting the widths & of each column \\ \kill
  actual & content & is short \\
  killed & row & discarded 
\end{xltabular}

这会产生错误

\begin{xltabular}{\textwidth}{|X|X|X|} % vertical rules for illustrative purposes only
    \multicolumn{1}{|c|}{very long content } & setting the widths & of each column \\ \kill
  actual & content & is short \\
  killed & row & discarded 
\end{xltabular}

答案1

由于底层\halign原语的行为tabularx,它基本上不知道 X 规范是否存在,甚至不知道原始表有 20 列。TeX 优化了每行中跨越的所有列边界。

但是或者 longtable 您可以使用 \kill row 来添加一行然后再次将其删除,以便\halign查看所有列。

在此处输入图片描述

\documentclass[paper=a4,fontsize=18pt]{article}
\usepackage{geometry}
\geometry{
% verbose,
portrait,       % page orientation (landscape or portrait)
a4paper,        % paper size
tmargin=5mm,    % page top margin
bmargin=5mm,    % page bottom margin
lmargin=5mm,   % page left margin
rmargin=5mm % page right maring
}

\usepackage[utf8]{inputenc}
\usepackage[defaultsans]{opensans} %font
\usepackage[T1, T2A]{fontenc}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{layouts}
\usepackage{xltabular}
\usepackage{layouts}


% no \newcommand{\smf}{ % small font
\newcommand{\smf}{% small font
    \fontsize{9}{11}\selectfont
}


 
\begin{document}


% no     \noindent
     \begin{xltabular}{\textwidth}{|*{20}{>{\centering\arraybackslash\hsize=0.88\hsize}X|}}
\hline
 \multicolumn{20}{|c|}{ \centering \textbf{ test } } \\  
       \multicolumn{2}{|l}{ \smf test} & 
        \multicolumn{2}{l}{  } & 
         \multicolumn{6}{l}{ \smf test } & 
           \multicolumn{3}{l}{ \smf test} &  
             \multicolumn{7}{l|}{ \smf test }   \\ \hline 
             1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1 \\ \hline
\end{xltabular}



     % no\noindent
\begin{xltabular}{\textwidth}{|*{20}{>{\centering\arraybackslash\hsize=0.88\hsize}X|}}
\hline
 \multicolumn{20}{|c|}{ \centering \textbf{ test } } \\  
       \multicolumn{2}{|l}{ \smf test} & 
        \multicolumn{2}{l}{  } & 
         \multicolumn{6}{l}{ \smf test } & 
           \multicolumn{3}{l}{ \smf test} &  
             \multicolumn{7}{l|}{ \smf test }   \\ \hline 
           
\end{xltabular}


     \begin{xltabular}{\textwidth}{|*{20}{>{\centering\arraybackslash\hsize=0.88\hsize}X|}}
\hline
 \multicolumn{20}{|c|}{ \centering \textbf{ test } } \\  
       \multicolumn{2}{|l}{ \smf test} & 
        \multicolumn{2}{l}{  } & 
         \multicolumn{6}{l}{ \smf test } & 
           \multicolumn{3}{l}{ \smf test} &  
             \multicolumn{7}{l|}{ \smf test }   \\ \hline 
             1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1&1 \kill
\end{xltabular}


\end{document}

相关内容