
Я использую glossaries
пакет для обработки аббревиатур и столкнулся с задачей автоматического определения использования «a» или «an» перед ними.
\documentclass{scrbook}
\usepackage{hyperref}
\usepackage[toc,acronym,nopostdot,nomain,style=alttree,shortcuts]{glossaries}
\setacronymstyle{long-sc-short}
\makeglossaries
\newacronym{sma}{sma}{SubMiniature version A}
\begin{document}
a \ac{sma}\\ % gives "a SubMiniature version A (SMA)"
a \ac{sma} % gives "a SMA"
\end{document}
Как мне добиться, чтобы второй выводил "SMA"? Я не против указать один раз для каждой аббревиатурынужна ли ему буква "н" или нетпри использовании краткой формы.
Я знаю о glossaries-prefix
пакете, который позволяет определять префиксы для всех различных случаев (первое использование, множественное число, единственное число и т. д.). Однако, используя этот пакет, мне пришлось бы вручную использовать его различные команды ( \pgls
и т. д.) вместо коротких команд аббревиатуры ( \ac
и т. д.).
Есть ли способ сделать это автоматически?
решение1
Я начал использоватьacronym
Пакет для этой цели.документацияпоказывает, что он определяет команды \iac
(и \Iac
), которые автоматически вставляют неопределенный артикль в правильной форме, если это необходимо.
решение2
Возможно, это поможет вам начать:
Я предполагаю, что идеальным решением был бы чрезвычайно сложный пакет (вроде распознавания шаблонов переносов для различных языков) для распознавания a и an и т. д. Поскольку это не в моих силах, вот предложение.
Если вы действительно используете артикли первыми = Статья А, а аббревиатуры = Статья Б, то я бы предложил добавить несколько ключей к глоссариям и определять, использовалась ли аббревиатура или нет, чтобы распознавать, какие из артиклей использовать.
Примечание: я не добавил в команду перехват ошибок, чтобы распознавать случаи, когда пользователь пытается использовать подстановку артикля, но не определил ее, но я определил команду так, чтобы пользователь мог передавать артикль по мере необходимости в качестве необязательного аргумента.
\documentclass{scrbook}
\usepackage{hyperref}
\usepackage{xparse}
\usepackage[toc,acronym,nopostdot,nomain,style=alttree,shortcuts]{glossaries}
\setacronymstyle{long-sc-short}
\glsaddkey
{article-abrv} % new key
{\relax} % default value if "article-abrv" isn't used in \newglossaryentry
{\glsentryArtA} % analogous to \glsentrytext
{\GlsentryArtA} % analogous to \Glsentrytext
{\glsArtA} % analogous to \glstext
{\GlsArtA} % analogous to \Glstext
{\GLSArtA} % analogous to \GLStext
\glsaddkey
{article-long} % new key
{\relax} % default value if "article-long" isn't used in \newglossaryentry
{\glsentryArtL} % analogous to \glsentrytext
{\GlsentryArtL} % analogous to \Glsentrytext
{\glsArtL} % analogous to \glstext
{\GlsArtL} % analogous to \Glstext
{\GLSArtL} % analogous to \GLStext
\DeclareDocumentCommand{\aac}{o m}{%
\IfValueTF{#1}{%
\ifglsused{\glsentryshort{#2}}%
{\glsdisp{#2}{#1~\ac{#2}}}%TRUE
{\glsdisp{#2}{#1~\ac{#2}}}%FALSE
}{%
\ifglsused{\glsentryshort{#2}}%
{\glsdisp{#2}{\glsArtA{#2}~\ac{#2}}}%TRUE
{\glsdisp{#2}{\glsArtL{#2}~\ac{#2}}}%FALSE
}%
}
\DeclareDocumentCommand{\Aac}{o m}{%
\IfValueTF{#1}{%
\ifglsused{\glsentryshort{#2}}%
{\glsdisp{#2}{#1~\ac{#2}}}%TRUE
{\glsdisp{#2}{#1~\ac{#2}}}%FALSE
}{%
\ifglsused{\glsentryshort{#2}}%
{\glsdisp{#2}{\GlsArtA{#2}~\ac{#2}}}%TRUE
{\glsdisp{#2}{\GlsArtL{#2}~\ac{#2}}}%FALSE
}%
}
\makeglossaries
\newacronym[article-abrv={an},article-long={a}]{sma}{sma}{SubMiniature version A}
\newacronym{uv}{UV}{Ultraviolet}
\begin{document}
\Aac{sma}
\Aac{sma}
Lowercase example: \aac{sma}
Override example: \aac[the]{sma}
%\Aac{uv}% code has no error trapping to let you use \aac as a replacement to \ac
\end{document}