
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
\theSubNumber
Wie 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 \theSubNumber
anstelle von ein \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}
Antwort2
Eine andere Art der automatic
Nummerierung besteht darin, einen neuen Spaltentyp, beispielsweise „b“, zu definieren und die Schrittweite und Anzeige vom b
Typ selbst vornehmen zu lassen.
Der Code bestimmt, ob er den Hauptzähler oder den Unterzähler durch die boolesche „Variable“ \ifstepmain
usw. 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 tabularx
komplizierter ist die Sache ein wenig, da bei tabularx
mehreren Versuchen, den Tabelleninhalt zu „setzen“, jedes Mal \global
neue 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}