我已经制作了以下宏来生成自定义缩写。
\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
。参数必须在模式中分隔,以便\def
LaTeX 知道哪些是参数的一部分,哪些不是(在下面的代码中|
用作分隔符)。不需要组。为简单起见,我已将其实现为始终定义常规复数,并且如果提供了参数,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}
结果: