帶子計數器的自動計數器用於表行 - 引用

帶子計數器的自動計數器用於表行 - 引用

我想要這樣的東西: 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}

相關內容