Estoy usando el acronym
paquete en LaTeX. Por razones de estilo y claridad, quiero que cada letra correspondiente en la descripción completa del acrónimo esté subrayada (ver MWE). Esto funciona bien excepto en un caso de uso, es decir, cuando necesito poner en mayúscula el acrónimo al comienzo de una oración usando \Ac{}
. Parece que, debido al \underline{}
comando, la primera letra del acrónimo no se reconoce y, por lo tanto, no se escribe en mayúscula. Para mayor claridad, estoy buscando una solución que utilice el acronym
paquete (no el glossaries
paquete, por ejemplo), ya que estoy obligado a utilizar una plantilla proporcionada por mi universidad. ¿Alguien tiene alguna solución? Cualquier ayuda sería apreciada. ¡Salud!
MWE:
\documentclass{article}
\usepackage{acronym}
\begin{document}
\Ac{DoS} attacks should be capitalized but it is not. \Ac{w.r.t.} without the underline works fine.
\begin{acronym}
\acro{DoS}{\underline{d}enial-\underline{o}f-\underline{s}ervice}%
\acro{w.r.t.}{with respect to}%
\end{acronym}
\end{document}
Mi primera idea fue que, en la misma línea en la que el acronym
paquete te permite declarar una versión plural personalizada de un acrónimo, podría definir una versión personalizada en mayúscula de cada acrónimo, pero no encontré ninguna forma estándar de hacerlo. Creo que también sería una opción redefinir el \Ac{}
comando de manera que pueda "revisar" cualquier estilo, pero tengo poco conocimiento de LateX para lograr tal hazaña.
Respuesta1
Actualizar
La respuesta original funciona con TeX Live 2022, pero como lo mencionan Bart Wolleswinkel y Dai Bowen en los comentarios: no funciona con TeX Live 2023. La razón es que la definición de \MakeUppercase
ha cambiado. Este comando se utiliza en la definición del comando \@firstupper
definido por el paquete acronym
.
Una solución es redefinir el comando \@firstupper
a utilizar \text_titlecase_first:n
.
Además, en la respuesta a continuación, \acrounderline
se define un comando. Esto subrayará la primera letra y la primera letra después de cada una -
en el segundo argumento antes de pasar esto a \acro
.
\documentclass[border=6pt,varwidth]{standalone}
\usepackage{acronym}
\ExplSyntaxOn
\makeatletter
\renewcommand { \@firstupper } [1] { \text_titlecase_first:n {#1} }
\makeatother
\tl_new:N \l__BartWolleswinkel_acro_underline_tl
\newcommand { \acrounderline } [2]
{
\tl_set:Nn \l__BartWolleswinkel_acro_underline_tl {#2}
\tl_replace_all:Nnn \l__BartWolleswinkel_acro_underline_tl { - } { - \underline }
\tl_put_left:Nn \l__BartWolleswinkel_acro_underline_tl { \underline }
\acro {#1} { \l__BartWolleswinkel_acro_underline_tl }
}
\ExplSyntaxOff
\begin{document}
\Ac{DoS} is capitalized without braces around \verb|\underline{d}|.
\Ac{w.r.t.} works.
\Ac{DoS2} works as well and also works with for example \verb|\textbf| if there is a pair of braces around it.
\begin{acronym}
\acro{DoS}{\underline{d}enial-\underline{o}f-\underline{s}ervice}%
\acro{w.r.t.}{with respect to}%
\acrounderline{DoS2}{denial-of-service-{\textbf{2}}}%
\end{acronym}
\end{document}
Respuesta original
Una solución es utilizar un par extra de tirantes: {\underline{d}}
.
\documentclass[border=6pt,varwidth]{standalone}
\usepackage{acronym}
\begin{document}
\Ac{DoS} attacks should be capitalized but it is not. \Ac{w.r.t.} without the underline works fine.
\begin{acronym}
\acro{DoS}{{\underline{d}}enial-\underline{o}f-\underline{s}ervice}%
\acro{w.r.t.}{with respect to}%
\end{acronym}
\end{document}