TOC 中的期間但不在參考中

TOC 中的期間但不在參考中

我希望目錄和章節標題中的羅馬章節編號後面跟著一個句點。這是 MWE。

\documentclass{book}
\renewcommand{\thesection}{\Roman{section}.}
\begin{document}
 \tableofcontents
 \section{First section\label{l}}
 This is Section \ref{l}.
\end{document}

這導致

裁判的加時賽

參考文獻中會出現一個額外的句點。但是,如果我從中刪除尾隨句點

\renewcommand{\thesection}{\Roman{section}.},

目錄和章節標籤中的點也隨之消失。

目錄和章節標籤中沒有句點

我該如何解決這個問題?謝謝。

答案1

必須防止將點寫入.標籤文件.aux,因此技巧是\@currentlabel在寫入時進​​行攻擊\p@section

\thesection這會透過更改\p@section\Roman{section}再次寫入參考文獻來吞噬點,但保留I.目錄和標題的格式。

不涉及其他類別或包,缺點是\thesection必須記住 的定義。

使用自動編號和標籤編寫定理條件這個「技巧」的另一個應用。

\documentclass{book}

\renewcommand{\thesection}{\Roman{section}.}


\makeatletter
\def\remove@@dot\csname the#1\endcsname{\Roman{#1}}
\def\p@section{\remove@@dot}
\makeatother

\begin{document}
 \tableofcontents
 \section{First section\label{l}}
 This is Section \ref{l}.
\end{document}

在此輸入影像描述

答案2

最簡單的方法就是換班級。 KOMA 捆綁包中的 scrbook 有一個“autodot”功能,僅在適當的位置添加句點:

\documentclass{scrbook}
\renewcommand{\thesection}{\Roman{section}}

\begin{document}
 \tableofcontents
 \section{First section\label{l}}
 This is Section \ref{l}.
\end{document}

在此輸入影像描述

答案3

這是一個適用於book文件類別的解決方案。它 (a) 使用該套件並 (b) 重置節級條目的tocloft低級 LaTeX 巨集。\@seccntformat

\documentclass{book}

\renewcommand{\thesection}{\Roman{section}}
\makeatletter
\def\@seccntformat#1{\@ifundefined{#1@cntformat}%
   {\csname the#1\endcsname\quad}%     default
   {\csname #1@cntformat\endcsname}}%  enable individual control
\newcommand\section@cntformat{\thesection.\quad} % for section-level entries
\makeatother
\usepackage[titles]{tocloft}
\renewcommand{\cftsecaftersnum}{.} % place "." after section-level "number"

\begin{document}
\tableofcontents
\section{First section\label{l}}
This is Section \ref{l}.
\end{document}

答案4

您可以使用titlesectitletoc。但隨後會在所有部分層級的數字上添加一個點。

\documentclass{book}
\renewcommand{\thesection}{\Roman{section}}
\usepackage{titlesec}
\titlelabel{\thetitle.\enskip}
\usepackage[dotinlabels]{titletoc}
\begin{document}
\tableofcontents
\section{First section\label{l}}
Section \ref{l} contains new definitions.
\end{document}

在此輸入影像描述


這是一個額外的 KOMA-Script 建議,僅將點添加到節級別:

\documentclass[
  numbers=noenddot
  ]
  {scrbook}
\addtokomafont{disposition}{\rmfamily}
\renewcommand{\thesection}{\Roman{section}}

\usepackage{xpatch}
\xpatchcmd{\sectionformat}{\autodot}{.}{}{\PatchFailed}
\newcommand\sectionentrynumberformat[1]{\renewcommand\autodot{.}#1}
\RedeclareSectionCommand[
  tocentrynumberformat=\sectionentrynumberformat
]{section}

\usepackage{blindtext}
\begin{document}
 \tableofcontents
 \section{First section\label{l}}
 Section \ref{l} contains new definitions.
%
\blinddocument
\end{document}

在此輸入影像描述

在此輸入影像描述

相關內容