Si hago un marcador \section
y \section*
, el ancla apunta a las dos secciones en un lugar diferente. Se agrega un pequeño espacio vertical \section*
(ver .png
archivos). ¿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 LoA
y 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}
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 \section
que 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}
xparse
se 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*
:
El paso en contra
\refstepcounter
se convierte en una opción no operativa;La macro de formato del contador de secciones
\@seccntformat
se convierte en no operativa;La redacción relacionada con los contenidos se actualiza para que sea específica de la entrada, evitando así una posible
\numberline
impresión.
Desde \section
y \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 \refstepcounter
como 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 \section
definida anteriormente.