![如何改进表格代码?](https://linux22.com/image/247401/%E5%A6%82%E4%BD%95%E6%94%B9%E8%BF%9B%E8%A1%A8%E6%A0%BC%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
我正在尝试编写一个 tex 代码来输出如下表所示的表格:
我写了以下代码:
\newcounter{NumberReqF}
\newcommand{\ReqF}{\stepcounter{NumberReqF}\theNumberReqF ~- }
\newcounter{NumberReqNF}[NumberReqF]
\newcommand{\ReqNF}{\stepcounter{NumberReqNF}\theNumberReqF .\theNumberReqNF ~- }
\setcounter{NumberReqF}{0}
\setcounter{NumberReqNF}{0}
\noindent \begin{table}[h!]
\begin{tabular}{|p{0.40\columnwidth}|p{0.15\columnwidth}|p{0.15\columnwidth}|c|c|}
\hline
\multicolumn{3}{|p{0.70\columnwidth}|}{\ReqF Requisito Funcional} & \multicolumn{2}{p{0.30\columnwidth}|}{Oculto ()}\tabularnewline
\hline
\multicolumn{5}{|p{\columnwidth}|}{Aqui vai a descrição do requisito funcional, falando como ele funciona e tal mais algo. Pra testa o espaço vo coloca mais esse text pra que veja como a tabela se comporta}\tabularnewline
\hline
\multicolumn{5}{|p{\columnwidth}|}{\centering Requisitos Não-Funcionais}\tabularnewline
\hline
Nome & Restrição & Categoria & Desejável & \multicolumn{1}{c|}{Permanente}\tabularnewline
\hline
\ReqNF nome do resquisito não-funcional & & & & \multicolumn{1}{c|}{}\tabularnewline
\hline
\ReqNF nome do resquisito não-funcional & & & & \multicolumn{1}{c|}{}\tabularnewline
\hline
\end{tabular}
\end{table}
它输出:
但是代码太复杂了,我该如何改进它?让它更容易阅读,写入新行。我打算添加许多类似的表。我也在考虑创建一个新命令,但我不知道怎么做。
答案1
首先是一些一般说明:
尽量避免这样做,[h!]
即使!
限制乳胶可以放置浮子的地方。
不要把需要放的\noindent
地方放在前面(如果有的话)\begin{table}
\begin{tabular}
您的表格已过满并生成警告,\columnwidth Overfull \hbox (47.99474pt too wide)
因为它具有全宽条目,然后被规则和列间空间包围,因此使其比全宽更宽。
我怀疑几个条目可以是一行,所以使用\multicolumn{1}{c|}
而不是 p 列
最后一列c
已经是,但您有几个条目\multicolumn{1}{c|}
将其重置为c
。
下面我使用该tabularx
包进行一些宽度计算,并使用该calc
包使考虑数组规则变得更容易。
也许是这样的:
\documentclass{article}
\usepackage[latin1]{inputenc}
\newcounter{NumberReqF}
\newcommand{\ReqF}{\stepcounter{NumberReqF}\theNumberReqF ~- }
\newcounter{NumberReqNF}[NumberReqF]
\newcommand{\ReqNF}{\stepcounter{NumberReqNF}\theNumberReqF .\theNumberReqNF ~- }
\setcounter{NumberReqF}{0}
\setcounter{NumberReqNF}{0}
\usepackage{tabularx,calc}
\newcolumntype{Y}[1]{>{\setlength\hsize{#1\hsize}%
\raggedright\arraybackslash}X}
\newcolumntype{F}{|p{\columnwidth-2\tabcolsep-2\arrayrulewidth}|}
\setlength\extrarowheight{2pt}
\begin{document}
\begin{table}
\noindent\begin{tabularx}{\columnwidth}{|Y{0.5}|Y{0.25}|Y{0.25}|c|c|}
\hline
\multicolumn{3}{|l|}{\ReqF Requisito Funcional} & \multicolumn{2}{l|}{Oculto ()}\tabularnewline
\hline
\multicolumn{5}{F}{Aqui vai a descrição do requisito funcional, falando como ele funciona e tal mais algo. Pra testa o espaço vo coloca mais esse text pra que veja como a tabela se comporta}\tabularnewline
\hline
\multicolumn{5}{|c|}{Requisitos Não-Funcionais}\tabularnewline
\hline
Nome & Restrição & Categoria & Desejável & Permanente\tabularnewline
\hline
\ReqNF nome do resquisito não-funcional & & & & \tabularnewline
\hline
\ReqNF nome do resquisito não-funcional & & & &\tabularnewline
\hline
\end{tabularx}
\end{table}
\end{document}