如何向某些(即非全部)章节编号添加 *?
—
前
2.1 区分
2.2 集成
后
2.1 区分
2.2* 集成
—
文档类别是 jlreq。
我不想使用包,因为它会破坏风格。
我需要将带星号的部分包含在目录中。
部分带星号的章节会有交叉引用。交叉引用中应以星号显示章节编号。
—
小样本文件
% !TEX TS-program = lualatex
\documentclass[book]{jlreq}
\begin{document}
\tableofcontents
\chapter{Calculus}
\section{Differentiation}
\section{Integration}
\end{document}
答案1
你可以使用条件语句,并标记“困难”部分
\section+{Title}
这也允许标准可选参数\section
,因此您仍然可以执行
\section+[Short title]{Long title}
和平常一样。A\label
可以去任何地方:在主参数内部或外部。也\section*
可以照常工作。
\documentclass[oneside]{book}
\usepackage[a6paper,margin=1.5cm]{geometry}
\pagestyle{plain}
\NewCommandCopy{\latexsection}{\section}
\RenewDocumentCommand{\section}{t+sO{#4}m}{%
\IfBooleanT{#1}{\difficultsectiontrue}
\IfBooleanTF{#2}{%
% called as \section*
\latexsection*{#4}%
}{%
\latexsection[#3]{#4}%
}%
\difficultsectionfalse
}
\newif\ifdifficultsection
\renewcommand{\thesection}{%
\thechapter.\arabic{section}%
\ifdifficultsection *\fi
}
\renewcommand{\thesubsection}{%
\thechapter.\arabic{section}.\arabic{subsection}%
}
\begin{document}
\tableofcontents
\chapter{Calculus}
We have section~\ref{diff} and section~\ref{int}
\section{Differentiation}\label{diff}
\subsection{Preliminaries}
\section+{Integration}\label{int}
\subsection{Preliminaries}
\end{document}
我还重新定义了,\thesubsection
所以它不会有*
。
生产说明:上述代码的前三行仅旨在获得较小的输出图片。
答案2
这是一个设置新命令的解决方案,\starredsection
它满足原始作者的所有四个要求。它的局限性是 (a) 任何\label
命令都必须包含在的参数中,\starredsection
并且 (b) 不识别任何可选参数。
目录页面:
第一个主页:
% !TEX TS-program = lualatex
\documentclass[book]{jlreq}
\newcommand\starredsection[1]{%
\begingroup % localize scope of next instruction
\renewcommand\thesection{\arabic{chapter}.\arabic{section}*}
\section{#1}
\endgroup}
\begin{document}
\tableofcontents
\chapter{Calculus}
\section{Differentiation}
\starredsection{Integration\label{sec:integ}}
\subsection{Hello}
\section{Whatever}\label{sec:what}
\noindent
Cross-references to sections \ref{sec:integ} and \ref{sec:what}.
\end{document}