Se eu fizer um marcador \section
e \section*
, a âncora apontará para as duas seções em um local diferente. Um pequeno espaço vertical é adicionado \section*
(veja .png
-files). Como posso ter certeza de que a âncora está colocada no mesmo lugar?
Preciso desta solução pois gostaria de fazer umaLista de Apêndices, onde as entradas só precisam ser mostradas em LoA
e não ToC
, mas ainda preciso dos números das seções no texto e LoA
.
\documentclass{book}
\usepackage{bookmark}
\hypersetup{bookmarksnumbered=true}
\begin{document}
\chapter{Chapter one}
References here:
ref: \ref{chap2} (chapter)
ref: \ref{chap2sec1} (section)
ref: \ref{chap2sec2} (star-section)
\chapter{Chapter two}\label{chap2}
...(contents of chapter 2)...
\section{Sec one}\label{chap2sec1}
...(contents of chapter 2 - section 1)...
\refstepcounter{section}
\section*{\thesection{}{\quad}Sec two}\label{chap2sec2}
\addcontentsline{toc}{section}{\protect\numberline{\thesection}Sec two}
...(contents of chapter 2 - section 2)...
\end{document}
EDITAR (1):Adicionei uma caixa vermelha para mostrar a âncora de marcador errada para \section*
. O espaçamento entre as seções está correto, apenas as configurações da âncora estão erradas.
Responder1
Você pode ajustar a forma como \section
funciona e fazer com que aja \section*
da mesma forma \section
, apenas com algumas pequenas modificações:
\documentclass{book}
\usepackage{bookmark}
\hypersetup{bookmarksnumbered=true}
\usepackage{xparse}
\makeatletter
\renewcommand{\@seccntformat}[1]{\csname the#1\endcsname\space}% Just for this example
\let\oldsection\section
\let\oldaddcontentsline\addcontentsline
\RenewDocumentCommand{\section}{s o m}{%
\IfBooleanTF{#1}
{{% \section*
\renewcommand{\refstepcounter}[1]{\phantomsection}% Gobble counter stepping
\renewcommand{\@seccntformat}[1]{}% Gobble section number formatting
\renewcommand{\addcontentsline}[3]{\oldaddcontentsline{toc}{section}{#3}}% Next entry _will_ be a section
\oldsection{#3}% \section*[.]{..}
}}{% \section
\IfNoValueTF{#2}
{\oldsection{#3}}% \section{..}
{\oldsection[#2]{#3}}% \section[.]{..}
}%
}
\makeatother
\begin{document}
\chapter{Chapter one}
References here:
ref: \ref{chap2} (chapter)
ref: \ref{chap2sec1} (section)
ref: \ref{chap2sec2} (star-section)
\chapter{Chapter two}\label{chap2}
...(contents of chapter 2)...
\section{Sec one}\label{chap2sec1}
...(contents of chapter 2 - section 1)...
\stepcounter{section}%
\section*{\thesection{} Sec two}\label{chap2sec2}
...(contents of chapter 2 - section 2)...
\end{document}
xparse
é usado para capturar facilmente os argumentos normalmente gerenciados por \section
(versão com estrela, argumentos opcionais e obrigatórios).
Quando \section*
é chamado, atualizamos três coisas típicas de \section*
:
O contra-passo
\refstepcounter
é transformado em ambiente autônomo;A macro de formatação do contador de seção
\@seccntformat
é convertida em um ambiente autônomo;A escrita relacionada ao conteúdo é atualizada para ser específica da entrada, evitando assim uma possível
\numberline
impressão.
Como \section
agora \section*
usamos o mesmo procedimento para imprimir o cabeçalho (ou seja \@sect
, internamente), os hiperlinks de saída saltam para o mesmo local vertical.
Seu exemplo é um pouco artificial, pois inclui um manual \refstepcounter
como parte da Seção 2.2. No entanto, não vejo nenhum problema com os saltos de hiperlink usando a versão atualizada \section
definida acima.