Titelfall ein Akronym

Titelfall ein Akronym

Manchmal möchte ich in meinem Dokument ein Akronym verwenden. Manchmal möchte ich, dass das Akronym in Groß- und Kleinschreibung erscheint (zum Beispiel, wenn es in einem Titel vorkommt).*

*Ich brauche, dass dies in allen Umgebungen funktioniert, nicht unbedingt in Titeln.

Varianten dieser Frage wurden auf der gesamten Site gestellt, aber keine der vorgeschlagenen Lösungen funktioniert wirklich. Das am nächsten kommende Beispiel wäre eines, das erfordern würde, dass ich meine gesamte Glossardatei neu schreibe, was ich aber nicht tun möchte, da sie von anderen Dokumenten und anderen Personen gemeinsam genutzt wird.

Drei vorgeschlagene Lösungen verwenden Titlecaps, Mfirstuc und Stringstrings, allerdings funktioniert keine davon mit Akronymen.

\documentclass{article}
\usepackage{glossaries}
\usepackage{titlecaps}
\usepackage{mfirstuc}
\usepackage{stringstrings}

\newacronym{srs}{SRS}{spaced repetition system}

\begin{document}
  \titlecap{\gls{srs}}
  \capitalisewords{\gls{srs}}
  \capitalizetitle{\gls{srs}}
\end{document} 

Wie kann ich den ersten Buchstaben eines Akronyms groß schreiben, ohne mein Glossar ändern zu müssen und vorzugsweise ohne einen riesigen Haufen undurchdringlichen Code in meine Tex-Datei einzufügen?Manchmal?

BEARBEITEN: Der Klarheit halber suche ich nach einer Möglichkeit , Spaced Repetition Systemund nicht Spaced repetition systemoder zu erhalten SPACED REPETITION SYSTEM.

Antwort1

\capitialisewordsfunktioniert, indem es \makefirstucauf jedes durch Leerzeichen getrennte Element seines Arguments angewendet wird. Im Fall von \capitalisewords{\gls{src}}gibt es keine Leerzeichen im Argument, also wird einfach ausgeführt \makefirstuc{\gls{src}}.

\makefirstucwendet bei der Entscheidung, wie die Groß-/Kleinschreibung geändert werden soll, eine Reihe von Regeln an:

  1. Wenn das Argument mit einem Befehl beginnt und auf diesen Befehl ein Argument folgt, wird die Großschreibung auf das erste Objekt des inneren Arguments angewendet.
  2. Wenn das Argument mit einem Befehl beginnt und auf diesen Befehl kein Argument folgt, wird die Großschreibung auf den Befehl angewendet (es sei denn, der Befehl ist \protect; in diesem Fall wird er verworfen und die Regeln werden erneut angewendet).
  3. Wenn das Argument nicht mit einem Befehl beginnt, wird die Großschreibung auf das erste Objekt im Befehl angewendet.

Beispiele:

  • \makefirstuc{\emph{word}}wird \emph{\uppercase word}(erster Fall)
  • \makefirstuc{\oe-ligature}wird \uppercase\oe-ligature(zweiter Fall)
  • \makefirstuc{word}wird\uppercase word

(Der verwendete Großbuchstabenbefehl ist tatsächlich , was als oder \mfirstucMakeUppercasedefiniert werden kann .)\MakeUppercase\MakeTextUppercase

Fällt also \makefirstuc{\gls{src}}unter den ersten Fall. Das bedeutet, dass es versucht, zu tun \gls{\uppercase src}. Das heißt, es versucht, den Fall desEtikett.

Wenn der eigentliche Text, bei dem die Groß-/Kleinschreibung geändert werden muss, im Argument von \makefirstuc(oder \capitialisewords) versteckt ist, kann auf den ersten Buchstaben nicht zugegriffen werden. Da \glsrobust ist, kann es nicht einmal erweitert werden, bevor es als Argument übergeben wird. Aus diesem Grund glossariesstellt das Paket bereit \Gls, da die Groß-/Kleinschreibung tief im Inneren des Befehls geändert werden muss.

Ich weiß nicht, wie ähnliche Pakete mit dem Vorhandensein von Formatierungsbefehlen (wie z. B. \emph) innerhalb des Textes umgehen, bei denen die Groß-/Kleinschreibung geändert werden muss, aber keines davon kann auf den Text zugreifen, wenn dieser in einen robusten Befehl eingebettet ist.

Die einzige Lösung besteht hier in der Verwendung eines dererweiterbarBefehle wie diese:

\documentclass{article}

\usepackage{glossaries}

\newacronym{srs}{SRS}{spaced repetition system}

\begin{document}
  \ecapitalisewords{\glsentrylong{srs}}
\end{document}

Dies funktioniert eigentlich besser bei Seitenüberschriften, da Sie wahrscheinlich nicht möchten, dass jede Seitenüberschrift zur Standortliste für den Eintrag hinzugefügt wird, was jedoch passieren kann, wenn Sie sie \glsin einer Abschnitts- oder Kapitelüberschrift verwenden. (SieheWarum sollte ich Befehle wie \gls nicht in \section, \chapter, \caption usw. verwenden?)

Sie können natürlich einen benutzerdefinierten Befehl definieren, beispielsweise:

