我想将扩展宏中的第一个字母转换为大写,但我似乎无法做到这一点。在下面的最小示例中,我希望两行产生相同的输出,即第一个字母大写,但第二行的所有字母均为小写。
\documentclass[a4paper, 10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[printonlyused]{acronym}
\usepackage{etoolbox}
%%% Begin document
\begin{document}
\begin{acronym}
\acro{rms}{root mean square}
\end{acronym}
\section{Text}
\MakeUppercase root mean square (\acs{rms})
\expandafter\MakeUppercase\expandafter\empty\ac{rms}
\end{document}
我该如何解决这个问题?
编辑:
看来这个最小示例太小了。建议的解决方案不适用于文档的其余部分。这是一个更完整的最小示例。
\documentclass[a4paper, 10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage{acronym}
\usepackage{etoolbox}
\newif\ifAcUpper
\AcUpperfalse
\makeatletter
\patchcmd{\AC@@acro}{] #3}{] \expandafter\MakeUppercase #3}{}{}
\patchcmd{\AC@@acro}{] #3}{] \expandafter\MakeUppercase #3}{}{}
\makeatother
\newif\ifACR
\ACRfalse
\makeatletter
\newcommand{\acx}{\protect\@acx}%
\newcommand{\@acx}[1]{%
\ifAC@dua
\acl{#1}%
\else
\expandafter\ifx\csname ac@#1\endcsname\AC@used
\acs{#1}%
\else
\acl{#1}%
\fi
\fi
}
\newcommand{\acy}{\protect\@acy}%
\newcommand{\@acy}[1]{%
\ifACR
\acl{#1}%
\else
\acf{#1}
\fi
}
\newcommand{\dac}{\protect\@dac}%
\newcommand{\@dac}[1]{%
\ifAC@dua
the \acl{#1}%
\else
\expandafter\ifx\csname ac@#1\endcsname\AC@used
\acs{#1}%
\else
the \acf{#1}%
\fi
\fi
}
\newcommand{\Dac}{\protect\@Dac}%
\newcommand{\@Dac}[1]{%
\ifAC@dua
The \acl{#1}%
\else
\expandafter\ifx\csname ac@#1\endcsname\AC@used
\acs{#1}%
\else
The \acf{#1}%
\fi
\fi
}
\newcommand{\Ac}{\@Ac}%
\newcommand{\@Ac}[1]{%
\ifAC@dua
\acl{#1}%
\else
\expandafter\ifx\csname ac@#1\endcsname\AC@used
\acs{#1}%
\else
\expandafter\MakeUppercase\expandafter\empty\ac{#1}
\fi
\fi
}
\makeatother
%%% Begin document
\begin{document}
\begin{acronym}
\ACRtrue
\acro{dc}[DC]{Direct Current}
\acro{pu}[p.u.]{per unit}
\acro{rms}[rms]{root-mean-square}
\acro{b}[$B$]{magnetic flux density}
\acro{hor}[$H$]{horizontal component of the \acx{b}}
\acro{d}[$D$]{electric displacement of \acx{b}}
\acro{h}[$H$]{magnetic field intensity}
\acro{rdc}[$R_{DC}$]{\acy{dc} resistance}
\acro{phi}[$\phi$]{magnetic flux}
\acro{sbase}[$S_{base}$]{\acy{pu} power base}
\acro{ubase}[$U_{base}$]{\acy{pu} voltage base}
\acro{phibase}[$\Phi_{base}$]{\acy{pu} \acx{phi} base}
\acro{udc}[$U_{DC}$]{\acy{dc} voltage}
\acro{idc}[$I_{DC}$]{\acy{dc} current}
\ACRfalse
\end{acronym}
\section{Text}
\MakeUppercase root mean square (\acs{rms})
\Ac{rms}
\end{document}
输出如下
我希望\Ac
命令生成以大写字母开头的一行,并且列表中的所有描述都执行相同的操作。
答案1
您需要将大写字母插入到 的结果中\ac
,但\ac
无法通过扩展来实现,因此\expandafter
没有帮助。(如果它通过扩展起作用,那么当它传递\empty
给 时,您的表达式仍然是错误的\MakeUppercase
)
\documentclass[a4paper, 10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[printonlyused]{acronym}
\usepackage{etoolbox}
%%% Begin document
\begin{document}
\DeclareRobustCommand\zz[1]{#1}
\begin{acronym}
\acro{rms}{\zz{r}oot mean square}
\end{acronym}
\section{Text}
\MakeUppercase root mean square (\acs{rms})
%\expandafter\MakeUppercase\expandafter\empty\ac{rms}
{\renewcommand\zz{\MakeUppercase}\ac{rms}}
\end{document}