假设我们有一份分为多个章节的文档,并且我们希望在每一章的开头在两条水平线之间添加一个“章节细分”,以显示该章节的所有内容,并sections
在subsections
所有或部分章节之前显示我们喜欢的文本。
例如...对于下一个文档/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 等来继续枚举)
输出:问题的输出。