TOC にはピリオドがあるが、参照にはピリオドがない

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 には、適切な場所にのみピリオドを追加する「オートドット」機能があります。

\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

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 スクリプトの提案を次に示します。

\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}

ここに画像の説明を入力してください

ここに画像の説明を入力してください

関連情報