以下操作完美:
\documentclass{memoir}
\usepackage{showkeys}
\usepackage{graphicx}
\newsubfloat{figure}
\begin{document}
\begin{figure}[htbp]
\centering
\subbottom[A\label{fig:A}]
{\includegraphics[width = 0.4\textwidth]{example-image-a}}
\hfill
\subbottom[B\label{fig:B}]
{\includegraphics[width = 0.4\textwidth]{example-image-b}}
\end{figure}
\end{document}
但是,如果我添加该[final]
选项,标签将打印在每个子图的标题中,并且我会收到错误消息,提示\sf@@memsub@label@hook
未定义。类文件memoir.cls
包含以下代码片段:
\@ifpackageloaded{showkeys}{%
\renewcommand\sf@@memsub@label@hook[1]{%
\SK@\SK@@label{#1}%
}
}{}
显然,memoir
对该showkeys
包做了一些改动,但这些改动不适用于[final]
。
我发现了一个关于showkeys、subfloats 和 bookmark 之间的冲突,但那里建议的补丁并不能解决我的问题。
答案1
包final
的选项在将任何内容读入样式文件之前会调用它。以下是 的顶部,其中标记了有问题的行:showkeys
\endinput
showkeys.sty
(*)
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{showkeys}
[1997/06/12 v3.12 Show cite and label keys (DPC)]
\DeclareOption{notref}{\let\SK@ref\@empty}
\DeclareOption{notcite}{\let\SK@cite\@empty}
\let\SK@refcolor\relax
\let\SK@labelcolor\relax
\DeclareOption{color}{\AtEndOfPackage{%
\RequirePackage{color}%
\definecolor{refkey}{gray}{.75}%
\definecolor{labelkey}{gray}{.75}%
\def\SK@refcolor{\color{refkey}}%
\def\SK@labelcolor{\color{labelkey}}}}
\DeclareOption{final}{\endinput} <--------------------- (*)
\DeclareOption{draft}{}
\ProcessOptions
因此,showkeys
使用final
选项加载会抑制 的所有行为showkeys
。实际上,包会加载,但方式完全是空洞的。然后,memoir
这里会让人困惑:
\@ifpackageloaded{showkeys}{%
\renewcommand\sf@@memsub@label@hook[1]{%
\SK@\SK@@label{#1}%
}
}{}
因为从\@ifpackageloaded{showkeys}
技术上来说是正确的,但 showkeys
没有定义任何东西。
简单的解决方案(除了修改showkeys
或添加修复程序memoir
(可能在适当的时候发生))是注释掉该行
\usepackage{showkeys}
当您不再需要它时,可以从 TeX 文件中移除它。这对您的文件的影响实际上与使用该final
选项相同,只不过\@ifpackageloaded{showkeys}
现在将是false
。