
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 amsart
Klasse hat allerdings die Eigenschaft, dass wenn das Argument to \subsection
leer 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, \@sect
der diese Aufgabe erledigt, (Zeilennummern beziehen sich auf amsart.cls
) ist.
1055 \@ifempty{#8}{%
1056 \ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi}{}%
aber wenn hyperref
geladen wird, #8
ist das Argument
\Sectionformat{<title>}{2}
es ist also, soweit \@ifempty
es 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}
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}
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
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}