How to capitalize the first letter for EACH word in a glossary using the glossaries-extra
package?
I came across this thread but it uses the glossaries
package.
I also tried \glsentrytitlecase{<label>}{long}
but it didn't
- make the glossary hyperlinked
- include the glossary in the parentheses at the end, e.g., (ESs) in the MWE below
Basically, what I want is similar to \Gls
but make capitalize the first letter for EACH word instead of the first word only.
MWE:
\documentclass[a4paper,12pt]{article}
\usepackage[acronym]{glossaries-extra}
\setabbreviationstyle[acronym]{long}
\newacronym
[
description={Evolutionary Strategies},
longplural={evolutionary strategies}
]
{es}{ES}{evolutionary strategy}
\makeglossaries
\begin{document}
\printglossary[type=acronym,title={List of Acronyms}]
\glsentrytitlecase{es}{long}.
\glspl{es}.
\Glspl{es}.
\glsentrytitlecase{es}{longpl}.
\end{document}
Update:
\documentclass[a4paper,12pt]{article}
\usepackage[acronym,automake]{glossaries-extra}
\makeatletter
\newrobustcmd*{\myGls}{\@gls@hyp@opt\@myGls}
\newcommand*{\@myGls}[2][]{%
\new@ifnextchar[{\@myGls@{#1}{#2}}{\@myGls@{#1}{#2}[]}%
}
\def\@myGls@#1#2[#3]{%
\glsdoifexists{#2}%
{%
\let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
\let\glsifplural\@secondoftwo
\let\glscapscase\@secondofthree
\def\glscustomtext{%
{%
\ecapitalisewords{\glsentrylong{#2}}#3\space%
\firstacronymfont(\glsentryshort{#2})}%
}
\def\glsinsert{#3}%
\def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
\@gls@link[#1]{#2}{\@glo@text}%
\ifKV@glslink@local
\glslocalunset{#2}%
\else
\glsunset{#2}%
\fi
}%
\glspostlinkhook
}
\newrobustcmd*{\myGlspl}{\@gls@hyp@opt\@myGlspl}
\newcommand*{\@myGlspl}[2][]{%
\new@ifnextchar[{\@myGlspl@{#1}{#2}}{\@myGlspl@{#1}{#2}[]}%
}
\def\@myGlspl@#1#2[#3]{%
\glsdoifexists{#2}%
{%
\let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
\let\glsifplural\@firstoftwo
\let\glscapscase\@secondofthree
\def\glscustomtext{%
{%
\ecapitalisewords{\glsentrylongpl{#2}}#3\space%
\firstacronymfont(\glsentryshortpl{#2})}%
}
\def\glsinsert{#3}%
\def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
\@gls@link[#1]{#2}{\@glo@text}%
\ifKV@glslink@local
\glslocalunset{#2}%
\else
\glsunset{#2}%
\fi
}%
\glspostlinkhook
}
\makeatother
\setabbreviationstyle[acronym]{long}
\newacronym
[
description=Evolutionary Strategy,
longplural=evolutionary strategies
]
{es}{ES}{evolutionary strategy}
\makeglossaries
\begin{document}
\printglossary[type=acronym,title={List of Acronyms}]
textbf{Singular:}
blablbla \gls{es}.
blablbla \glsxtrfull{es}.
blablbla \Gls{es}.
blablbla \Glsxtrfull{es}.
blablbla \myGls{es}.
blablbla \glsentrytitlecase{es}{long}.
\vspace*{1cm}
\textbf{Plural:}
blablbla \glspl{es}.
blablbla \glsxtrfullpl{es}.
blablbla \Glspl{es}.
blablbla \Glsxtrfullpl{es}.
blablbla \myGlspl{es}.
blablbla \glsentrytitlecase{es}{longpl}.
\end{document}
Best Answer
This is the solution. Notice the comments in the code. If you wanna the second use to display the short form, uncomment those comments. Otherwise it will always display the full form. Add
\myGlspl
to deal with plural form.