Benutzerdefinierte Beschriftungen in dynamischen Tabellen

Benutzerdefinierte Beschriftungen in dynamischen Tabellen

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}

ergab Ausgabe: Bildbeschreibung hier eingeben

gewünschte Ausgabe: Bildbeschreibung hier eingeben

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}

verwandte Informationen