Números de subsección en negrita con hiperreferencia

Números de subsección en negrita con hiperreferencia

Cuando uso la clase de documento amsart y dejo el título de una subsección vacío, el número de la subsección aparece en negrita. Ejemplo de trabajo mínimo:

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

Curiosamente, cuando incluyo el paquete hyperref, los números de las subsecciones ya no aparecen en negrita. MWE:

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

¿Hay alguna manera de hacer que los números de las subsecciones aparezcan en negrita cuando uso hiperreferencia? Tengo miedo de romper algunas de las funciones de hyperref si redefino el comando \subsection después de cargar hyperref.

Respuesta1

De hecho, la amsartclase tiene la característica de que si el argumento to \subsectionestá vacío, entonces el número se imprime en negrita, mientras que normalmente es una serie mediana.

Personalmente, no me gusta esta característica en absoluto. Sin embargo, lo que sucede es que el código \@sectque hace el trabajo es (los números de línea se refieren a amsart.cls)

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

pero cuando hyperrefse carga, el argumento #8es

\Sectionformat{<title>}{2}

por lo que no está vacío en lo que \@ifemptya él respecta.

Aquí hay un parche para ello.

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

ingrese la descripción de la imagen aquí

En realidad, hayesun error en amsart: si tiene una subsección con un título vacío, todos los números de sección posteriores están escritos en negrita.

Para solucionar este error se necesitan otro par de parches:

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

ingrese la descripción de la imagen aquí

Respuesta2

Puede especificar que los números de sección estén en negrita:

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

\begin{document}
\section{Test}

\subsection{} Text
\end{document}

Si especifica un encabezado vacío, desafortunadamente la fuente especificada para el texto del encabezado se aplica al número; sin embargo, no debe confiar en esa característica errónea, ya que podría solucionarse.


un título vacío no sólo hace que el título tenga números en negrita, sino que afecta a todos los títulos en todos los niveles a partir de ese momento, considere

\documentclass{amsart}
%\usepackage{hyperref}

\begin{document}
\section{Test}

\subsection{x} Text

\subsection{} Text

\subsection{} Text


\subsection{x} Text

\section{test2}

\end{document}

que hace

ingrese la descripción de la imagen aquí


esto corrige el error con un título vacío cambiando la fuente de todos los títulos siguientes y obtiene las fuentes correctas en hiperref, todavía tiene espacio horizontal adicional en el caso de hiperref

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

ingrese la descripción de la imagen aquí

información relacionada