Cómo configurar el ancla de marcador para que \section- y \section*-bookmark se comporten igual

Cómo configurar el ancla de marcador para que \section- y \section*-bookmark se comporten igual

Si hago un marcador \sectiony \section*, el ancla apunta a las dos secciones en un lugar diferente. Se agrega un pequeño espacio vertical \section*(ver .pngarchivos). ¿Cómo puedo asegurarme de que el ancla esté colocada en el mismo lugar?

Necesito esta solución ya que me gustaría hacer unLista de apendices, donde las entradas solo deben mostrarse en LoAy no ToC, pero aún necesito los números de sección en el texto y 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 sección normal (\sección) Marcador de sección de estrella (\section*)

EDITAR (1):Agregué un cuadro rojo para mostrar el ancla de marcador incorrecta para \section*. El espacio entre las secciones es correcto, lo único que está mal es la configuración del anclaje.

Respuesta1

Puedes ajustar la forma en \sectionque funciona y hacer que \section*actúe de la misma manera \section, solo con algunas modificaciones menores:

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

xparsese utiliza para capturar fácilmente los argumentos que normalmente administra \section(argumentos de versión destacada, opcionales y obligatorios).

Cuando \section*se llama, actualizamos tres cosas que son típicas de \section*:

  1. El paso en contra \refstepcounterse convierte en una opción no operativa;

  2. La macro de formato del contador de secciones \@seccntformatse convierte en no operativa;

  3. La redacción relacionada con los contenidos se actualiza para que sea específica de la entrada, evitando así una posible \numberlineimpresión.

Desde \sectiony \section*ahora utilizamos el mismo procedimiento para imprimir el encabezado (es decir \@sect, internamente), los hipervínculos de salida saltan a la misma ubicación vertical.

Su ejemplo es ligeramente artificial ya que incluye un manual \refstepcountercomo parte de la Sección 2.2. Sin embargo, no veo ningún problema con los saltos de hipervínculo utilizando la versión actualizada \sectiondefinida anteriormente.

información relacionada