子图子标题标签与 KOMAScript 和彩色标签的间距错误

子图子标题标签与 KOMAScript 和彩色标签的间距错误

我发现该包生成的子标题标签存在问题subfig。标签和标题之间的距离是错误的,但只有当我更改颜色\addtokomafont并且颜色是我更改的最后一个参数时才会出现这种情况。以下是代码:

\documentclass{scrbook}

\usepackage[colorlinks=true]{hyperref}
\usepackage{subfig}
\addtokomafont{captionlabel}{\sffamily\color{blue}}
%\addtokomafont{captionlabel}{\color{blue}\sffamily}

\begin{document}
\begin{figure}
    \center
    \subfloat[][Test.]{\rule{2cm}{2cm}}
    \quad
    \subfloat[][Test.]{\rule{3cm}{2cm}}
    \caption{foo}
\end{figure}
\end{document}

结果:

显示问题的图片。

(使用标准字体时,这一点并不像我的字体选择那样明显,因此仅供说明:在图片中,“(a)”和“Test.”之间缺少一个空格字符,“(b)”也是如此)由于用字体选择交换颜色选择已经是一种解决方法(请参阅代码中的注释行),我没有遇到特别的问题,但我对它为什么会这样表现很感兴趣。此外,也许其他人通过仅选择一种颜色来观察问题,而这不会导致他们找到解决方法。因此,我要求澄清一下该机制以及是否可以普遍解决它。

因为我认为这是一个错误,但涉及几个包(hyperref,KOMAscript,subfig),我应该将错误报告发送给谁?

答案1

subfig包加载caption,因此最好使用该包的功能。

\documentclass{scrbook}

\usepackage{xcolor}
\usepackage{subfig}

\DeclareCaptionLabelFormat{bluesf}{\sffamily\color{blue}#1 #2}
\DeclareCaptionLabelFormat{subbluesf}{\sffamily\color{blue}(#2)}
\DeclareCaptionLabelSeparator{bluecolon}{\sffamily\color{blue}: }
\captionsetup{labelformat=bluesf,labelsep=bluecolon}
\captionsetup[subfloat]{labelformat=subbluesf}

\begin{document}
\begin{figure}
    \centering
    \subfloat[][Test.]{\rule{2cm}{2cm}}
    \quad
    \subfloat[][Test.]{\rule{3cm}{2cm}}
    \caption{foo}
\end{figure}
\end{document}

请注意,这\centering是正确的命令。

在此处输入图片描述

但是,subfig的表现很糟糕hyperref,所以您可能需要考虑subcaption

\documentclass{scrbook}

\usepackage{xcolor}
\usepackage{subcaption}

\DeclareCaptionLabelFormat{bluesf}{\sffamily\color{blue}#1 #2}
\DeclareCaptionLabelFormat{subbluesf}{\sffamily\color{blue}(#2)}
\DeclareCaptionLabelSeparator{bluecolon}{\sffamily\color{blue}: }
\captionsetup{labelformat=bluesf,labelsep=bluecolon}
\captionsetup[subfigure]{labelformat=subbluesf}

\begin{document}
\begin{figure}
\centering

\subcaptionbox{Test.}{\rule{2cm}{2cm}}
\quad
\subcaptionbox{Test.}{\rule{3cm}{2cm}}

\caption{foo}
\end{figure}
\end{document}

输出完全相同。

答案2

问题中已经给出了解决方法。如果颜色选择是唯一要实现的功能,则可以使用不会导致外观改变的命令。例如,\color{blue}\null在这种情况下有效,或者可能更好\color{blue}{}(一个空组)。

相关内容