输出中需要的部分可选内容

输出中需要的部分可选内容

我已经制作了以下宏来生成自定义缩写。

\documentclass{book}

\usepackage{ifthen}

\makeatletter
\def\Option#1=#2\relax{\bgroup
  \ifthenelse{\equal{#1}{longplural}}{#2}{}
        \egroup}
\def\myacronym#1{
  \@ifnextchar[%]
    {\@myacronym{#1}}%
    {\@myacronyma{#1}}%
}
\newcommand\@myacronyma[3]{%
\newcounter{#1}%
\expandafter\edef\csname#2long\endcsname{#3 (#2)}%
\expandafter\edef\csname#2longprl\endcsname{#3s (#2s)}%
}
\newcommand\@myacronym[4][]{%
\newcounter{#2}%
\expandafter\expandafter\expandafter\Option{#1}\relax
\expandafter\edef\csname#2short\endcsname{#2}%
\expandafter\edef\csname#2shortprl\endcsname{#2s}%
\expandafter\edef\csname#2long\endcsname{#3 (#2)}%
\expandafter\edef\csname#2longprl\endcsname{#3s (#2s)}%
}%

\def\anpl#1{
\stepcounter{#1}%
\ifnum\csname the#1\endcsname>1%
\csname#1shortprl\endcsname%
\else%
\csname#1longprl\endcsname%
\fi}%

\makeatother

\myacronym[longplural=Hindustan Libraries]{hl}{HLB}{Hindustan Library}
\myacronym{flp}{floppy}{floppy desk}

\begin{document}

\chapter{Sample Title}%\label{ch01}


\anpl{hl} \anpl{flp}

\end{document}

要求:当我们调用时,\anpl{hl}输出需要呈现为“Hindustan Libraries”,然后\anpl{flp}在输出末尾添加默认复数 s(即)“软盘桌”。我收到以下错误消息。

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.39 \myacronym[lon
                   gplural=Hindustan Libraries]{hl}{HLB}{Hindustan Library}

您能否提供建议。如何处理此类情况。提前感谢您的帮助。

答案1

请注意,有更简单、更强大的方法来处理一般的首字母缩略词,也可以使用自定义复数形式的短形式和长形式,例如使用包glossaries(参见,例如,使用词汇表自定义首字母缩略词的复数形式)。此外,如果您选择使用自己的实现,那么还有一些软件包可以让您更轻松地使用键值选项。

但是,当一些语法问题得到解决后,提供的代码可以修改并运行。大多数修改都涉及简化代码。

首先检查是否提供了可选参数\def。检查时不需要提供参数本身,命令名称将根据进行替换\ifnextchar,并且所有参数都将附加到替换中。

接下来是\edef命令(扩展的定义):定义不需要扩展,但它们需要是全局的,即\gdef

最后是参数处理的实现longplural。参数必须在模式中分隔,以便\defLaTeX 知道哪些是参数的一部分,哪些不是(在下面的代码中|用作分隔符)。不需要组。为简单起见,我已将其实现为始终定义常规复数,并且如果提供了参数,longplural则使用提供的参数重新定义复数。

在代码中,还添加了常规复数的其余定义。我更改了以下示例软盘压缩碟片因为 floppy 本身有不规则复数(floppies)。

代码:

\documentclass{book}

\usepackage{ifthen}

\makeatletter
\def\Option|#1=#2|#3|#4|{\ifthenelse{\equal{#1}{longplural}}%
{\expandafter\gdef\csname#3longprl\endcsname{#2 (#4s)}}{}%
}
\def\myacronym{
  \@ifnextchar[
    \@myacronym%
    \@myacronyma%
}
\newcommand\@myacronyma[3]{%
\newcounter{#1}%
\expandafter\gdef\csname#1long\endcsname{#3 (#2)}%
\expandafter\gdef\csname#1longprl\endcsname{#3s (#2s)}%
\expandafter\gdef\csname#2short\endcsname{#3}%
\expandafter\gdef\csname#2shortprl\endcsname{#2s}%
}
\newcommand\@myacronym[4][]{%
\newcounter{#2}%
\expandafter\gdef\csname#2longprl\endcsname{#4s (#3s)}%
\Option|#1|#2|#3|%
\expandafter\gdef\csname#2short\endcsname{#3}%
\expandafter\gdef\csname#2shortprl\endcsname{#3s}%
\expandafter\gdef\csname#2long\endcsname{#4 (#3)}%
}%

\def\anpl#1{
\stepcounter{#1}%
\ifnum\csname the#1\endcsname>1%
\csname#1shortprl\endcsname%
\else%
\csname#1longprl\endcsname%
\fi}%

\makeatother

\begin{document}

\myacronym[longplural=Hindustan Libraries]{hl}{HLB}{Hindustan Library}
\myacronym{cd}{cd}{compact disc}

\chapter{Sample Title}

\anpl{hl}\\
\anpl{cd}\\
\anpl{hl}\\
\anpl{cd}\\

\end{document}

结果:

在此处输入图片描述

相关内容