Quero que os números das seções romanas sejam seguidos por um ponto final no sumário e nos títulos das seções. Aqui está o MWE.
\documentclass{book}
\renewcommand{\thesection}{\Roman{section}.}
\begin{document}
\tableofcontents
\section{First section\label{l}}
This is Section \ref{l}.
\end{document}
Isto resulta em
Um ponto extra na referência aparece. No entanto, se eu remover o ponto final de
\renewcommand{\thesection}{\Roman{section}.}
,
os pontos no sumário e no rótulo da seção desaparecem com ele.
Como posso resolver isso? Obrigado.
Responder1
A gravação do ponto .
no .aux
arquivo para o rótulo deve ser evitada, então o truque é atacar \@currentlabel
na hora de escrever \p@section
.
Isso engole o ponto \thesection
alterando \p@section
e escrevendo \Roman{section}
novamente para as referências, mas mantém o I.
formato do sumário e dos títulos.
Não há nenhuma outra classe ou pacote envolvido, a desvantagem é que a definição de \thesection
deve ser lembrada.
VerEscrevendo condições de teorema com numeração e rótulos automáticospara outra aplicação deste 'truque'.
\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}
Responder2
A maneira mais fácil é mudar de classe. scrbook do pacote KOMA possui um recurso "autodot" que adiciona o ponto apenas nos locais apropriados:
\documentclass{scrbook}
\renewcommand{\thesection}{\Roman{section}}
\begin{document}
\tableofcontents
\section{First section\label{l}}
This is Section \ref{l}.
\end{document}
Responder3
Aqui está uma solução que funciona com a book
classe document. Ele (a) usa o tocloft
pacote e (b) redefine a macro LaTeX de baixo nível \@seccntformat
para entradas em nível de seção.
\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}
Responder4
Você pode usar titlesec
e titletoc
. Mas então um ponto é adicionado aos números de todos os níveis de seção.
\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}
Aqui está uma sugestão adicional do KOMA-Script que adiciona o ponto apenas ao nível da seção:
\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}