So setzen Sie einen Lesezeichenanker, sodass sich \section- und \section*-Lesezeichen gleich verhalten

So setzen Sie einen Lesezeichenanker, sodass sich \section- und \section*-Lesezeichen gleich verhalten

Wenn ich ein \sectionund \section*-Lesezeichen setze, verweist der Anker auf die beiden Abschnitte an einer anderen Stelle. Es wird ein kleiner vertikaler Abstand hinzugefügt \section*(siehe .png-files). Wie kann ich sicherstellen, dass der Anker an derselben Stelle platziert wird?

Ich brauche diese Lösung, da ich gerne eineListe der AnhängeLoA, wobei die Einträge nur in und nicht angezeigt werden müssen ToC, ich aber trotzdem die Abschnittsnummern im Text und benötige 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}

Normales Abschnittslesezeichen (\section) Lesezeichen mit Sternabschnitt (\Abschnitt*)

BEARBEITEN (1):Ich habe ein rotes Kästchen hinzugefügt, um den falschen Lesezeichenanker anzuzeigen \section*. Der Abstand zwischen den Abschnitten ist korrekt, nur die Ankereinstellungen sind falsch.

Antwort1

Sie können die Funktionsweise anpassen \sectionund dafür sorgen, dass sie sich, nur mit einigen geringfügigen Änderungen, \section*genauso verhält wie bisher:\section

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

xparsewird verwendet, um die Argumente einfach zu erfassen, die normalerweise von \section(mit Sternchen gekennzeichnete Version, optionale und obligatorische Argumente) verwaltet werden.

Wenn \section*aufgerufen wird, aktualisieren wir drei Dinge, die typisch für sind \section*:

  1. Der Gegenschritt \refstepcounterwird zu einer No-Op gemacht;

  2. Das Formatierungsmakro für den Abschnittszähler \@seccntformatwird in ein No-Op umgewandelt.

  3. Die inhaltsbezogene Schrift wird eingabebezogen aktualisiert und ein eventueller \numberlineAusdruck vermieden.

Da \sectionund \section*nun dasselbe Verfahren zum Drucken der Kopfzeile verwenden (nämlich \@sect, intern), springen die Ausgabe-Hyperlinks an die gleiche vertikale Position.

Ihr Beispiel ist etwas konstruiert, da es ein Handbuch \refstepcounterals Teil von Abschnitt 2.2 enthält. Ich sehe jedoch keine Probleme mit den Hyperlink-Sprüngen unter Verwendung der aktualisierten Version von \sectionoben definiert.

verwandte Informationen