16 Jul 2008

Mit Latex acronym-Paket: \ac{} nur anders rum

Submitted by blizzz

Wenn man das Paket acronym in Latex nutzt, um die Abkürzungen zu erstellen und zu verwalten, erhält man den Befehl \ac{} mit. Dadurch wird beim ersten Nutzen der übergebenen Abkürzung die volle Bedeutung ausgeschrieben, dahinter wird in Klammern die Kurzform gesetzt. Bei jedem weiteren Male erscheint dann nur noch die Kurzform, zumindest bis man das ganze zurücksetzt.

Neben weiteren Funktionen, die nur die Kurz- oder Langform ausgeben oder ein Plural-s daran anhängen, gibt es im Paket jedoch keine Funktion mit dem selben Verhalten von \ac{}, die jedoch die Kurzform an den Anfang stellt und die Langform in Klammern dahinter. Dies kann man sich aber basteln.

\makeatletter
\newcommand{\acr}{\protect\@acr}%
\newcommand{\@acr}[1]{%
    \expandafter\ifx\csname ac@#1\endcsname\AC@used
        \acs{#1}%
    \else
        \acs{#1} (\acl{#1})%
        \global\expandafter\let\csname ac@#1\endcsname\AC@used
        \AC@addtoclearlist{#1}%
        \AC@logged{#1}
    \fi
}
\makeatother

Mit dieser Befehlsfolge (man sieht, dass es in einem \makeatletter-Bereich geschrieben werden muss) wird der Befehl \acr{} erstellt, der eben das gewünschte Verhalten nachahmt.

Tags: 

Comments

Toller Tipp! Nun habe ich folgendes Problem, bei dem ich gern um Rat fragen möchte. Folgende Ausgabe erzielt \acr{} am Bsp. bei mir: \acr{EFTA} wird zu: EFTA (European Free Trade Association)EFTA Wie kann man es hinbekommen, dass nach der Langform in Klammern die angehängte Kurzform verschwindet? Vielleicht hat jemand eine Lösung?

Die Kurzform dahinter sollte gar nicht erscheinen. Wenn ich jetzt noch nen Test laufen lasse, geschieht es auch nicht. Hast du den Codeschnippsel richtig übernommen? Und ist die Abkürzung korrekt eingetragen?

Merci ersteinmal für deine Antwort! Ich denke schon, das alles korrekt eingetragen ist. Im Text sieht das so aus: Die \acr{EFTA} spielt eine wichtige Rolle. Im Abkürzungsverzeichnis habe ich das Acronym so eingefügt: \begin{acronym}[MMMMMMMMMM] \setlength{\itemsep}{-\parsep} \acro{EFTA}{European Free Trade Association} \end{acronym} Vielleicht habe ich hier etwas falsch gemacht? Allerdings habe ich nun eine Alternative gefunden, nur eben nicht "anders rum": \acfi{EFTA} wird zur Langform in kursiv und die Kurzform steht in Klammern dahinter. Für alle anderen Abkürzungen verwende ich dann wie üblich \acs, \acf oder \acl. Das funktioniert ganz gut.

Hm... welche Latex-Distribution verwendest du? Möglicherweise tauchen da Unterschiede in der Behandlung auf? Ich hab TeXlive im Einsatz. Kannst du ggf. ein Minimalbeispiel zur Verfügung stellen, mit dem sich das reproduzieren lässt?

Ich hatte ebenfalls das Problem. Abhilfe schaffte der oben erwähnte Befehl: \AC@addtoAC@clearlist{#1}

das acronym-paket scheint ein problem mit dem nobreakdash zu haben... weißt Du da Rat? Ich kann nicht "~ verwenden, weil ich babel als english lade...

Funktionierte bei mir (acronym Version vom 20.10.2009) problemlos, nachdem ich die Zeile

\AC@addtoclearlist{#1}

durch

\AC@addtoAC@clearlist{#1}

ersetzte.

Das ganze funktioniert auch für \acp wunderbar:


\makeatletter
\renewcommand{\acp}{\protect\@acp}%
\renewcommand{\@acp}[1]{%
\expandafter\ifx\csname ac@#1\endcsname\AC@used
\acs{#1}%
\else
\acsp{#1} (\aclp{#1})%
\global\expandafter\let\csname ac@#1\endcsname\AC@used%
\AC@addtoAC@clearlist{#1}%
\AC@logged{#1}
\fi
}
\makeatother

Viele Grüße
Jochen

Das ist eigentlich genau das, was ich gesucht habe. Allerdings hab ich ein sehr langes Acronym und da gibt es Probleme mit dem Zeilenumbruch

\acro{WAI}{Ein eindeutig zu langer Text, der dringend eines Zeilenumbruches bedarf, weil er sonst über den Rand hinaus reicht.}

Ich bin jetzt ein paar Jahre raus aus der Geschichte… aber müsste das dann nicht ein Problem von \ucl{} sein, was ja intern für die Ausgabe der Langform verwendet wird?

Add new comment