回忆录子浮动与展示键之间的冲突

回忆录子浮动与展示键之间的冲突

以下操作完美:

\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\endinputshowkeys.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

相关内容