동적 테이블의 맞춤 라벨

동적 테이블의 맞춤 라벨

항목 수를 계산하고 각 항목에 사용자 정의 레이블을 제공하는 테이블을 자동 생성하려고 합니다. \customlabel이 제대로 작동하도록 할 수 없습니다. 항상 목록의 마지막 항목을 참조하는 것 같습니다. 누군가 이 문제를 해결하는 방법을 알고 있습니까?

감사합니다!

CLS 파일:

\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

및 기본 .tex 파일(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}

산출된 출력: 여기에 이미지 설명을 입력하세요

원하는 출력: 여기에 이미지 설명을 입력하세요

답변1

안녕하세요, 이 문제를 해결했습니다. if 절에 있는 것 같았습니다.

잘못된 코드:

\newcommand\themissionreqnumber{%
\ifnum\value{NameOfTheNewCounter}<100 0\fi
\protect\arabic{NameOfTheNewCounter}}

수정(실제로 테스트되지는 않았지만 새 코드를 처음 시도했을 때 발생한 오류이기도 합니다. 아래 작업 코드를 참조하세요)

\newcommand\themissionreqnumber{%
{\ifnum\value{NameOfTheNewCounter}<100 0\fi}
\protect\arabic{NameOfTheNewCounter}}

하지만 지금은 완전히 다른 방식으로 코딩했습니다.

\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}

관련 정보