我想用 LaTeX 绘制一个像附件中的表格。我使用的是table
和tabular
环境。我的问题是如何在图的底部表示从表格的开头到结尾的线。我的想法是用 画一条线,\multicolumn{6}{|c|}{...}
但我无法得到它,因为高度太长了。
有什么想法吗?我希望我已经清楚地解释了我的问题。
如果我使用@egreg 所说的解决方案,我会遇到另一个问题。我需要为其他表格的某些单元格着色,因此我使用代码,\usepackage[table]{xcolor}
但它会使行更短。代码如下:
\documentclass{article}
\usepackage{amsmath,array}
\usepackage[table][hiperref]{xcolor} % Need for colour cells
\providecommand{\textsubscript}[1]{$_\textnormal{#1}$}
\begin{document}
\setlength{\extrarowheight}{2pt}
\begin{tabular}{|*6{c|}}
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{2 bits} &
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} \\
\hline
VALIDEZ & DIVERSIFICACI\'ON &
TAMA\~NO & KDC\textsubscript{AUTH/ENC} &
KDC\textsubscript{KEK} & KDC\textsubscript{MAC} \\
\hline
\multicolumn{6}{@{}c@{}}{\vrule height 2pt depth 2pt \hrulefill \vrule height 2pt depth 2pt} \\
\multicolumn{6}{c}{2 bytes}
\end{tabular}
\end{document}
答案1
\documentclass{article}
\usepackage{amsmath,array}
\providecommand{\textsubscript}[1]{$_\textnormal{#1}$}
\begin{document}
\setlength{\extrarowheight}{2pt}
\begin{tabular}{|*6{c|}}
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{2 bits} &
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} \\
\hline
VALIDEZ & DIVERSIFICACI\'ON &
TAMA\~NO & KDC\textsubscript{AUTH/ENC} &
KDC\textsubscript{KEK} & KDC\textsubscript{MAC} \\
\hline
\multicolumn{6}{@{}c@{}}{\vrule height 2pt depth 2pt \hrulefill \vrule height 2pt depth 2pt} \\
\multicolumn{6}{c}{2 bytes}
\end{tabular}
\end{document}
更通用的解决方案,在colortbl
加载时也可以使用(\usepackage[table]{xcolor}
在您的情况下,通过)
\documentclass{article}
\usepackage{amsmath,array}
\usepackage[table]{xcolor} % Need for colour cells
\providecommand{\textsubscript}[1]{$_\textnormal{#1}$}
\newcommand{\range}[1]{%
\multicolumn{#1}{@{}c@{}}{%
\vrule height 2.2pt depth 1.8pt
\leaders\hrule\hskip 0pt plus 1filll % note the three l's
\vrule height 2.2pt depth 1.8pt
}%
}
\begin{document}
\setlength{\extrarowheight}{2pt}
\begin{tabular}{|*6{c|}}
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{2 bits} &
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} \\
\hline
VALIDEZ & DIVERSIFICACI\'ON &
TAMA\~NO & KDC\textsubscript{AUTH/ENC} &
KDC\textsubscript{KEK} & KDC\textsubscript{MAC} \\
\hline
\range{6}\\
\multicolumn{6}{c}{2 bytes}
\end{tabular}
\end{document}
您可以使用\range{<number>}
跨越任意数量的列;在本例中为六列。
答案2
以下为第二个问题提供了一个简单的解决方案,如果@egreg 发布了更好的解决方案,我将删除这个答案:
\documentclass{article}
\usepackage{amsmath,array}
\usepackage[table,hyperref]{xcolor}% % Need for colour cells
\providecommand{\textsubscript}[1]{$_\textnormal{#1}$}
\def\mytable{%
\setlength{\extrarowheight}{2pt}
\begin{tabular}{|*6{c|}}
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{2 bits} &
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} \\
\hline
VALIDEZ & DIVERSIFICACI\'ON &
TAMA\~NO & KDC\textsubscript{AUTH/ENC} &
KDC\textsubscript{KEK} & KDC\textsubscript{MAC} \\
\hline
\end{tabular}}
\newlength{\tablewith}
\settowidth{\tablewith}{\mytable}
\begin{document}
\noindent
\setlength{\extrarowheight}{2pt}
\begin{tabular}{|*6{c|}}
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{2 bits} &
\multicolumn{1}{c}{1 bit} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} &
\multicolumn{1}{c}{4 bits} \\
\hline
VALIDEZ & DIVERSIFICACI\'ON &
TAMA\~NO & KDC\textsubscript{AUTH/ENC} &
KDC\textsubscript{KEK} & KDC\textsubscript{MAC} \\
\hline
\multicolumn{6}{@{}c@{}}{\vrule height 2pt depth 2pt \rule{\tablewith}{0.4pt}\!\! \vrule height 2pt depth 2pt} \\
\multicolumn{6}{c}{2 bytes}
\end{tabular}
\end{document}
我所做的是获取当前表格的宽度并将其用作规则宽度。