Elsevier cas-sc 模板:图形标题无法居中

Elsevier cas-sc 模板:图形标题无法居中

我正在使用 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

该类alignfiguretable环境提供了一个选项,用于设置两个都图形/表格的内容和标题的位置。但是,这不起作用,因为标题排版在\parbox宽度等于选项值的位置width,并且\parbox文本默认对齐。正确的方法是将对齐方式里面\parbox

有三种(不太老套的)方法可以得到你想要的东西。第一种(稍微不那么老套)是使用将包含标题的align=\centering居中,并使用使的宽度恰到好处。这需要大量手动调整才能获得正确的值。对于您的示例,这似乎是一个很好的猜测:\parboxwidth=<width-of-the-typeset-caption>\parboxwidth3cm

\begin{figure}[pos=htbp,width=3cm,align=\centering]

第二种方法(有点老套,取决于的实现细节els-cas)是使用的伪钩子align重新定义在标题中使用时\@parboxrestore进行注入。为此,您需要定义:\centeringcas-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}

相关内容