我希望目录和章节标题中的罗马章节编号后面跟着一个句号。这是 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
答案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
您可以使用titlesec
和titletoc
。但是这样会在所有部分级别的数字上添加一个点。
\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}