
Estoy usando el glossaries
paquete para manejar acrónimos y me encontré con la tarea de decidir automáticamente el uso de "a" o "an" delante de ellos.
\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}
¿Cómo puedo lograr que la segunda produzca "una SMA"? No me importa indicar una vez por cada acrónimosi necesita la "n" o nocuando se utiliza la forma corta.
Conozco el glossaries-prefix
paquete que permite definir prefijos para todos los diferentes casos (primer uso, plural, singular, etc.). Sin embargo, al usar este paquete, tendría que usar manualmente sus diferentes comandos ( \pgls
etc.) en lugar de los comandos cortos de acrónimo ( \ac
etc.).
¿Hay alguna manera de hacer esto automáticamente?
Respuesta1
He empezado a usar elacronym
paquete para este propósito. Eldocumentaciónmuestra que define los comandos \iac
(y \Iac
) que insertan automáticamente el artículo indefinido en su forma correcta, según corresponda.
Respuesta2
Quizás esto pueda ayudarte a empezar:
Supongo que la solución ideal sería un paquete enormemente complicado (como el reconocimiento de patrones de separación de palabras para varios idiomas) para reconocer a frente a etc. Dado que esto no está dentro de mis capacidades, aquí hay una propuesta.
Si su uso con los artículos es realmente primero = Artículo A y abreviaturas = Artículo B, entonces propondría agregar algunas claves a los glosarios y detectar si se ha usado el acrónimo o no para reconocer cuál de los artículos usar.
Nota: No agregué captura de errores al comando para reconocer cuando un usuario intentó usar la sustitución de artículo pero no la definí, pero sí definí el comando para que el usuario pueda pasar un artículo según sea necesario. un argumento opcional.
\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}