使用 newenvironment 中的 newcommand 打印表格

使用 newenvironment 中的 newcommand 打印表格

我有以下自定义计数器和命令:

\documentclass{article}

\newcounter{usecase}[section]
\newcommand{\usecasenumber}{\arabic{usecase} \stepcounter{usecase}
\newcommand{\usecase}[9]{
    \begin{tabular}{| p{4cm} | p{8cm} |}
        \hline
        Anwendungsfall-Nummer       & U-\usecasenumber  \\
        \hline
        Hauptakteur                 & #1                \\
        \hline
        Andere Akteure              & #2                \\
        \hline
        Beschreibung                & #3                \\
        \hline
        Vorbedingung                & #4                \\
        \hline
        Nachbedingung               & #5                \\
        \hline
        Ausführung                  & #6                \\
        \hline
        Alternativen                & #7                \\
        \hline
        Ausnahmen                   & #8                \\
        \hline
        Benutzte Anwendungsfälle    & #9                \\      
        \hline
    \end{tabular}
}

\begin{document}
\usecase{1}{2}{3}{4}{5}{6}{7}{8}{9}
\end{document}

我现在想要一个环境usecase,它的作用与我的 newcommand 完全相同,另外还要在表格中添加另一行,其名称应该能够赋予用例环境。环境应该能够自动增加计数器,我希望能够向用例环境添加标签(就像在图表或表格中一样)。当我引用这样的标签时,\ref我希望引用是计数器用例给出的环境的编号。

我不确定如何实现这一点,或者这是否有可能。我会从类似这样的事情开始,但我不知道如何从那里继续实现所需的行为。

\newenvironment{usecase}[1]{\refstepcounter{usecase}}{
    % TODO
}

如果有人能帮助我,我将非常感激。:)

答案1

我不建议在这里使用环境,但是无论如何我为此提供了解决方案。

但是我不建议使用 9 个参数,而是应用键值接口来获取值——这样就不需要记住哪个参数代表哪个内容了。

\documentclass{article}

\usepackage[utf8]{inputenc}

\newcounter{usecase}[section]

\usepackage{xkeyval}

\makeatletter
\define@key{usecase}{nummer}{%
  \def\kvnummer{#1}%
}

\define@key{usecase}{akteur}{%
  \def\kvakteur{#1}%
}

\define@key{usecase}{andere}{%
  \def\kvandere{#1}%
}

\define@key{usecase}{beschreibung}{%
  \def\kvbeschreibung{#1}%
}

\define@key{usecase}{nachbedingungen}{%
  \def\kvnachbedingung{#1}%
}

\define@key{usecase}{vorbedingungen}{%
  \def\kvvorbedingung{#1}%
}

\define@key{usecase}{ausfuehrung}{%
  \def\kvausfuehrung{#1}%
}

\define@key{usecase}{alternativen}{%
  \def\kvalternativen{#1}%
}

\define@key{usecase}{ausnahmen}{%
  \def\kvausnahmen{#1}%
}

\define@key{usecase}{anwendungen}{%
  \def\kvanwendungsfaelle{#1}%
}

\makeatother

\newenvironment{usecase}[1][]{%
  \refstepcounter{usecase}%
  \setkeys{usecase}{#1}%
  \begin{tabular}{| p{4cm} | p{8cm} |}
    \hline
    Anwendungsfall-Nummer       & U-\theusecase  \\
    \hline
    Hauptakteur                 & \kvakteur                \\
    \hline
    Andere Akteure              & \kvandere                \\
    \hline
    Beschreibung                & \kvbeschreibung                \\
    \hline
    Vorbedingung                & \kvvorbedingung                \\
    \hline
    Nachbedingung               & \kvnachbedingung                \\
    \hline
    Ausführung                  & \kvausfuehrung                \\
    \hline
    Alternativen                & \kvalternativen                \\
    \hline
    Ausnahmen                   & \kvausnahmen                \\
    \hline
    Benutzte Anwendungsfälle    & \kvanwendungsfaelle               \\      
    \hline
  \end{tabular}
}{}

\newcommand{\usecaseother}[1][]{%
  \refstepcounter{usecase}%
  \begingroup 
  \setkeys{usecase}{#1}%
  \begin{tabular}{| p{4cm} | p{8cm} |}
    \hline
    Anwendungsfall-Nummer       & U-\theusecase  \\
    \hline
    Hauptakteur                 & \kvakteur                \\
    \hline
    Andere Akteure              & \kvandere                \\
    \hline
    Beschreibung                & \kvbeschreibung                \\
    \hline
    Vorbedingung                & \kvvorbedingung                \\
    \hline
    Nachbedingung               & \kvnachbedingung                \\
    \hline
    Ausführung                  & \kvausfuehrung                \\
    \hline
    Alternativen                & \kvalternativen                \\
    \hline
    Ausnahmen                   & \kvausnahmen                \\
    \hline
    Benutzte Anwendungsfälle    & \kvanwendungsfaelle               \\      
    \hline
  \end{tabular}
  \endgroup
}


% Preset default values
\presetkeys{usecase}{%
  andere={},
  akteur={},
  anwendungen={},
  vorbedingungen={keine},
  nachbedingungen={viele},
  beschreibung={Wichtig!},
  ausnahmen={keine!},
  alternativen={Absolut keine!},
  ausfuehrung={dringend!}}{}


\begin{document}

In \ref{ucfirst} werden sehen, daß der bessere Fall durch \ref{ucsecond} repräsentiert wird!


\begin{usecase}[akteur={Mr. Gumby}, andere={Mr. Gumbies}] \label{ucfirst}
\end{usecase}

\usecaseother[akteur={Mrs. Ann Elk}, andere={--}, beschreibung={Theorie der Brontosaurier}, ausfuehrung={gehoben!}] \label{ucsecond}
\end{document}

enter image description here

相关内容