我正在尝试将首字母缩略词的全部首字母大写。我有这个首字母缩略词:
\usepackage[acronym]{glossaries}
\newacronym{wt}{WT}{wild type}
使用\gls{wt}
会按预期生成野生类型 (WT)。
但是尝试使用\MakeUppercase{\gls{wt}}
会失败,因为没有 WT 的词汇表条目。因此,它只是将\gls
命令中的内容大写。
我试过了MakeUppercase{\expandafter{\gls{wt}}
但这不起作用它只是抛出 \reserved@a 的参数有一个额外的 }
我也尝试过,\edef\mycommand{\gls{wt}}\MakeUppercase{\mycommand}
但结果是一样的。
所以问题是,如何让 \gls{wt} 在传递给 \MakeUppercase 之前完全展开
答案1
所以问题是如何
\gls{wt}
在传递给 \MakeUppercase 之前完全展开
你不能。因为\gls
它不是一个完全可扩展的命令。
为了防止参数错误地大写,wt
您可以加载包文本大小写使用overload
-option:
该软件包附带了命令\MakeTextUppercase
和 ,它们的作用与和\MakeTextLowercase
相同。 但有一个特点:宏的参数不会改变。- 选项使等于和等于。\MakeUppercase
\MakeLowerCase
\NoCaseChange
overload
\MakeUppercase
\MakeTextUppercase
\Makelowercase
\MakeTextLowercase
使用\NoCaseChange
可以防止参数错误地大写wt
。
这只解决了部分问题。获取\gls
大写结果的问题仍然没有解决。您需要“手动”决定是否使用\gls
或\GLS
或\Gls
。
例如,你可以这样做:
\documentclass[12pt,oneside,a4paper]{article}
\usepackage[overload]{textcase}
\usepackage[acronym]{glossaries}
\newacronym{wt}{WT}{wild type}
\begin{document}
\glsreset{wt}
\verb|\MakeUppercase{uppercase. \NoCaseChange{\GLS{wt}} uppercase}|:\\
First use: \MakeUppercase{uppercase. \NoCaseChange{\GLS{wt}} uppercase}\\
Second use: \MakeUppercase{uppercase. \NoCaseChange{\GLS{wt}} uppercase}
\glsreset{wt}
\verb|\MakeLowercase{LOWERCASE. \NoCaseChange{\GLS{wt}} LOWERCASE}|:\\
First use: \MakeLowercase{LOWERCASE. \NoCaseChange{\GLS{wt}} LOWERCASE}\\
Second use: \MakeLowercase{LOWERCASE. \NoCaseChange{\GLS{wt}} LOWERCASE}
\glsreset{wt}
\verb|\MakeUppercase{uppercase. \NoCaseChange{\Gls{wt}} uppercase}|:\\
First use: \MakeUppercase{uppercase. \NoCaseChange{\Gls{wt}} uppercase}\\
Second use: \MakeUppercase{uppercase. \NoCaseChange{\Gls{wt}} uppercase}
\glsreset{wt}
\verb|\MakeLowercase{LOWERCASE. \NoCaseChange{\Gls{wt}} LOWERCASE}|:\\
First use: \MakeLowercase{LOWERCASE. \NoCaseChange{\Gls{wt}} LOWERCASE}\\
Second use: \MakeLowercase{LOWERCASE. \NoCaseChange{\Gls{wt}} LOWERCASE}
\glsreset{wt}
\verb|\MakeUppercase{uppercase. \NoCaseChange{\gls{wt}} uppercase}|:\\
First use: \MakeUppercase{uppercase. \NoCaseChange{\gls{wt}} uppercase}\\
Second use: \MakeUppercase{uppercase. \NoCaseChange{\gls{wt}} uppercase}
\glsreset{wt}
\verb|\MakeLowercase{LOWERCASE. \NoCaseChange{\gls{wt}} LOWERCASE}|:\\
First use: \MakeLowercase{LOWERCASE. \NoCaseChange{\gls{wt}} LOWERCASE}\\
Second use: \MakeLowercase{LOWERCASE. \NoCaseChange{\gls{wt}} LOWERCASE}
\end{document}