具有许多参数的 LaTeX 自定义命令

具有许多参数的 LaTeX 自定义命令

我正在处理一个文档,其中我将使用大量具有相同结构的表格,因此我决定创建自定义命令,以便更轻松地处理表格。我编写了如下命令:

\newcommand{\reqV}[7]
{
  \multirow{5}{*}{#1} & \subReq{#1.1}{#3}   & \multirow{5}{*}{#2} \\
                        \cline{2-3}
                      & \subReq{#1.2}{#4}   &                     \\
                        \cline{2-3}
                      & \subReq{#1.3}{#5}   &                     \\
                        \cline{2-3}
                      & \subReq{#1.4}{#6}   &                     \\
                        \cline{2-3}
                      & \subReq{#1.5}{#7}   &                     \\
}

用于将一个带有 5 个子项的项目插入到表中。我有类似的命令\reqI\reqII等等。但是我遇到了一个问题。允许的最大参数数量是 9,所以我只能有一个最多带有 7 个子项的项目,这对我来说可能不够。有没有办法在这里“超越系统”以允许更多参数?或者也许有更聪明的方法来做到这一点?

样品项目

我的想法是,我想在最左边的单元格中放一些代码。该单元格应延伸到一定数量的行。我还想在最右边的单元格中放一个单词,它也应延伸到相同数量的行。中间的所有行都算作子项,应该有一个代码(如示例中所示)和一个描述(此处用字母 A 到 E 表示,但文本可能要长得多)。

答案1

创建可以处理超过 9 个参数的宏的一般方法在如何定义接受超过 9 个参数的命令。但是,这里有一个替代方法。

\req定义为仅接受三个参数。第一个参数用于左列,第二个参数用于中间列文本,第三个参数用于右列。列条目垂直居中,中间列中的每一行都有一个自动计数器,该计数器随每一行移动\\

在此处输入图片描述

\documentclass{article}

\usepackage{tabularx}
\renewcommand{\tabularxcolumn}[1]{ m{#1} }
\newcolumntype{M}[1]{ >{\centering\arraybackslash} m{#1} }

\newcounter{req}
\newcommand{\req}[3]{%
  \setcounter{req}{1}%
  \par\noindent
  \begin{tabularx}{\linewidth}{ | M{5em} X M{7em} | }
    \hline
    #1 &
    {\let\oldbackslash\\
     \renewcommand{\tabularxcolumn}[1]{ p{##1} }%
     \begin{tabularx}{\linewidth}{ | @{\hspace{\tabcolsep}#1.\thereq\hspace{\tabcolsep}} | X | }
       \global\def\\{\stepcounter{req}\oldbackslash \hline}
       #2
     \end{tabularx}%
     \global\let\\\oldbackslash} &
    #3 \\
    \hline
  \end{tabularx}
  \par
}

\begin{document}

\req{IR5}{A \\ B \\ C \\ D}{Mandatory}

\req{IR6}{%
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. \\
  Pellentesque eget nisi non tortor tincidunt porttitor. \\
  Aliquam eget sem arcu. \\
  Suspendisse potenti. \\
  Nullam pellentesque sapien vel leo consequat facilisis. \\
  Aliquam pretium convallis arcu, ut volutpat massa pellentesque quis. \\
  Praesent dignissim facilisis risus ac dignissim. \\
  Interdum et malesuada fames ac ante ipsum primis in faucibus.}{Optional}

\end{document}

相关内容