如何改进表格代码?

如何改进表格代码?

我正在尝试编写一个 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}

相关内容