Como definir a âncora do marcador para que \section- e \section*-bookmark se comportem da mesma forma

Como definir a âncora do marcador para que \section- e \section*-bookmark se comportem da mesma forma

Se eu fizer um marcador \sectione \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 LoAe 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}

Marcador de seção normal (\section) Marcador de seção em estrela (\section*)

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 \sectionfunciona 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*:

  1. O contra-passo \refstepcounteré transformado em ambiente autônomo;

  2. A macro de formatação do contador de seção \@seccntformaté convertida em um ambiente autônomo;

  3. A escrita relacionada ao conteúdo é atualizada para ser específica da entrada, evitando assim uma possível \numberlineimpressão.

Como \sectionagora \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 \refstepcountercomo parte da Seção 2.2. No entanto, não vejo nenhum problema com os saltos de hiperlink usando a versão atualizada \sectiondefinida acima.

informação relacionada