如何在每個 \chapter 指令後面新增自訂目錄(自動「章節細分」)?

如何在每個 \chapter 指令後面新增自訂目錄(自動「章節細分」)?

假設我們有一個分為章節的文檔,我們希望在每章的開頭在兩條水平線之間添加一個“章節細分”,顯示該章節的所有內​​容,並sectionssubsections所有或部分章節之前顯示我們首選的文本。

例如...對於下一個文檔/MWE

\documentclass{book}
\usepackage{amsmath}
\usepackage{capt-of}
\usepackage{pgffor}
\usepackage{hyperref}
\makeatletter
\hypersetup{colorlinks=true, linkcolor=black, citecolor=black, filecolor=black, urlcolor=black,pdftitle = {\@title}}
\makeatother

\newcounter{mychapter}

\renewcommand\thepart{\Alph{part}}
\renewcommand\thechapter{\thepart.\arabic{mychapter}}
\renewcommand\thesection{\thechapter.\arabic{section}}
\renewcommand\thesubsection{\thesection.\arabic{subsection}}


\usepackage{tocloft}
\renewcommand\cftchapfont{\large\bfseries}
\setlength{\cftchapindent}{2.3em}
\setlength{\cftchapnumwidth}{2.6em}
\renewcommand\cftsecfont{\normalsize}
\setlength{\cftsecindent}{4.9em}
\setlength{\cftsecnumwidth}{2.9em}
\setlength{\cftsubsecnumwidth}{4em}
\setlength{\cftsubsecindent}{7em}

\let\oldpart\part
\def\part#1{\oldpart{#1}\setcounter{mychapter}{0}}
\let\oldchapter\chapter
\def\chapter#1{\stepcounter{mychapter}\oldchapter{#1}}



\title{Some Math Staff}
\author{Leledakis, K.}

\begin{document}
\maketitle
\tableofcontents
\listoffigures

\part{First Part}

\chapter{Some Mathematical Functions}
\section{The function $\mathbf{f(x)=c}$}\label{Sec:UFxC}
\subsection{Understanding the function}
This function is independent from the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxC}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x}$}\label{Sec:UFxCx}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxCx}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x+d}$}\label{Sec:UFxCxD}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxCxD}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x+d$}
\end{minipage}
\subsection{Examples}
\ldots

\chapter{More Functions}
\section{The function $\protect\mathbf{f(x)=x^2}$}\label{Sec:UFxS}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxS}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=x^2$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x^2}$}\label{Sec:UFCxS}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFCxS}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x^2$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x^2+d}$}\label{Sec:UFCxSD}
\subsection{Understanding the function}
This function is depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFCxSD}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x^2+d$}
\end{minipage}
\subsection{Examples}
\ldots
\end{document}

它有這樣的目錄:

在此輸入影像描述

我想要這樣的東西:

在此輸入影像描述

關於第 A.1 章

但也有這樣的事情:

關於第 A.2 章

在此輸入影像描述

答案1

解決方案是自動標記部分/小節(我曾經\def重新定義它們,但您可以使用etoolbox-I think- 將其添加到命令中),並通過foreach在它們上使用循環來創建具有您喜歡的外觀的列表(我使用'pgffor' 套件用於此)。一個問題是我們必須停止在某個部分之後添加文本,這是由我的\SBD命令的可選參數處理的(對於要包含的最後一個部分,該參數以-1 結束),另一個問題是停止添加小節(和部分)當沒有定義標籤時(因此\@ifundefined有幫助)。

\documentclass{book}
\usepackage{amsmath}
\usepackage{capt-of}
\usepackage{pgffor}
\usepackage{hyperref}
\makeatletter
\hypersetup{colorlinks=true, linkcolor=black, citecolor=black, filecolor=black, urlcolor=black,pdftitle = {\@title}}
\makeatother

\newcounter{mychapter}

\renewcommand\thepart{\Alph{part}}
\renewcommand\thechapter{\thepart.\arabic{mychapter}}
\renewcommand\thesection{\thechapter.\arabic{section}}
\renewcommand\thesubsection{\thesection.\arabic{subsection}}


