I have defined two new counters and two macros. The first macro \requirement
simply increases the counter requirement
. The second macro \subrequirement
is basically doing the same but using requriment
as reference. Both macros define a new label.
Now I want to pass a already defined label to \subrequirement
and use the counter value requirement
from the passed label without resetting the actual counter requirement
.
\documentclass[a4paper, 12pt]{scrartcl}
\usepackage{etoolbox} % Used anyway in the document
\usepackage{hyperref} % Used if important for question
% Define counter
\newcounter{requirement}
\newcounter{subrequirement}[requirement]
% Define new commands
\newcommand{\requirement}[1]{%
\refstepcounter{requirement}R\therequirement%
\label{req:#1}%
}%
\newcommand{\subrequirement}[2][]{%
\ifstrempty{#1}{%
\refstepcounter{subrequirement}R\therequirement.\thesubrequirement%
\label{subreq:#2}%
}{%
% use passed label as reference counter
% \refstepcounter{subrequirement}R\therequirement.\thesubrequirement%
% \label{subreq:#2}%
}%
}%
\begin{document}
Define requirement: \requirement{request} (R1)
Reference request \ref{req:request}
Define second requirement: \requirement{need-help} (R2)
Define subrequirement \subrequirement{need-help-1} (R2.1) and \subrequirement{need-help-2} (R2.2)
Define subrequirement of with passed reference \subrequirement[request]{request-1} (R1.1 wanted)
Define requirement \requirement{tex-SX} (R3 is desired)
\end{document}
Edit 1: (dirty) Solution - manuell set subcounter
\documentclass[a4paper, 12pt]{scrartcl}
\usepackage{etoolbox} % Used anyway in the document
\usepackage{xparse}
\usepackage{hyperref} % Used if important for question
% Define counter
\newcounter{requirement}
\newcounter{subrequirement}[requirement]
% Define new commands
\newcommand{\requirement}[1]{%
\refstepcounter{requirement}R\therequirement%
\label{req:#1}%
}%
\NewDocumentCommand{\subrequirement}{ O{} O{0} m}{%
\ifstrempty{#1}{%
\refstepcounter{subrequirement}R\therequirement.\thesubrequirement%
\label{subreq:#3}%
}{%
% use passed label as reference counter
\ifnumequal{#2}{0}{%
R\ref{req:#1}.\thesubrequirement%
}{%
R\ref{req:#1}.#2%
}%
\label{subreq:#3}%
}%
}
\begin{document}
Define requirement: \requirement{request} (R1)
Reference request \ref{req:request}
Define second requirement: \requirement{need-help} (R2)
Define subrequirement \subrequirement{need-help-1} (R2.1) and \subrequirement{need-help-2} (R2.2)
Define subrequirement of with passed reference \subrequirement[request][1]{request-1} (R1.1 wanted)
Define requirement \requirement{tex-SX} (R3 is desired)
\end{document}
The edit command provide a second optional argument to set the subcounter manually. The man problem is to overlook if there is a entry with a subcounter already.