Anzeige:
Ergebnis 1 bis 9 von 9

Thema: LaTex interne Wortabkürzungen im Text definieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.03.2012
    Beiträge
    25

    LaTex interne Wortabkürzungen im Text definieren

    Hallo,

    Ich möchte gerne, wenn mir beim Schreiben eines Textes plötzlich ein langes Wort z.B. 4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on hinzukommt, dies an dieser Stelle mit einem Befehl definieren, sodass mir später automatisch wenn ich die definierte Abkürzung eingebe das Wort kompiliert wird, in etwa so:

    In diesem Versuch wird durch eine Aldol-Reaktion 4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on \defabk{4HMM} hergestellt. Die Aldol-Reaktion ist eine wichtige Synthesemöglichkeit in der Organischen Chemie. Das Produkt \abk{4HMM} wird dabei vor allem für blablabla verwendet.

    Gibt es da eine passende Möglichkeit?

    Lg Ubiquitin

  2. #2
    Registrierter Benutzer Avatar von André25
    Registriert seit
    19.08.2010
    Beiträge
    157
    Hallo!

    Du kannst (theoretisch egal wo, aber am besten in der Präambel) einen neuen Befehl definieren:
    Code:
    \newcommand{\abk4HMM}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on}
    Und dieses Kommando dann dann später im Text verwenden:
    Code:
    Text \abk4HMM\ Text
    Der zweite Backslash ist für das Leerzeichen nach Deiner "Abkürzung" (die ja dann ausgeschrieben ist).


    Beste Grüße,

    André
    Fedora 20 64 bit :: Gnome 3.10.2 | TeX Live 2014 | TeXstudio
    Windows 7 Professional x64 | MiKTeX 2.9 | TeXstudio (mit Sumatra PDF

    ¹Anleitung

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Um den zweiten Backslash zu vermeiden, kann man auch das Paket xspace und den gleichnamigen Befehl verwenden. So wird im Fliesstext ein Leerzeichen dahinter eingefügt, nicht aber vor einem Komma oder Punkt.

    Code:
    \usepackage{xspace}
    \newcommand{\4hmm}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on\xspace}
    ...
    \4hmm
    (Ich verwende gerne Kleinbuchstaben für solche Abkürzungen, das schreibt sich schneller.)

  4. #4
    Registrierter Benutzer Avatar von André25
    Registriert seit
    19.08.2010
    Beiträge
    157
    Insofern kann man den Backslash natürlich auch in die Definition nehmen (und erspart sich das Einbinden eines weiteren Paketes):
    Code:
    \newcommand{\abk}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on\ }
    Achtung: mit Leerzeichen zwischen Backslash und schließender geschweifter Klammer.

    Allerdings lässt mein Editor keine Zahl im neuen Kommando zu: \abk4HMM oder \4hmm geht also nicht.

    André
    Fedora 20 64 bit :: Gnome 3.10.2 | TeX Live 2014 | TeXstudio
    Windows 7 Professional x64 | MiKTeX 2.9 | TeXstudio (mit Sumatra PDF

    ¹Anleitung

  5. #5
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Moin moin,
    Zitat Zitat von André25 Beitrag anzeigen
    Insofern kann man den Backslash natürlich auch in die Definition nehmen (und erspart sich das Einbinden eines weiteren Paketes):
    Code:
    \newcommand{\abk}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on\ }
    Achtung: mit Leerzeichen zwischen Backslash und schließender geschweifter Klammer.
    dann darf aber kein Interpunktionszeichen auf Deinen \abk folgen.
    Zitat Zitat von André25 Beitrag anzeigen
    Allerdings lässt mein Editor keine Zahl im neuen Kommando zu: \abk4HMM oder \4hmm geht also nicht.
    Generell werden Makronamen aus Buchstaben (was TeX darunter versteht) gebildet, es sei denn, auf den \ folgt nur ein einzelnes Zeichen (da sind dann fast alle Zeichen möglich).
    Umschiffen könnte man das mit \csname ... \endcsname bzw. \@namedef/\@nameuse:
    Code:
    \documentclass{article}
    \makeatletter
      \newcommand*\abk[1]{%
        \@nameuse{#1}%
      }
      \newcommand*\defabk[2]{%
        \@namedef{#1}{#2}%
      }
    \makeatother
    \defabk{4hmm}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on}
    \begin{document}
    \abk{4hmm}
    \end{document}
    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  6. #6
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    du kannst auch auf expl3 und xparse zurückgreifen. Neben der gebene Sicherheit, dass keine Anweisung überschrieben wird, erlaubt expl3 eine leichte Erweiterung.

    Beispielsweise habe ich im Beispiel eine Sternvariante hinzugefügt und eine Möglichkeit undefinierte Abkürzungen im Text als solche zu deklarieren.
    Code:
    \documentclass{article}
    \usepackage{xparse}
    \ExplSyntaxOn
    \prop_new:N \g_abk_store_prog
    \NewDocumentCommand \defabk { s m m }
     {
      \prop_gput:Nnn \g_abk_store_prog { #2 } { #3 }
      \IfBooleanT { #1 } { #3 }   
     }
    
    \NewDocumentCommand \abk { s m }
    {
       \prop_get:NnNTF \g_abk_store_prog { #2 } \l_tmpa_tl
        { \l_tmpa_tl
           \IfBooleanT { #1 } {~(#2)}
        }
        {[{\color{red} Unknown~Abk}]}
    }
    \ExplSyntaxOff
    
    \begin{document}
    \defabk{4hmm}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on}
    
    \abk*{4hmm}
    
    \abk{4hmm}
    
    \abk{asdsadsadsad}
    
    \defabk*{H2O2}{Wasserstoffperoxid}
    
    \abk{H2O2}
    \end{document}
    EDIT: Beispiel ergänzt um eine Sternvariante von defabk.
    Geändert von mechanicus (17-03-2012 um 15:50 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    04.03.2012
    Beiträge
    25
    Hi,

    Danke vielmals für die tollen Vorschläge. Ich fühle mich gerade etwas "doof": die meisten Vorschläge funktionieren bei mir nämlich nicht. Ich schreibe auch noch die Codes hinein für alle, die genau nach diesem Thread gesucht haben.

    Beitrag2:
    Code:
    \documentclass{article}
    \newcommand{\abk4HMM}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on}
    \begin{document}
    Es gibt \abk4HMM\ . Nebst \abk4HMM\ gibt es noch zahlreiche andere Stoffe.
    \end{document}
    Das Ergebnis sieht bei mir dann so aus:
    "4HMM4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on Es gibt 4HMM . Nebst
    4HMM gibt es noch zahlreiche andere Stoffe."
    Merkwürdigerweise erscheint die ausgeschriebene Abkürzung nur beim ersten Mal, zudem wird auch die Abkürzungsdefinition ausgeschrieben.

    Beitrag3:
    Code:
    \documentclass{article}
    \usepackage{xspace}
    \begin{document}
    \newcommand{\4hmm}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on\xspace}
    ...
    \4hmm
    \end{document}
    Das Ergebnis sieht bei mir dann so aus:
    hmm4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on ... hmm

    Beitrag4:
    (funktioniert mit etwas Gewöhnung recht gut)
    Code:
    \documentclass{article}
    \usepackage{xspace}
    \begin{document}
    \newcommand{\abk}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on}
    Es gibt \abk. Nebst \abk\ wird auch ... verwendet.
    \end{document}
    Das Ergebnis sieht bei mir dann so aus:
    Es gibt 4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on. Nebst 4-Hydroxy-1-
    mesityl-4-methylpent-1-en-3-on wird auch ... verwendet.

    nach \abk folgt direkt ohne Abstand das Interpunktionszeichen. Wird hingegen ein Leerzeichen nach der Abkürzung benötigt, so ist ein \ nach \abk erforderlich.

    Beitrag 5(rais):

    Diese Variante funktioniert ohne Probleme und scheint auch sehr einfach in ihrer Handhabung zu sein. (Für was steht hier abk[1] bzw. abk[2]?)

    Code:
    \documentclass{article}
    \makeatletter
      \newcommand*\abk[1]{%
        \@nameuse{#1}%
      }
      \newcommand*\defabk[2]{%
        \@namedef{#1}{#2}%
      }
    \makeatother
    \defabk{4hmm}{4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on}
    \begin{document}
    Folgender Stoff gibt es wirklich: \abk{4hmm}. Nebst \abk{4hmm} werden auch andere Chemikalien oft verwendet. \abk{4hmm} ist hier vermutlich die beste Wahl.
    \end{document}
    Das Ergebnis sieht bei mir dann so aus:
    Folgender Stoff gibt es wirklich: 4-Hydroxy-1-mesityl-4-methylpent-1-en-
    3-on. Nebst 4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on werden auch andere Chemikalien oft verwendet. 4-Hydroxy-1-mesityl-4-methylpent-1-en-3-on ist hier vermutlich die beste Wahl.

    Beitrag 6:

    Leider erschien bei mir da die Fehlermeldung:
    Erzeuge Projekt: abkuerzunga
    --------------------------------------------------
    abkuerzunga.tex(1): Fehler: LaTeX Error: File `xparse.sty' not found.
    abkuerzunga.tex(3): Fehler: Emergency stop.
    abkuerzunga.tex(1): Fehler: ==> Fatal error occurred, no output PDF file produced!
    --------------------------------------------------
    abkuerzunga - 3 Fehler, 0 Warnung(en), 0 Overfull Box(en), 0 Underfull Box(en)

    In MikTex Packet Manager habe ich das Paket xparse.sty leider nicht gefunden.

    --------------------------------
    --------------------------------

    Herzlichen Dank für eure wertvollen Tipps! Ich war echt beeindruckt, wie viel Input in solch kurzer Zeit entstand ((Bin noch ein Neuling))

    Lg ubiquitin

  8. #8
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    welche Version von MikTeX hast du?

    Die Lösungen 1+2 sind nicht möglich. Die Gründe findest du im Beitrag von Rainer.

    Marco

  9. #9
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Moin moin,
    Zitat Zitat von ubiquitin Beitrag anzeigen
    (Für was steht hier abk[1] bzw. abk[2]?)
    Code:
      \newcommand*\abk[1]{%
        \@nameuse{#1}%
      }
    heißt etwa: `Erstelle einen neuen Befehl \abk. Dieser \abk soll ein Argument verarbeiten.' In dem folgenden Klammerpaar steht dann die Definition, wobei #1 für `Parameter Nr. 1' steht.
    BTW: \@namedef und \@nameuse sind im LaTeX-Kern definiert.
    Zitat Zitat von ubiquitin Beitrag anzeigen
    abkuerzunga.tex(1): Fehler: LaTeX Error: File `xparse.sty' not found.
    Schau in Deinem Paketmanager nach `l3packages', da gehört xparse.sty dazu, AFAICS.

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •