我正在使用 Elsevier 的 cas-sc.cls
。图片的标题是左对齐的,但我希望标题与图片下方的中心对齐。我尝试\captionsetup{justification=centering}
与包一起使用\usepackage{caption}
,但似乎不起作用。这是一个 MWE:
\documentclass[a4paper,fleqn]{cas-sc}
\usepackage{graphicx}
\usepackage{caption}
\begin{document}
\begin{figure}[pos=htbp]
\centering
\captionsetup{justification=centering}
\includegraphics[width=0.5\textwidth]{example-image-a}
\caption{My caption.}
\label{FIG}
\end{figure}
\end{document}
请帮忙。
答案1
该类align
为figure
和table
环境提供了一个选项,用于设置两个都图形/表格的内容和标题的位置。但是,这不起作用,因为标题排版在\parbox
宽度等于选项值的位置width
,并且\parbox
文本默认对齐。正确的方法是将对齐方式里面这\parbox
。
有三种(不太老套的)方法可以得到你想要的东西。第一种(稍微不那么老套)是使用将包含标题的align=\centering
居中,并使用使的宽度恰到好处。这需要大量手动调整才能获得正确的值。对于您的示例,这似乎是一个很好的猜测:\parbox
width=<width-of-the-typeset-caption>
\parbox
width
3cm
\begin{figure}[pos=htbp,width=3cm,align=\centering]
第二种方法(有点老套,取决于的实现细节els-cas
)是使用的伪钩子align
重新定义在标题中使用时\@parboxrestore
进行注入。为此,您需要定义:\centering
cas-sc
\makeatletter
\def\redefparbox{\def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr
\if@minipage\expandafter\@gobbletwo\fi
\@firstofone{\centering\casscparboxtest}}}
\def\casscparboxtest#1{%
\ifx\rightskip#1\relax\expandafter\dimen@\else
\expandafter\@secondoftwo
\fi\@gobble{#1}}
\makeatother
然后使用:
\begin{figure}[pos=htbp,align=\redefparbox]
第三种方法(同样很老套,也取决于实现,而且政治上不正确)就是重新定义\__make_fig_caption:nn
以将其放在align
正确的位置:
% -----------
% Definition for the third way:
\ExplSyntaxOn
% For `figure`:
\cs_gset_protected:Npn \__make_fig_caption:nn #1#2
{
\skip_vertical:N \l_fig_abovecap_skip
\parbox { \dim_eval:n { \l_fig_width_dim } }
{
\tl_use:N \l_fig_align_tl
\sffamily \small \textbf{\color{scolor}#1:}~#2\par
}
\skip_vertical:N \l_fig_belowcap_skip
}
% For `table`:
\cs_gset_protected:Npn \__make_tbl_caption:nn #1#2
{
\skip_vertical:N \l_tbl_abovecap_skip
\parbox{ \dim_eval:n { \l_tbl_width_dim } }
{
\tl_use:N \l_tbl_align_tl
\sffamily \small \textbf{\color{scolor}#1}\par#2\par\vskip4pt
}
\skip_vertical:N \l_tbl_belowcap_skip
}
\ExplSyntaxOff
% -----------
以下是标记了三个选项的 MWE:
\documentclass[a4paper,fleqn]{cas-sc}
\usepackage{natbib}
\usepackage{graphicx}
% -----------
% Definition for the second way:
\makeatletter
\def\redefparbox{\def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr
\if@minipage\expandafter\@gobbletwo\fi
\@firstofone{\centering\casscparboxtest}}}
\def\casscparboxtest#1{%
\ifx\rightskip#1\relax\expandafter\dimen@\else
\expandafter\@secondoftwo
\fi\@gobble{#1}}
\makeatother
% -----------
% -----------
% Definition for the third way:
\ExplSyntaxOn
% For `figure`:
\cs_gset_protected:Npn \__make_fig_caption:nn #1#2
{
\skip_vertical:N \l_fig_abovecap_skip
\parbox { \dim_eval:n { \l_fig_width_dim } }
{
\tl_use:N \l_fig_align_tl
\sffamily \small \textbf{\color{scolor}#1:}~#2\par
}
\skip_vertical:N \l_fig_belowcap_skip
}
% For `table`:
\cs_gset_protected:Npn \__make_tbl_caption:nn #1#2
{
\skip_vertical:N \l_tbl_abovecap_skip
\parbox{ \dim_eval:n { \l_tbl_width_dim } }
{
\tl_use:N \l_tbl_align_tl
\sffamily \small \textbf{\color{scolor}#1}\par#2\par\vskip4pt
}
\skip_vertical:N \l_tbl_belowcap_skip
}
\ExplSyntaxOff
% -----------
\begin{document}
% \begin{figure}[pos=htbp,width=3cm,align=\centering] % First way
% \begin{figure}[pos=htbp,align=\redefparbox] % Second way
\begin{figure}[pos=htbp,align=\centering] % Third way
\centering
\includegraphics[width=0.5\textwidth]{example-image-a}
\caption{My caption.}
\label{FIG}
\end{figure}
\end{document}