程序包 subfig 干扰了程序包 caption 的标题设置

程序包 subfig 干扰了程序包 caption 的标题设置

考虑这个例子,它被确定为删除标题中的冒号

\documentclass{report}
%\usepackage{subfig}                                                                                                                                                                                        
\usepackage{graphicx}
\usepackage[latvian]{babel}
\usepackage{caption}
\captionsetup[figure]{labelsep=space}
\addto\captionslatvian{\renewcommand{\figurename}{att.}}
\begin{document}
\begin{figure}
  \includegraphics{example-image-a}
  \caption{Case of A.}
\end{figure}
\end{document}

命令

\captionsetup[figure]{labelsep=space}

一旦线路失败

%\usepackage{subfig}

被取消注释,即分隔符再次变为:。如何解决?

答案1

重新latvian.ldf定义\@makecaption。因此在 babel 之后加载 subfig(您不需要加载 caption,subfig 会执行此操作):

\documentclass{report}

\usepackage{graphicx}

\usepackage[latvian]{babel}
\usepackage{subfig}

\captionsetup{labelsep=space}
\addto\captionslatvian{\renewcommand{\figurename}{att.}}
\begin{document}
\begin{figure}\tracingmacros=1
  \includegraphics{example-image-a}
  \caption{Case of A.}
\end{figure}
\end{document}

在此处输入图片描述

答案2

您可以使用子图和保存框轻松替换 \subfloat。诚然,此版本未实现列表选项,但可以使用 xparse 或 来实现\@ifnextchar[

\documentclass{report}
\usepackage{graphicx}
\usepackage[latvian]{babel}
\usepackage{subcaption}
\captionsetup[figure]{labelsep=space}
\addto\captionslatvian{\renewcommand{\figurename}{att.}}

\newcommand{\subfloat}[2][\empty]% #1=caption (optional), #2=body
{\bgroup
  \sbox0{#2}% measure image
  \begin{subfigure}[b]{\wd0}
    \usebox0
    \ifx\empty#1\relax
    \else\caption{#1}
    \fi
  \end{subfigure}
\egroup}

\begin{document}
\begin{figure}
\subfloat[Case of A.]{\includegraphics{example-image-a}}
\end{figure}
\end{document}

相关内容