テーブル行のサブカウンタ付き自動カウンタ - 参照

テーブル行のサブカウンタ付き自動カウンタ - 参照

私はこのようなものを望んでいます: tabularx環境の各行の参照可能な自動カウンターとサブカウンター。単一のカウンターの解決策を見つけることができましたここ、しかしそれを tabularx に適応させることができませんでした。そこで、2 つのカウンターを使用して直接実装してみました。最後の行のダーティ ソリューションを使用せずに、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}

関連情報