我有一张包含 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}