考虑以下最小示例,旨在使用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!
当然,如果您有无标题的子图,您就不会将子标题放在图形列表中。