\usepackage{tocloft}
\renewcommand\cftchapfont{\large\bfseries}
\setlength{\cftchapindent}{2.3em}
\setlength{\cftchapnumwidth}{2.6em}
\renewcommand\cftsecfont{\normalsize}
\setlength{\cftsecindent}{4.9em}
\setlength{\cftsecnumwidth}{2.9em}
\setlength{\cftsubsecnumwidth}{4em}
\setlength{\cftsubsecindent}{7em}

\let\oldpart\part
\def\part#1{\oldpart{#1}\setcounter{mychapter}{0}}

\makeatletter
\let\oldsection\section
\let\oldsubsection\subsection
\let\olldchapter\chapter
\def\oldchapter{\stepcounter{mychapter}\olldchapter}
\makeatletter

\def\chapter{%
\@ifstar{\@StarredC}{\@nonStarredC}%
}
\def\@StarredC{%
\@ifnextchar[%
{\GenericWarning{}{Warning: A starred chapter can not have parameters. I am going to ignore them!}\@StarredCWith}%
{\@StarredCWithout}%
}      
\def\@StarredCWith[#1]#2{%
\oldchapter*{#2}%
}
\def\@StarredCWithout#1{
\oldchapter*{#1}%
}
\def\@nonStarredC{%
\@ifnextchar[%
{\@nonStarredCWith}%
{\@nonStarredCWithout}%
}
\def\@nonStarredCWith[#1]#2{%
\oldchapter[#1]{#2}\label{Ch:\thechapter}%
}
\def\@nonStarredCWithout#1{%
\oldchapter{#1}\label{Ch:\thechapter}%
}



\def\section{%
\@ifstar{\@Starred}{\@nonStarred}%
}
\def\@Starred{%
\@ifnextchar[%
{\GenericWarning{}{Warning: A starred section can not have parameters. I am going to ignore them!}\@StarredWith}%
{\@StarredWithout}%
}      
\def\@StarredWith[#1]#2{%
\oldsection{#2}\label{\thechapter:\arabic{section}}%
}
\def\@StarredWithout#1{
\oldsection*{#1}\label{\thechapter:\arabic{section}}%
}
\def\@nonStarred{%
\@ifnextchar[%
{\@nonStarredWith}%
{\@nonStarredWithout}%
}
\def\@nonStarredWith[#1]#2{%
\oldsection[#1]{#2}\label{\thechapter:\arabic{section}}%
}
\def\@nonStarredWithout#1{%
\oldsection{#1}\label{\thechapter:\arabic{section}}%
}



\def\subsection{%
\@ifstar{\@StarredS}{\@nonStarredS}%
}
\def\@StarredS{%
\@ifnextchar[%
{\GenericWarning{}{Warning: A starred section can not have parameters. I am going to ignore them!}\@StarredSWith}%
{\@StarredSWithout}%
}      
\def\@StarredSWith[#1]#2{%
\oldsubsection*{#2}%
}
\def\@StarredSWithout#1{%
\oldsubsection*{#1}%
}
\def\@nonStarredS{%
\@ifnextchar[%
{\@nonStarredSWith}%
{\@nonStarredSWithout}%
}
\def\@nonStarredSWith[#1]#2{%
\oldsubsection[#1]{#2}\label{\thesection:\arabic{subsection}}%
}
\def\@nonStarredSWithout#1{%
\oldsubsection{#1}\label{\thesection:\arabic{subsection}}%
}



%SectionBreakDown

\newcounter{secc}
\newcounter{ssecc}
\newcounter{tssecc}
\xdef\OverC{0}

\newcommand{\myalph}[1]{\ifnum\OverC>0\alph{tssecc}\alph{tssecc}\else\ifnum\value{#1}>26\setcounter{tssecc}{\numexpr\value{#1}-26}\alph{tssecc}\alph{tssecc}\xdef\OverC{1}\else\alph{#1}\fi\fi}

\newcommand\SBD[2][1,-1]{%
  \xdef\OverC{0}%
  \def\Continued{1}%
  \def\ToBeContinued{-1}%
  \foreach \opt[count=\ll from 1] in {#1}{%
    \ifnum\ll=1
    \xdef\Continued{\opt}%
    \else
    \xdef\ToBeContinued{\opt}%
    \fi
  }%
  \ifx\ToBeContinued\empty
  \xdef\ToBeContinued{-1}%
  \fi
  \ifx\Continued\empty
  \xdef\Continued{1}%
  \fi

%\section{Section breakdown}

\ifnum\Continued>1
\relax%
\else
\noindent{\huge\bfseries Learning Objectives}%

\noindent\rule{\textwidth}{2pt}\vspace{0.5cm}
\setcounter{secc}{0}%
\setcounter{ssecc}{0}%
\setcounter{tssecc}{0}%
\fi

{\noindent #2}


\ifnum\ToBeContinued<0
\def\ContinueUntil{100}%
\else
\def\ContinueUntil{\ToBeContinued}%
\fi

\foreach \mk in {\Continued,...,\ContinueUntil}{%
  \@ifundefined{r@\thechapter:\mk}{%
    \breakforeach%
  }{%
    \setcounter{secc}{\mk}%
    \ifnum\mk<0
      \breakforeach%
    \else
    \ifnum\mk>\ContinueUntil
    \breakforeach%
    \else
         \noindent{\bfseries{\nameref{\thechapter:\mk}}}\\
         \foreach \ml in {1,...,100}{%
            \@ifundefined{r@\thechapter.\mk:\ml}{%
               \breakforeach%
            }{%
               \setcounter{ssecc}{\ml}%
               \stepcounter{tssecc}%
               \ifnum\mk>0
                     \hspace*{0.5cm}\myalph{tssecc}.\hspace{0.3cm}\parbox[t]{0.9\textwidth}{\setlength{\baselineskip}{4pt}\nameref{\thechapter.\mk:\ml}}\\[1.2ex]
                \fi
            }%
        }%
        \fi
    \fi
  }%
}
%\begin{enumerate}[label={\arabic{enumi}.},itemsep=0pt]
%\foreach \i in {#3,...,#4}
%{\item \nameref{\thechapter:\i}}
%\end{enumerate}

\ifnum\ToBeContinued>0
\relax%
\else
\vspace{-0.5cm}
\par
\noindent\rule{\textwidth}{2pt}
\fi
}
\makeatother


\title{Some Math Staff}
\author{Leledakis, K.}

\begin{document}
\maketitle
\tableofcontents
\listoffigures

\part{First Part}

\chapter{Some Mathematical Functions}
\SBD{In this Section we are going to analyze linear functions:}
\section{The function $\mathbf{f(x)=c}$}\label{Sec:UFxC}
\subsection{Understanding the function}
This function is independent from the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxC}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x}$}\label{Sec:UFxCx}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxCx}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x+d}$}\label{Sec:UFxCxD}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxCxD}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x+d$}
\end{minipage}
\subsection{Examples}
\ldots

\chapter{More Functions}
\SBD[1,2]{Now we will start with the analysis of the functions:}
\SBD[3,-1]{And will finish with:}
\section{The function $\protect\mathbf{f(x)=x^2}$}\label{Sec:UFxS}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFxS}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=x^2$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x^2}$}\label{Sec:UFCxS}
\subsection{Understanding the function}
This function depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFCxS}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x^2$}
\end{minipage}
\subsection{Examples}
\ldots

\section{The function $\protect\mathbf{f(x)=c\cdot x^2+d}$}\label{Sec:UFCxSD}
\subsection{Understanding the function}
This function is depends on the variable $x$ and thus\ldots
\subsection{Plotting the function}
By understanding the content of Subsection~\ref{Sec:UFCxSD}\ldots

\noindent\begin{minipage}[inner sep=0,outer sep=0]{\textwidth}
  \centering
  \captionof{figure}{Plot of $f(x)=c\cdot x^2+d$}
\end{minipage}
\subsection{Examples}
\ldots
\end{document}

PS:對於更大的計數器(該\alph命令不能接受......我使用aa,bb,cc等來繼續枚舉)

輸出:問題的輸出。

相關內容