我正在尝试使用该类自定义目录中章节、子章节等的编号格式book
。基本上,问题是更改任何样式都会\renewcommand
改变所有地方的样式,我想独立于交叉引用的样式更改目录的样式。
我知道这个titlesec
包,但它只会改变实际标题的样式,而不会改变交叉引用。
更准确地说,我的 MWE 如下。
\documentclass[oneside,12pt]{book}
\renewcommand{\thechapter}{\Roman{chapter}}
\renewcommand{\thesection}{\thechapter.\arabic{section}}
\renewcommand{\thesubsection}{\thechapter.\arabic{section}.\alph{subsection}}
\renewcommand{\theparagraph}{\roman{chapter}.\arabic{paragraph}.}
\setcounter{secnumdepth}{4}
\begin{document}
\tableofcontents
\chapter{First Chapter}
\section{Section one}\label{sec:one}
\subsection{Subsection A}\label{subsec:one.a}
\subsection{Subsection B}
\section{Section two}
Same as Section~\ref{sec:one}.
\section{Section three}
\subsection{Subsection A}
Same as Subsection~\ref{subsec:one.a}.
\end{document}
它生成目录
以及书的正文
现在,我对正文的外观很满意,但我想删除目录中章节和小节编号前面的罗马字母“I”,而不是交叉引用中的罗马字母“I”。
我将非常感谢您的所有建议。
答案1
当写出目录条目时,LaTeX 设置\label
为\@gobble
。因此你可以对其进行测试:
\documentclass[oneside,12pt]{book}
\renewcommand{\thechapter}{\Roman{chapter}}
\makeatletter
\renewcommand{\thesection}{\ifx\label\@gobble\else\thechapter.\fi\arabic{section}}
\renewcommand{\thesubsection}{\ifx\label\@gobble\else\thechapter.\fi\arabic{section}.\alph{subsection}}
\renewcommand{\theparagraph}{\roman{chapter}.\arabic{paragraph}.}
\setcounter{secnumdepth}{4}
\begin{document}
\tableofcontents
\chapter{First Chapter}
\section{Section one}\label{sec:one}
\subsection{Subsection A}\label{subsec:one.a}
\subsection{Subsection B}
\section{Section two}
Same as Section~\ref{sec:one}.
\section{Section three}
\subsection{Subsection A}
Same as Subsection~\ref{subsec:one.a}.
\end{document}