Обновлять

Обновлять

Я использую 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}

mwe_вывод

Моя первая идея была в том, что в той же строке, в которой 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}

Связанный контент