테이블 행에 대한 하위 카운터가 있는 자동 카운터 - 참조

테이블 행에 대한 하위 카운터가 있는 자동 카운터 - 참조

나는 다음과 같은 것을 원합니다: tabularx 환경의 각 행에 대한 참조 가능한 자동 카운터와 하위 카운터. 단일 카운터에 대한 해결책을 찾을 수 있었습니다여기, 그러나 tabularx에 적용할 수 없습니다. 그래서 두 개의 카운터를 이용하여 직접 구현해 보았습니다. 마지막 줄의 더티 솔루션을 사용하지 않고 MainNumber 카운터와 SubNumber를 어떻게 참조합니까?

\documentclass{article}
\usepackage{array} 

\usepackage{tabularx}

\newcounter{MainNumber}
\newcounter{SubNumber}[MainNumber]

\begin{document}
\begin{table}
  \begin{tabularx}{\textwidth}{lX}
  \refstepcounter{MainNumber} \label{firstMain} \theMainNumber & This is first main. \\
  \refstepcounter{SubNumber} \label{1firstSub} \theMainNumber.\theSubNumber & This is first sub \\
  \refstepcounter{SubNumber} \label{1secondSub} \theMainNumber.\theSubNumber & This is second sub\\
  \refstepcounter{MainNumber} \label{secondMain} \theMainNumber & This is second main. \\   
  \refstepcounter{SubNumber} \label{2firstSub} \theMainNumber.\theSubNumber & This is first sub \\
  \refstepcounter{SubNumber} \label{2secondSub} \theMainNumber.\theSubNumber & This is second sub\\ 
\end{tabularx}
\end{table}

second main first sub:~\ref{2firstSub}

shoud be: 2.1

dirty: \ref{secondMain}.\ref{1firstSub}

\end{document}

답변1

이와 같이? 아이디어는 \theSubNumber원하는 형식을 갖도록 (카운터 값을 포함하는) 을 재정의하는 것입니다 <main>.<sub>.

따라서 \theSubNumber대신에 \theMainNumber.\theSubNumber.

여기에 이미지 설명을 입력하세요

\documentclass{article}
\usepackage{array} 

\usepackage{tabularx}

\newcounter{MainNumber}
\newcounter{SubNumber}[MainNumber]
\renewcommand{\theSubNumber}{\theMainNumber.\arabic{SubNumber}} % <-- added here
\begin{document}
\begin{table}
  \begin{tabularx}{\textwidth}{lX}
  \refstepcounter{MainNumber} \label{firstMain}  \theMainNumber & This is first main. \\
  \refstepcounter{SubNumber}  \label{1firstSub}  \theSubNumber  & This is first sub \\
  \refstepcounter{SubNumber}  \label{1secondSub} \theSubNumber  & This is second sub\\
  \refstepcounter{MainNumber} \label{secondMain} \theMainNumber & This is second main. \\   
  \refstepcounter{SubNumber}  \label{2firstSub}  \theSubNumber  & This is first sub \\
  \refstepcounter{SubNumber}  \label{2secondSub} \theSubNumber  & This is second sub\\ 
\end{tabularx}
\end{table}

second main first sub:~\ref{2firstSub}


\end{document}

답변2

여기에 이미지 설명을 입력하세요

automatic새로운 열 유형(예: 'b')을 정의하고 유형 자체에서 단계별 실행과 표시를 수행하도록 하는 또 다른 형태의 번호 매기기 b입니다.

\ifstepmain코드는 부울 '변수' 등을 기준으로 메인 카운터를 단계적으로 수행해야 하는지 아니면 하위 카운터를 단계적으로 수행해야 하는지 결정합니다.

코드는 새로운 기본 단계가 언제 발생하는지 알 수 없으므로(추가 조건이 지정되지 않는 한) 기본 단계로의 전환은 를 사용하여 수행되어야 합니다 \prepnextmainstep.

표 형식의 내용을 여러 번 '조판'하려고 시도하고 매번 설정을 해야 하기 때문에 를 사용하면 tabularx문제가 약간 복잡해집니다 .tabularx\global

\documentclass{article}
\usepackage{array} 

\usepackage{tabularx}

\newcounter{MainNumber}
\newcounter{SubNumber}[MainNumber]

\counterwithin{SubNumber}{MainNumber}



\newif\ifstepmain
\newcolumntype{b}{>{\ifstepmain\refstepcounter{MainNumber}\theMainNumber\global\stepmainfalse\else\refstepcounter{SubNumber}\theSubNumber\fi}l}

\newcommand{\prepnextmainstep}{%
  \global\stepmaintrue%
}

\stepmaintrue
\begin{document}
\begin{table}
  \begin{tabularx}{\textwidth}{bX}
    \label{firstMain}   & This is first main. \tabularnewline
    \label{1firstSub}   & This is first sub \tabularnewline
    \label{1secondSub}  & This is second sub \prepnextmainstep\tabularnewline  
    \label{secondMain}  & This is second main.\tabularnewline   
    \label{2firstSub}   & This is first sub \tabularnewline
    \label{2secondSub}  & This is second sub \prepnextmainstep \tabularnewline 
    \label{thirddMain}  & This is third main.\tabularnewline   
    \label{3firstSub}   & This is first sub \tabularnewline
    \label{3secondSub}  & This is second sub \prepnextmainstep \tabularnewline 
\end{tabularx}
\end{table}

second main first sub:~\ref{2firstSub} and \ref{3secondSub} 

shoud be: 2.1 and 3.2
\end{document}

관련 정보