我有以下自定义计数器和命令:
\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}