Automatischer Zähler mit Unterzähler für Tabellenzeilen - Referenzierung

Automatischer Zähler mit Unterzähler für Tabellenzeilen - Referenzierung

Ich möchte so etwas: einen referenzierbaren automatischen Zähler und Unterzähler für jede Zeile in einer Tabularx-Umgebung. Ich könnte eine Lösung für einen einzelnen Zähler findenHier, konnte es aber nicht an tabularx anpassen. Also habe ich versucht, es direkt mit zwei Zählern zu implementieren. Wie referenziere ich den MainNumber-Zähler und den SubNumber-Zähler, ohne die schmutzige Lösung in der letzten Zeile zu verwenden?

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

Antwort1

\theSubNumberWie das? Die Idee besteht darin, (das den Zählerwert enthält) neu zu definieren , um das gewünschte Format zu erhalten: <main>.<sub>.

Sie geben also nur \theSubNumberanstelle von ein \theMainNumber.\theSubNumber.

Bildbeschreibung hier eingeben

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

Antwort2

Bildbeschreibung hier eingeben

Eine andere Art der automaticNummerierung besteht darin, einen neuen Spaltentyp, beispielsweise „b“, zu definieren und die Schrittweite und Anzeige vom bTyp selbst vornehmen zu lassen.

Der Code bestimmt, ob er den Hauptzähler oder den Unterzähler durch die boolesche „Variable“ \ifstepmainusw. erhöhen soll.

Da der Code nicht wissen kann, wann ein neuer Hauptschritt erfolgt (es sei denn, es werden weitere Bedingungen angegeben), muss der Wechsel zum Hauptschritt mit erfolgen \prepnextmainstep.

Die Verwendung von tabularxkomplizierter ist die Sache ein wenig, da bei tabularxmehreren Versuchen, den Tabelleninhalt zu „setzen“, jedes Mal \globalneue Einstellungen vorgenommen werden müssen.

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

verwandte Informationen