Я использую acronym
пакет в LaTeX. По стилистическим причинам и для ясности я хочу, чтобы каждая соответствующая буква в полном описании аббревиатуры была подчеркнута (см. MWE). Это работает отлично, за исключением одного случая использования, а именно, когда мне нужно сделать аббревиатуру заглавной в начале предложения с помощью \Ac{}
. Похоже, что из-за \underline{}
команды первая буква аббревиатуры не распознается и, таким образом, не становится заглавной. Для ясности я ищу решение, которое использует пакет acronym
(не glossaries
пакет, например), поскольку я обязан использовать шаблон, предоставленный моим университетом. Есть ли у кого-нибудь решение? Любая помощь будет оценена по достоинству. Ура!
МВЭ:
\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}
Моя первая идея была в том, что в той же строке, в которой acronym
пакет позволяет вам объявлять пользовательскую версию множественного числа акронима, я мог бы определить пользовательскую версию с заглавной буквы для каждой аббревиатуры, но я не нашел стандартного способа сделать это. Переопределение команды \Ac{}
таким образом, чтобы она могла «просматривать» любой стиль, также было бы вариантом, я думаю, но у меня слишком мало знаний о LateX, чтобы совершить такой подвиг.
решение1
Обновлять
Оригинальный ответ работает с TeX Live 2022, но, как отметили Барт Воллесвинкель и Дай Боуэн в комментариях: он не работает с TeX Live 2023. Причина в том, что определение \MakeUppercase
изменилось. Эта команда используется в определении команды, \@firstupper
которая определена пакетом acronym
.
Решением является переопределение команды \@firstupper
для использования \text_titlecase_first:n
.
Более того, в ответе ниже определена команда \acrounderline
. Она подчеркнет первую букву и первую букву после каждой -
во втором аргументе перед передачей этого в \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}
Оригинальный ответ
Решением является использование дополнительной пары подтяжек: {\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}