Ich versuche, automatisch eine Tabelle zu generieren, die ihre Einträge zählt und jedem Eintrag benutzerdefinierte Beschriftungen zuweist. Ich schaffe es nicht, \customlabel richtig zum Laufen zu bringen, es scheint immer auf den letzten Eintrag der Liste zu verweisen. Hat jemand eine Idee, wie man das beheben kann?
Danke schön!
CLS-Datei:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myCLS}[bla]
\LoadClass[12pt]{article}
% requirements
\newcounter{NameOfTheNewCounter}
\setcounter{NameOfTheNewCounter}{0}
\newcommand\themissionreqnumber{%
\ifnum\value{NameOfTheNewCounter}<100 0\fi
\protect\arabic{NameOfTheNewCounter}}
\newcommand{\missionrequiremententries}{}
\newcommand{\missionrequirement}[3]{%
\protected@xdef\missionrequiremententries{\missionrequiremententries \protect\addtocounter{NameOfTheNewCounter}{10}MIS-\protect\themissionreqnumber & #2 & #3 \protect\\}\protect\customlabel{#1}{MIS-\protect\themissionreqnumber}}
\RequirePackage[a4paper,%
top=3.28cm, bottom=3.10cm,%
left=2.0cm, right=1.95cm,%
headsep=0.2cm,headheight=50pt,heightrounded,%
footskip=1.3cm]{geometry}% Change the page dimensions and margins
\RequirePackage[table]{xcolor}% Colours
\definecolor{lightgrey}{RGB}{230,230,230}
\RequirePackage{tabularx,booktabs,colortbl}% Improved tables
und Haupt-.tex-Datei (Kompilierung mit XeLaTex)
\documentclass{myCLS}
\usepackage[hidelinks]{hyperref}
\makeatletter
\newcommand{\customlabel}[2]{%
\protected@write \@auxout {}{\string \newlabel {#1}{{#2}{\thepage}{#2}{#1}{}} }%
}
\makeatother
\newcommand{\missionrequirementstable}{%
\noindent
\begin{table}[h]
\caption{Requirements}\label{tab:req}
{\footnotesize
\begin{tabularx}{\columnwidth}{p{2cm}|X|p{2cm}}
\hline
\rowcolor{lightgrey}{\bfseries ID} & {\bfseries Statement} & {\bfseries Parent ID}\\
\hline
\missionrequiremententries
\hline
\end{tabularx}
}
\end{table}
}
\begin{document}
\missionrequirement{myFirstLabel}{My text.}{\ref{mySecondLabel}}
\missionrequirement{mySecondLabel}{My new text.}{\ref{myFirstLabel}}
\missionrequirementstable
\ref{myFirstLabel}
\end{document}
Antwort1
Hey, ich habe dieses Problem gelöst. Es schien in der if-Klausel zu liegen
falscher Code:
\newcommand\themissionreqnumber{%
\ifnum\value{NameOfTheNewCounter}<100 0\fi
\protect\arabic{NameOfTheNewCounter}}
Korrektur (nicht wirklich getestet, aber das war auch der Fehler bei meinen ersten Versuchen mit dem neuen Code, siehe funktionierenden Code unten)
\newcommand\themissionreqnumber{%
{\ifnum\value{NameOfTheNewCounter}<100 0\fi}
\protect\arabic{NameOfTheNewCounter}}
Ich habe es jetzt aber ganz anders codiert:
\newcounter{NameOfTheNewCounter}
\renewcommand{\theNameOfTheNewCounter}{MIS-{\ifnum\value{NameOfTheNewCounter}<100 0\fi}\arabic{misreqs}}
\newcommand{\NameOfTheNewCounterCnt}[1]{%
\addtocounter{NameOfTheNewCounter}{10}% Step counter
\theNameOfTheNewCounter% Print counter
\addtocounter{NameOfTheNewCounter}{-1}\refstepcounter{NameOfTheNewCounter}\label{#1}}% Mark with label
\newcommand{\missionrequiremententries}{}
\newcommand{\missionrequirement}[3]{%
\protected@xdef\missionrequiremententries{\missionrequiremententries \protect\misreqCnt{#1} & #2 & #3 \protect\\}}
{\footnotesize
\begin{longtable}{p{1.7cm}|p{11.9cm}|p{2cm}}
\caption{Mission Requirements}\label{tab:mission_req}\\
\hline
\rowcolor{lightgrey}{\bfseries Req. ID} & {\bfseries Statement} & {\bfseries Parent ID}\\
\hline
\endhead
\missionrequiremententries
\hline
\end{longtable}}}
\begin{document}
\missionrequirement{myFirstLabel}{My text.}{\ref{mySecondLabel}}
\missionrequirement{mySecondLabel}{My new text.}{\ref{myFirstLabel}}
\missionrequirementstable
\ref{myFirstLabel}
\end{document}