当我尝试使用该类和子标题包编译文档时memoir
出现以下错误:
!包
subcaption
错误:此包不能与该subfig
包配合使用。
我推测这是因为该类memoir
加载了subfig
包。对吗?
有没有办法让它们一起工作?
答案1
subfig
和包subcaption
不能相互配合使用。相反,您可以使用caption
with 包subfig
来为标题和子标题添加一些趣味(或者您可以caption
与 with 一起使用subcaption
(它还会提供 subfigure 命令)。
\documentclass{memoir}
\usepackage[demo]{graphicx} % remove [demo] in your file
\usepackage{subfig} % for subfigures
\usepackage{caption}
\usepackage{lipsum}
\captionsetup[figure]{labelfont={bf,small},textfont={it,small}}
\captionsetup[subfloat]{labelfont={bf,small},textfont={it,small},
subrefformat=parens} %<-----designing subcaption
\newcommand{\myfigref}[2]{~\ref{#1}.\subref{#2}}% <---- a new macro for referring to a subfigure
%
\begin{document}
%=========================
\chapter{First chapter}
\lipsum[1-4]
%=========================
\begin{figure}[ht]
\includegraphics[width=1\textwidth]{my figure}
\caption{My single picture}\label{fig:figures}
\end{figure}
%=========================
\begin{figure}[ht]
\centering
\subfloat[My first picture]{\label{fig:mdleft}{\includegraphics[width=0.4\textwidth]{my figure}}}\hfill
\subfloat[My second picture]{\label{fig:mdright}{\includegraphics[width=0.4\textwidth]{my figure}}}
\caption{My two big pictures}
\label{fig:subfigures}
\end{figure}
%===========================
From figure~\ref{fig:subfigures}.\subref{fig:mdleft}, we can see a small cat, in
\myfigref{fig:subfigures}{fig:mdright} both can be used to refer figures.
\end{document}
答案2
正如 Mike Renfro 在他的评论中所说,memoir
已经包含对子图和子标题的支持,无需加载包subfig
和caption
。使用下一个代码,您将重现 Harish 的结果。
\documentclass{memoir}
\usepackage[demo]{graphicx} % remove [demo] in your file
\usepackage{lipsum}
% You need a newsubfloat element to use subcaption
\newsubfloat{figure}
% Command to set caption styles
\captionnamefont{\bfseries\small}
\captiontitlefont{\itshape\small}
\subcaptionlabelfont{\bfseries\small}
\subcaptionfont{\itshape\small}
%
\begin{document}
%=========================
\chapter{First chapter}
\lipsum[1-4]
%=========================
\begin{figure}[ht]
\includegraphics[width=1\textwidth]{my figure}
\caption{My single picture}\label{fig:figures}
\end{figure}
%=========================
\begin{figure}[ht]
\centering
\subbottom[My first picture\label{fig:mdleft}]%
{\includegraphics[width=0.4\textwidth]{my figure}}\hfill
\subbottom[My second picture\label{fig:mdright}]%
{\includegraphics[width=0.4\textwidth]{my figure}}
\caption{My two big pictures}
\label{fig:subfigures}
\end{figure}
%===========================
%In next paragraph look at differences between \ref{subfigurelabel},
%\subcaptionref{subfigurelabel} and \subcaptionref*{subfigurelabel}
%
In figure~\ref{fig:subfigures} we can see a small cat
(\ref{fig:mdleft} or \subcaptionref*{fig:mdleft}) and
something else in \ref{fig:mdright} or \subcaptionref{fig:mdright}.
\end{document}
\newsubloat{figure}
声明一个新的子浮点元素,允许使用\subbottom
命令。现在\ref{subfigurelabel}
等于“1.2(a)”,而\subcaptionref{subfigurelabel}
等于“(a)”(带字体属性),并且未记录的 \subcaptionref*
将子标签重置为正常字体。
答案3
不幸的是,错误消息具有误导性(*),并且memoir
文档类还不能与我的subcaption
包一起使用。
但你可以给予
\let\subcaption\relax
\let\subfloat\relax
尝试一下,只需在加载subcaption
包之前放置此代码。
也可以看看:带有 subcaption 和 hyperref 包的 memoir 类
(*)我刚刚改变了这一点,所以在未来的版本中,人们将会收到错误消息“检测到不兼容的文档类或包”。