
amsart 문서 클래스를 사용하고 하위 섹션 제목을 비워두면 하위 섹션 번호가 굵게 표시됩니다. 최소한의 작업 예:
\documentclass{amsart}
\begin{document}
\section{Test}
\subsection{} Text
\end{document}
이상하게도 hyperref 패키지를 포함하면 하위 섹션 번호가 더 이상 굵게 표시되지 않습니다. MWE:
\documentclass{amsart}
\usepackage{hyperref}
\begin{document}
\section{Test}
\subsection{} Text
\end{document}
하이퍼참조를 사용할 때 하위 섹션 번호를 굵게 표시할 수 있는 방법이 있나요? 하이퍼참조를 로드한 후 \subsection 명령을 다시 정의하면 하이퍼참조의 일부 기능이 손상될까 두렵습니다.
답변1
클래스 amsart
에는 실제로 인수가 \subsection
비어 있으면 숫자가 볼드체로 인쇄되는 기능이 있지만 일반적으로 중간 시리즈입니다.
개인적으로 이 기능을 별로 좋아하지 않습니다. 그러나 작업을 수행하는 코드는 다음과 같습니다 \@sect
(줄 번호 참조 amsart.cls
).
1055 \@ifempty{#8}{%
1056 \ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi}{}%
하지만 hyperref
로드되면 인수는 다음 #8
과 같습니다.
\Sectionformat{<title>}{2}
그래서 그것은 비어 있지 않습니다 \@ifempty
.
여기에 대한 패치가 있습니다.
\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}
사실 거기에는~이다버그 amsart
: 제목이 비어 있는 하위 섹션이 하나 있는 경우 이후의 모든 섹션 번호는 굵은 글꼴로 표시됩니다.
이 버그를 해결하려면 두 가지 패치가 더 필요합니다.
\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}
답변2
섹션 번호를 굵게 지정할 수 있습니다.
\documentclass{amsart}
\usepackage{hyperref}
\makeatletter
\def\@secnumfont{\bfseries}
\makeatletter
\begin{document}
\section{Test}
\subsection{} Text
\end{document}
빈 제목을 지정하면 제목 텍스트에 지정된 글꼴이 숫자에 적용되지만 잘못된 기능을 수정할 수 있으므로 의존해서는 안 됩니다.
빈 제목은 하나의 제목에 굵은 숫자를 갖게 하는 것이 아니라 그 시점부터 모든 수준의 모든 제목에 영향을 미칩니다.
\documentclass{amsart}
%\usepackage{hyperref}
\begin{document}
\section{Test}
\subsection{x} Text
\subsection{} Text
\subsection{} Text
\subsection{x} Text
\section{test2}
\end{document}
만드는
이는 빈 제목이 다음 모든 제목의 글꼴을 변경하는 버그를 수정하고 하이퍼참조에서 올바른 글꼴을 가져오지만 여전히 하이퍼참조의 경우 추가 가로 공간이 있습니다.
\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}