Fettgedruckte Unterabschnittsnummern mit Hyperref

Fettgedruckte Unterabschnittsnummern mit Hyperref

Wenn ich die amsart-Dokumentenklasse verwende und einen Unterabschnittstitel leer lasse, wird die Unterabschnittsnummer fett dargestellt. Minimales funktionierendes Beispiel:

\documentclass{amsart}
\begin{document}
\section{Test}
\subsection{} Text
\end{document}

Seltsamerweise werden die Unterabschnittsnummern nicht mehr fett dargestellt, wenn ich das Hyperref-Paket einbinde. MWE:

\documentclass{amsart}
\usepackage{hyperref}
\begin{document}
\section{Test}
\subsection{} Text
\end{document}

Gibt es eine Möglichkeit, Unterabschnittsnummern bei Verwendung von Hyperref fett darzustellen? Ich habe Angst, dass einige Funktionen von Hyperref nicht mehr funktionieren, wenn ich den Befehl \subsection nach dem Laden von Hyperref neu definiere.

Antwort1

Die amsartKlasse hat allerdings die Eigenschaft, dass wenn das Argument to \subsectionleer ist, die Zahl fett gedruckt wird, obwohl es sich normalerweise um eine mittlere Reihe handelt.

Mir persönlich gefällt diese Funktion überhaupt nicht. Was jedoch passiert, ist, dass der Code, \@sectder diese Aufgabe erledigt, (Zeilennummern beziehen sich auf amsart.cls) ist.

1055     \@ifempty{#8}{%
1056       \ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi}{}%

aber wenn hyperrefgeladen wird, #8ist das Argument

\Sectionformat{<title>}{2}

es ist also, soweit \@ifemptyes geht, nicht leer.

Hier ist ein Patch dafür.

\documentclass{amsart}

\usepackage{xpatch}
\usepackage{hyperref}

\makeatletter
% we need to patch the saved version of \@sect
\providecommand{\H@old@sect}{} % so this doesn't choke if hyperref is removed
\xpatchcmd{\H@old@sect}
  {\@ifnotempty{#8}}
  {\checkempty@title{#8}{}}
  {}{}
\xpatchcmd{\H@old@sect}
  {\@ifempty{#8}}
  {\checkempty@title{#8}}
  {}{}
\xpatchcmd{\H@old@sect}
  {\@ifempty{#8}}
  {\checkempty@title{#8}}
  {}{}
\def\checkempty@title#1{\checkempty@title@aux#1}
\def\checkempty@title@aux#1#2#3{\@ifempty{#2}}
\makeatother

\begin{document}
\section{Test}
\subsection{} Text
\end{document}

Bildbeschreibung hier eingeben

Eigentlich gibt esIstEin Fehler in amsart: Wenn Sie einen Unterabschnitt mit leerem Titel haben, werden alle nachfolgenden Abschnittsnummern fett gesetzt.

Um diesen Fehler zu beheben, sind noch ein paar Patches nötig:

\documentclass{amsart}

\usepackage{xpatch}
\usepackage{hyperref}

\makeatletter
% we need to patch the saved version of \@sect
\providecommand{\H@old@sect}{} % so this doesn't choke if hyperref is removed
\xpatchcmd{\H@old@sect}
  {\@ifnotempty{#8}}
  {\checkempty@title{#8}{}}
  {}{}
\xpatchcmd{\H@old@sect}
  {\@ifempty{#8}}
  {\checkempty@title{#8}}
  {}{}
\xpatchcmd{\H@old@sect}
  {\@ifempty{#8}}
  {\checkempty@title{#8}}
  {}{}
\xpatchcmd{\H@old@sect}
  {\def\@secnumfont}
  {\gdef\@secnumfont}
  {}{}
\def\checkempty@title#1{\checkempty@title@aux#1}
\def\checkempty@title@aux#1#2#3{\@ifempty{#2}}
% patch the bug of amsart
\xapptocmd{\@seccntformat}
  {\noexpand\reset@secnumfont}
  {}{}
\AtBeginDocument{%
  \edef\reset@secnumfont{%
    \gdef\noexpand\@secnumfont{\expandafter\noexpand\@secnumfont}%
  }%
}
\makeatother

\begin{document}

\section{Test}
\subsection{} Text

\section{Test}

\end{document}

Bildbeschreibung hier eingeben

Antwort2

Sie können angeben, dass die Abschnittsnummern fett dargestellt werden:

\documentclass{amsart}
\usepackage{hyperref}
\makeatletter
\def\@secnumfont{\bfseries}
\makeatletter

\begin{document}
\section{Test}

\subsection{} Text
\end{document}

Wenn Sie eine leere Überschrift angeben, wird leider die für den Überschriftentext angegebene Schriftart auf die Nummer angewendet. Sie sollten sich jedoch nicht auf diese Fehlfunktion verlassen, da sie behoben werden könnte.


eine leere Überschrift führt nicht nur dazu, dass die Überschrift fette Zahlen hat, sondern sie wirkt sich von diesem Punkt an auf alle Überschriften auf allen Ebenen aus.

\documentclass{amsart}
%\usepackage{hyperref}

\begin{document}
\section{Test}

\subsection{x} Text

\subsection{} Text

\subsection{} Text


\subsection{x} Text

\section{test2}

\end{document}

was macht

Bildbeschreibung hier eingeben


Dies behebt den Fehler, dass eine leere Überschrift die Schriftart aller folgenden Überschriften ändert, und holt die richtigen Schriftarten in Hyperref. Im Hyperref-Fall gibt es immer noch zusätzlichen horizontalen Platz

\documentclass{amsart}
\usepackage{hyperref}

\makeatletter
%\def\@secnumfont{\bfseries}

\def\@sect#1#2#3#4#5#6[#7]#8{%
  \edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}%
  \ifnum #2>\c@secnumdepth \let\@secnumber\@empty
  \else \@xp\let\@xp\@secnumber\csname the#1\endcsname\fi
  \@tempskipa #5\relax
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \edef\@secnumpunct{%
      \ifdim\@tempskipa>\z@ % not a run-in section heading
        \@ifnotempty{#8}{.\@nx\enspace}%
      \else
        \@ifempty{#8}{.}{.\@nx\enspace}%
      \fi
    }%
%%%%
    \def\zz{#8}%
    \def\tmp{\Sectionformat{}{2}}%
    \ifx\zz\tmp\def\zz{}\fi
    \let\zzz\@secnumfont
%%%%
    \expandafter\@ifempty\expandafter{\zz}{%
      \ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi}{}%
    \protected@edef\@svsec{%
      \ifnum#2<\@m
        \@ifundefined{#1name}{}{%
          \ignorespaces\csname #1name\endcsname\space
        }%
      \fi
      \@seccntformat{#1}%
    }%
     \let\@secnumfont\zzz
  \fi
  \ifdim \@tempskipa>\z@ % then this is not a run-in section heading
    \begingroup #6\relax
    \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty\@M #8\par}%
    \endgroup
    \ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi
  \else
  \def\@svsechd{#6\hskip #3\@svsec
    \expandafter\@ifnotempty\expandafter{\zz}{\ignorespaces#8\unskip
       \@addpunct.}%
    \ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi
  }%
  \fi
  \global\@nobreaktrue
  \@xsect{#5}%
}

\def\@seccntformat#1{%
  \protect\textup{\@secnumfont
    \csname the#1\endcsname
    \protect\@secnumpunct
  }%
}

\makeatletter


\begin{document}
\section{Test}

\subsection{x} Text

\subsection{} Text

\subsection{} Text


\subsection{x} Text

\section{test2}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen