![当只有多列单元格时表格的列宽相等](https://linux22.com/image/434647/%E5%BD%93%E5%8F%AA%E6%9C%89%E5%A4%9A%E5%88%97%E5%8D%95%E5%85%83%E6%A0%BC%E6%97%B6%E8%A1%A8%E6%A0%BC%E7%9A%84%E5%88%97%E5%AE%BD%E7%9B%B8%E7%AD%89.png)
我必须创建一个包含一些包头信息的表格。我创建了一个 HTML 参考布局,现在我想翻译将其转换为 LaTeX。
乳胶:
\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}