当只有多列单元格时表格的列宽相等

当只有多列单元格时表格的列宽相等

我必须创建一个包含一些包头信息的表格。我创建了一个 HTML 参考布局,现在我想翻译将其转换为 LaTeX。

HTML:
在此处输入图片描述

乳胶:

\documentclass[11pt,a4paper,titlepage,openbib]{article}

\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage[hidelinks]{hyperref}
\usepackage{enumitem}
\usepackage{array}
\usepackage{tabularx}

\newcolumntype{C}{>{\centering\arraybackslash}X}
\setlength\tabcolsep{.5pt}

\begin{document}
\begin{tabularx}{\textwidth}{|*{16}{C|}}
\hline
  \multicolumn{4}{|r|}{4} 
& \multicolumn{4}{r|}{8} 
& \multicolumn{4}{r|}{12}
& \multicolumn{4}{r|}{16}\\
\hline
  \multicolumn{1}{|c|}{B/R}
& \multicolumn{5}{c|}{Msg-Type}
& \multicolumn{5}{c|}{Src-Addr}
& \multicolumn{5}{c|}{Dest-Addr}\\
\hline
  \multicolumn{16}{|c|}{Fletcher-16 Checksum}\\
\hline
  \multicolumn{8}{|c|}{Payload-Length in Bits}
& \multicolumn{8}{c|}{Payload max. 28 Byte}\\
\hline
\end{tabularx}
\end{document}

结果:
在此处输入图片描述

我错过了什么?

答案1

LaTeX 需要更多信息才能正确确定单元格宽度。下面,通过提供以下显式计算来实现可用的第 1 行和第 2 行的 8 个单元格中,宽度为 7。第 8 个单元格(包含“B/R”)被赋予其自然单元格属性,不是 \multicolumn{1}{|c|}{B/R}

这些计算基于这样的事实:如果可用的单元格的宽度定义为

\newcolumntype{C}{>{\Centering}X|}

也就是说Z可用的4 个这样的单元格组合的宽度为4Z + (4-1)*2*\tabcolsep + (4-1)*\arrayrulewidth

在此处输入图片描述

\documentclass[11pt,a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=2cm]{geometry}

\usepackage{tabularx,ragged2e}
\newcolumntype{C}{>{\Centering}X}
\newcolumntype{R}{>{\RaggedLeft}X}

\setlength\tabcolsep{2pt} % '0.5pt' seems rather extreme

\begin{document}

\noindent % <-- important
\begin{tabularx}{\textwidth}{|*{16}{C|}}
\hline
\multicolumn{4}{|>{\hsize=\dimexpr4\hsize+6\tabcolsep+3\arrayrulewidth\relax}R|}{4}  & 
\multicolumn{4}{ >{\hsize=\dimexpr4\hsize+6\tabcolsep+3\arrayrulewidth\relax}R|}{8}  &
\multicolumn{4}{ >{\hsize=\dimexpr4\hsize+6\tabcolsep+3\arrayrulewidth\relax}R|}{12} &
\multicolumn{4}{ >{\hsize=\dimexpr4\hsize+6\tabcolsep+3\arrayrulewidth\relax}R|}{16} \\
\hline
B/R & 
\multicolumn{5}{ >{\hsize=\dimexpr5\hsize+8\tabcolsep+4\arrayrulewidth\relax}C|}{Msg-Type}  & \multicolumn{5}{ >{\hsize=\dimexpr5\hsize+8\tabcolsep+4\arrayrulewidth\relax}C|}{Src-Addr}  &
\multicolumn{5}{ >{\hsize=\dimexpr5\hsize+8\tabcolsep+4\arrayrulewidth\relax}C|}{Dest-Addr} \\
\hline
\multicolumn{16}{|c|}{Fletcher-16 Checksum} \\
\hline
\multicolumn{8}{|c|}{Payload-Length in Bits} & 
\multicolumn{8}{ c|}{Payload max.\ 28 Byte} \\
\hline
\end{tabularx}

\end{document}

相关内容