我正在尝试将所有图表和表格的图例中的字体大小设置得更小。我尝试使用 \AtBeginEnvironment 来实现这一点,但似乎没有任何效果。这是一个失败的简单示例:
\documentclass[a4paper, 12pt]{report}
\usepackage{etoolbox}
\usepackage{relsize}
\AtBeginEnvironment{figure}{\smaller}
\begin{document}
\begin{figure}
\caption{whatever}
Text
\end{figure}
Outside text
\end{document}
现在,我认为应该使“文本”看起来比“外部文本”小,就像将其放在\smaller
图形环境中一样。但事实并非如此。我尝试使用 floatrow 包,但它会弄乱图形标题和图例文本的顺序,并且\captionsetup
只会改变标题本身而不会改变图例文本。
有什么帮助吗?为什么不起作用\AtBeginEnvironment
?
答案1
环境所做的最后一件事figure
是发出内部命令,\@floatboxreset
其定义是
\def\@floatboxreset{%
\reset@font
\normalsize
\@setminipage
}
这就是为什么\smaller
声明没有效果,因为中的标记\AtBeginEnvironment
更早被发现。
你应该改变\@floatboxreset
\makeatletter
\AtBeginEnvironment{figure}{%
\def\@floatboxreset{\reset@font\small\@setminipage}%
}
\makeatother
该变化不会泄漏到环境之外。
如果您正在使用setspace
,则应该做更多的事情,因为软件包补丁\@xfloat
会再次发布\normalsize
,在我看来,这是一个错误,这就\selectfont
足够了。
\documentclass[a4paper, 12pt]{report}
\usepackage{etoolbox}
\usepackage{setspace}
\makeatletter
\AtBeginEnvironment{figure}{%
\def\@floatboxreset{\reset@font\small\@setminipage}%
}
\patchcmd{\@xfloat}{\normalsize}{\selectfont}{}{}
\makeatother
\begin{document}
\begin{figure}
\caption{whatever}
Text
\end{figure}
Outside text
\end{document}
答案2
一种方法可能是重新声明@makecaption
命令。
首先,我们定义标题(图形或表格)的字体和大小以及标题文本的字体。然后\@makecaption
重写:
\documentclass[]{article}
\usepackage{mwe}
\usepackage{graphicx}
\newcommand*{\textCapTitFont}[1]{\textbf{#1}}
\newcommand*{\Captionfont}{\small\sffamily}
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovedisplayskip\Captionfont%
\setbox\@tempboxa\hbox{\textCapTitFont{#1}~~#2}%
\ifdim \wd\@tempboxa > \hsize
\textCapTitFont{#1}~~#2\par
\else
\hbox to \hsize{\hfill\box\@tempboxa\hfill}%
\fi
\vskip\belowcaptionskip}
\makeatother
\begin{document}
Some normal text, not beeing in a caption, just to compare
\begin{figure}\centering
\includegraphics[width=0.5\linewidth]{example-image-a}
\caption{This is an explanation \ldots}
\end{figure}
\end{document}
看起来像这样: