使用 acro 包时图形标题中的首字母缩略词出现问题

使用 acro 包时图形标题中的首字母缩略词出现问题

我正在使用acro包来管理首字母缩略词。我已经\ac{ }在图片标题中使用了该命令,但是,在图中\appendix,在以下配置下(参见下面的 MWE),即使第一次调用首字母缩略词,它也不会以长格式出现。我该如何解决?

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{acro}
\usepackage{blindtext}
\usepackage{setspace}
\DeclareAcronym{PVC}{
short=PVC,
long=Poli Vinil Chloride
}
\begin{document}
\onehalfspacing
\blindtext
\clearpage
\pagebreak
%
\appendix
\begin{center}
\vspace*{\fill}
\section*{Supplementar Files}
\vspace*{\fill}
\end{center}
\clearpage
\pagebreak
%%
\singlespacing
\section{Test}\label{sec:Esquemas-Filtros}
\acresetall
\begin{figure}[htb]
\centering
Dummy text
\caption{Some caption text to ilustrate the problem \ac{PVC}}
\label{fig:label}
\end{figure}
%
\clearpage
\pagebreak
\end{document}

在此处输入图片描述

答案1

根据@clemens的评论进行编辑:

如果您将您的更改\ac{PVC}为,\acf{PVC}您将获得与我的以下代码相同的结果(针对此特定示例)。但也许有一天我们会从一个新的更好的答案中学到更多...

旧答案:

您可以重新定义声明首字母缩写词命令来保存全名(我\ACROfull{}对每个 ACRO 都这样称呼它,并使用它来代替 ac)

在任何首字母缩略词声明之前放置此代码:

\let\oldDeclareAcronym=\DeclareAcronym
\def\saveac#1{\xdef\temp{\acl{#1} (\acs{#1})}\global\expandafter\let\csname#1full\endcsname\temp}
\long\def\DeclareAcronym#1#2{\oldDeclareAcronym{#1}{#2}\saveac{#1}}

然后,您可以在标题中调用\PVCfull{}而不是\ac{PVC},它将打印\ac{PVC}与标题相同的内容。

据我尝试理解,出于某种原因,标题禁止在其环境中扩展首字母缩略词。

当然,你也可以直接在标题里写:\acl{#1} (\acs{#1})而不是上述所有声明和重新声明。

答案2

问题在于,article根据标题的长度,排版方式会有所不同。如果标题长度超过一行,则排版方式会横跨整个长度,否则会居中。为此,首先将标题放在一个框内:

\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#1: #2}%
  \ifdim \wd\@tempboxa >\hsize
    #1: #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip}

这意味着如果首字母缩略词第一次在框 ( \sbox\@tempboxa{#1: #2}) 内使用,并且其宽度超出,\hsize那么当标题排版时 ( #1: #2\par),首字母缩略词将不再使用!更糟糕的是:标题甚至可能不再长!\hsize以下文档演示了这一点:

\documentclass[12pt,a4paper]{article}
\usepackage{acro}

\DeclareAcronym{PVC}{
  short = PVC,
  long = Poli Vinil Chloride
}

\usepackage{showframe}

\begin{document}

\begin{figure}[h]
  \caption{Some caption text to illustrate the problem \ac{PVC}}
\end{figure}
\acresetall

\begin{figure}[h]
  \caption{\ac{PVC}}
\end{figure}

\end{document}

在此处输入图片描述

只要你不使用任何重新定义的包\@makecaption并且坚持使用article类,我们就可以修改我们自己的定义\@makecaption

\documentclass[12pt,a4paper]{article}
\usepackage{acro}

\DeclareAcronym{PVC}{
  short = PVC,
  long = Poli Vinil Chloride
}

\makeatletter
\renewcommand\@makecaption[2]{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{\acswitchoff#1: #2}% <<<<<
  \ifdim \wd\@tempboxa >\hsize
    #1: #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil#1: #2\hfil}% <<<<<
  \fi
  \vskip\belowcaptionskip}
\makeatother

\usepackage{showframe}

\begin{document}

\begin{figure}[h]
  \caption{Some caption text to illustrate the problem \ac{PVC}}
\end{figure}
\acresetall

\begin{figure}[h]
  \caption{\ac{PVC}}
\end{figure}

\end{document}

在此处输入图片描述

相关内容