向首字母缩略词包添加一项功能

向首字母缩略词包添加一项功能

我正在尝试向首字母缩略词包中添加四个特定功能并将其插入 Overleaf:

  1. \acrounlisted- 创建一个未列出的首字母缩略词,它将被视为首字母缩略词(第一次使用时会定义它,然后再使用该首字母缩略词),但它不会出现在首字母缩略词列表中。
  2. \acfirstuc- 当且仅当定义中的第一个单词尚未使用时才将其大写 - 否则,它只是\ac
  3. \acalluc- 将完整定义中的每个单词都大写(例如,如果\ac{ods}扩展为“氧化物弥散强化(ODS)”,\acalluc则会扩展为“氧化物弥散强化(ODS)”)。
  4. \aclc- 将完整定义中的每个单词都小写(例如,如果\ac{ods}扩展为“氧化物弥散强化(ODS)”,则为\aclc{ods}“氧化物弥散强化(ods)”)。

我在论文中对此有具体的理由。我意识到未列出会导致在首字母缩略词和首字母缩略词列表之间生成的链接出现一些问题,因此可能也应该将其删除。

问题是我对 LaTeX 还不太熟悉,我尝试的任何方法都会不可挽回地破坏软件包。我正在使用acronym.styTDS 档案中的文件加拿大运输安全局,并使用\RequirePackage{}将重命名的版本引入.sty到我的项目的类文件中。我试图使用\lowercase\capitalizewordsmfirstuc。我不知道如何将第一个字母大写(如果太难的话,我会省略那个字母),或者如何正确实现这些。

有人愿意看一下并给我一些关于如何修改这个东西的指点吗?

答案1

以下是针对您列出的四个问题的解决方案。这些解决方案适用于无法或不愿意从该acronym软件包切换到该glossaries软件包的用户:

  1. 不要定义您不想在环境\acro{⟨acronym⟩}[⟨short name⟩]{⟨full name⟩}内部列出的缩写词,而是在环境外部acronym定义缩写词。无需新命令。\newacro{⟨acronym⟩}[⟨short name⟩]{⟨full name⟩}acronym

  2. 因为只有当首字母缩略词尚未被标记为已使用时才会自动打印定义(acronym软件包文档很好地解释了这些情况),所以您可以放心地使用\Ac在文档文本中打印首字母缩略词以获得所需的输出。如果首字母缩略词尚未被标记为已使用,则定义将以大写形式打印第一个单词的首字母;否则,如果已标记为已使用,则只会打印首字母缩略词而不打印其定义。无需新命令。

  3. 为了实现这一点,我更新了包定义的命令,acronym将定义的第一个字母大写,这样它就会将定义中每个单词的第一个字母大写。这需要我使用该mfirstuc包。然后我调用标准\Ac命令,以便它遵循包标准来打印完整或简短形式,以判断它是否已被使用。请参阅下面代码块中的解决方案。

  4. 为了实现这一点,我更新了包定义的命令,acronym将定义的第一个字母大写,这样整个定义就变成了小写。我还更新了命令\acsfont,将缩写形式变为小写,我需要将其重置为默认值。然后我调用了标准\Ac命令,这样它就会遵循包标准来打印完整或缩写形式,以判断是否已经使用过。请参阅下面代码块中的解决方案。

这是MWE:

\documentclass{article}
\usepackage{acronym}

\usepackage{mfirstuc}
\makeatletter
\DeclareRobustCommand{\acalluc}[1]{%
    \renewcommand{\@firstupper}[1]{\ecapitalisewords{##1}}%
    \Ac{#1}%
}
\DeclareRobustCommand{\aclc}[1]{%
    \renewcommand{\@firstupper}[1]{\expandafter\MakeLowercase\expandafter{##1}}%
    \renewcommand*{\acsfont}[1]{\MakeLowercase{##1}}%
    \Ac{#1}%
    \renewcommand*{\acsfont}[1]{##1}%
}
\makeatother

\begin{document}

\section{Acronyms}
\newacro{DNLM}{do not list me}
\begin{acronym}
\acro{ODS}{Oxide Dispersion Strengthened}
\acro{SOD}{strengthened oxide dispersion}
\end{acronym}

\section{Introduction}
\Ac{DNLM} is not really a good acronym.  I just used \ac{DNLM} for this example.

Sometimes, there is a need to print an acronym in Title Case, like \acalluc{SOD}.  Other times, the whole thing needs to be lowercase, as in \aclc{ODS}.
\acresetall

Then again, it might be sufficient to print them normally, as in \ac{ODS} and \ac{SOD}.  After they are marked as used, only the short form is printed, as in:
\begin{enumerate}
    \item \acalluc{SOD}
    \item \aclc{ODS}
    \item \ac{ODS}
    \item \ac{SOD}
\end{enumerate}

\end{document}

MWE 截图

相关内容