回忆录中的子图空白标题略有错位

回忆录中的子图空白标题略有错位

考虑以下最小示例,旨在使用memoir文档类来说明带有子图的单个图形:

\documentclass{memoir}
\newsubfloat{figure}% Allow for subfloats (subfigures) within figure environment
\begin{document}
\begin{figure}
  \centering
  \subbottom[]{\rule{2pt}{3em}\quad\rule{2pt}{3em}\quad\rule{2pt}{3em}}%
  \caption{This is a caption}
\end{figure}
\end{document}

子图的标题为空,因此它仅显示子图计数器 - 在本例中为“(a)”:

回忆录类中的带子图的图形

但是,子图标签没有像我希望的那样完全居中,标题为空。将子图定义(通过 使用一些负间距$\!\!$)更改为

\documentclass{memoir}
\newsubfloat{figure}% Allow for subfloats (subfigures) within figure environment
\begin{document}
\begin{figure}
  \centering
  \subbottom[$\!\!$]{\rule{2pt}{3em}\quad\rule{2pt}{3em}\quad\rule{2pt}{3em}}%
  \caption{This is a caption}
\end{figure}
\end{document}

而是产生一个更可接受的空子图标题,无论差异有多小:

回忆录类中的带子图的图形

这是一个已知的错误吗?或者至少可以修复吗?

答案1

标签在子标题前留有空格;如果没有子标题,则需要将其删除。

\makeatletter
\def\@memsubfig[#1]{%
  \@ifnextchar [%
    {\@memsubfloat{sub\@captype}[#1]}%
    {\@memsubfloat{sub\@captype}[\@empty #1][#1\unskip]}}
\makeatother

一些解释

\subbottom 的完整语法是

\subbottom[A][B]{<figure code>}

其中 A 是图形(表格)列表的条目,B 是子标题(它们可能不同,就像图形和表格的标题一样)。当 B 未表达时,假定它与 A 相同。如果 A 也缺失,则不设置子标题,甚至不设置字母。

控制权实际上被传递给其他一些宏,并最终\@memsubfig在 A 存在时被调用(它将#1在代码中被替换)。此宏检查是否有另一个可选参数。如果有,那么

\@memsubfloat{subfigure}[A][B]

将被评估,否则 LaTeX 将面临

\@memsubfloat{subfigure}[\@empty A][A]

(注意:我们假设处理的是图形;对于表格,\@captype将是table。)这是原始定义。按照我的定义,我们将得到

\@memsubfloat{subfigure}[\@empty A][A\unskip]

\@empty出于技术原因,这并不重要,因为这是辅助文件中要写的内容。的任务\@memsubfloat也是排版子标题,它基本上

(a)\space A\unskip

其中“a”是“数字”(不\unskip存在回忆录的定义);如果现在 A 为空,就像你的情况一样, 将\unskip杀死\space,否则它什么也不做。Bingo!

当然,如果您有无标题的子图,您就不会将子标题放在图形列表中。

相关内容