\newcommand*{\TCac}[1]{\ecapitalisewords{\glsentrylong{#1}}}

oder (Index und Hyperlink)

\newcommand*{\iTCac}[2][]{\glsdisp[#1]{#2}{\ecapitalisewords{\glsentrylong{#2}}}}

Bearbeiten:

Seien Sie vorsichtig bei der Verwendung \ecapitialisewords,völligerweitert das Argument, was zu unerwarteten Ergebnissen führen kann, wenn der Text Befehle enthält. Beispiel:

\documentclass{article}

\usepackage{xcolor}
\usepackage{glossaries}

\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

\newacronym{srs}{SRS}{\strong{spaced} repetition system}

\newcommand*{\TCac}[1]{\ecapitalisewords{\glsentrylong{#1}}}

\begin{document}

\TCac{srs}.

\end{document}

Dies sieht oberflächlich betrachtet wie Fall 1 mit aus \strong{spaced}, aber die vollständige Erweiterung bedeutet, dass es jetzt versucht,

\capitialisewords{\protect\leavevmode{\protect\color{red}\protect\textbf{spaced}}  repetition system}

Dies folgt nun den Regeln: verwerfen Sie das ursprüngliche \protect, dann wenden Sie Fall 1 an, was als endet

\leavevmode{\uppercase\protect\color{red}\protect\textbf{spaced}}

was falsch ist. Es gibt zwei Lösungen. Entweder verwenden Sie nur robuste Befehle:

\newrobustcmd*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

oder holen Sie sich zuerst den Wert des Felds und speichern Sie ihn in einem Befehl mit \glsfetchfieldund wenden Sie ihn dann an \capitialisewords:

\documentclass{article}

\usepackage{xcolor}
\usepackage{glossaries}

\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

\newacronym{srs}{SRS}{\strong{spaced} repetition system}

\newrobustcmd*{\TCac}[1]{%
 \glsfieldfetch{#1}{long}{\phrase}%
 \expandafter\capitalisewords\expandafter{\phrase}%
}

\begin{document}

\TCac{srs}.

\end{document}

Hier gibt es noch ein Problem. Der Wert des longSchlüssels ist immer noch vollständig erweitert. (Sie können den Wert anzeigen, indem Sie \showglslong{srs}nach der Definition des Eintrags Folgendes verwenden. Dies verwendet \showden internen Befehl, der zum Speichern des Feldwerts verwendet wird long.) Dies liegt daran, dass die Felderweiterung für den longSchlüssel standardmäßig aktiviert ist. Sie können dies deaktivieren, indem Sie Folgendes verwenden \glsnoexpandfields:

\documentclass{article}

\usepackage{xcolor}
\usepackage{glossaries}

\glsnoexpandfields

\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

\newacronym{srs}{SRS}{\strong{spaced} repetition system}

\newrobustcmd*{\TCac}[1]{%
 \glsfieldfetch{#1}{long}{\phrase}%
 \expandafter\capitalisewords\expandafter{\phrase}%
}

\begin{document}

\TCac{srs}.

\end{document}

Dies funktioniert jetzt ordnungsgemäß.

Beachten Sie, dass dies \xcapitalisewordseine Verknüpfung ist, mit \expandafter\capitalisewords\expandafterder Sie Folgendes tun können:

\newrobustcmd*{\TCac}[1]{%
 \glsfieldfetch{#1}{long}{\phrase}%
 \xcapitalisewords{\phrase}%
}

Ab glossariesv4.22 können Sie

\glsentrytitlecase{src}{long}

Dies bewirkt im Endeffekt dasselbe wie das \TCacobige Beispiel, allerdings ist das zweite Argument der Feldname (z. B. firstoder textoder desc).

Antwort2

Paket wird verwendet titlecaps.

\documentclass{article}
\usepackage{glossaries}
\usepackage{titlecaps}
\newacronym{srs}{SRS}{spaced repetition system}
\begin{document}
\titlecap{\glsentrylong{srs}}
\end{document} 

Bildbeschreibung hier eingeben

Beachten Sie, dass Sie die Funktion verwenden können \Addlcwords{}, die die Großschreibung bestimmter Wörter ausschließt. Darüber hinaus werden (die meisten) Satzzeichen und Klammern automatisch ausgeblendet, wenn ermittelt wird, was großgeschrieben werden soll.

\documentclass{article}
\usepackage{glossaries}
\usepackage{titlecaps}
\newacronym{srs}{SRS}{spaced repetition, of an (ocular) system}
\begin{document}
\titlecap{\glsentrylong{srs}}

\Addlcwords{an of}
\titlecap{\glsentrylong{srs}}
\end{document} 

Bildbeschreibung hier eingeben

ERGÄNZUNG(BEARBEITET)

Der OP weist in einem Kommentar darauf hin, dass die Methode in Abschnittsüberschriften von das neue ACM-Format(https://www.acm.org/publications/proceedings-template). Das Problem scheint nicht bei zu liegen \titlecap, aber das \glsentrylongfunktioniert nicht in der Abschnittsüberschrift. Der folgende Workaround bringt einen da durch, wobei ich \edefdas Akronym einfüge, bevor ich es in der Abschnittsüberschrift verwende.

\documentclass{sig-alternate-05-2015}
\usepackage{glossaries}
\usepackage{titlecaps}
\Addlcwords{an of}
\newacronym{srs}{SRS}{spaced repetition, of an (ocular) system}
\begin{document}
\edef\tmp{\glsentrylong{srs}}
\section{This is  \expandafter\titlecap\expandafter{\tmp} ok? }
\titlecap{\glsentrylong{srs}}
\end{document} 

Bildbeschreibung hier eingeben


Die stringstringsVersion ist (beachten Sie die Schreibweise von „großgeschrieben“) unten angegeben. Als Autor von stringstringsund titlecapsempfehle ich jedoch aus Effizienzgründen dringend, für diese Aufgabe titlecapsanstelle von zu verwenden.stringstrings

\documentclass{article}
\usepackage{glossaries}
\usepackage{stringstrings}
\newacronym{srs}{SRS}{spaced repetition system}
\begin{document}
\capitalizewords{\glsentrylong{srs}}
\end{document} 

verwandte Informationen