
Eu quero algo assim: um contador automático referenciável e um subcontador para cada linha em um ambiente tabularx. Eu poderia encontrar uma solução para um único contadoraqui, mas não consegui adaptá-lo ao tabularx. Então tentei implementá-lo diretamente usando dois contadores. Como faço referência ao contador MainNumber e ao SubNumber, sem usar a solução suja na última linha?
\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}
Responder1
Assim? A ideia é redefinir o \theSubNumber
(que contém o valor do contador) para ter o formato desejado: <main>.<sub>
.
Então, você apenas digita \theSubNumber
em vez de \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}
Responder2
Outra forma de automatic
numeração, definindo um novo tipo de coluna, digamos, 'b' e deixando o passo e a exibição serem feitos pelo b
próprio tipo.
O código determina se deve percorrer o contador principal ou o subcontador pela 'variável' booleana, \ifstepmain
etc.
Como o código não pode saber quando ocorre uma nova etapa principal (a menos que mais algumas condições sejam especificadas), a mudança para a etapa principal deve ser feita com \prepnextmainstep
.
O uso de tabularx
complica um pouco o problema, pois tabularx
tenta 'compor' o conteúdo tabular várias vezes, cada vez \global
que configurações etc.
\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}