Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Ein Befehl -> Counter setzen und Akronym erstellen

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.10.2008
    Beiträge
    8

    Ein Befehl -> Counter setzen und Akronym erstellen

    Hallo allerseits,
    ich bin neu hier und habe gleich mal eine Zielsetzung, die ich alleine nicht erreiche.
    Folgendes ist das Ziel:
    Ich definiere an einer Stelle im Text ein Objekt mit einem kurzen Namen und einem langen Namen. Dabei soll zeitgleich ein Zähler weitergesetzt werden, sodass ich an beliebiger anderer Stelle unter Verwendung des kurzen Namens den langen Namen bzw. den zugehörigen Counter ausgegeben bekomme.
    Ich habe es bisher geschafft, ein Objekt mit einem kurzen Namen zu definieren und diesen mit einem Counter zu versehen. Mir wurde an anderer Stelle das Paket "acronym" ans Herz gelegt, welches die Möglichkeit bietet, unter Verwendung des kurzen Namens den langen ausgegeben zu bekommen. Ich bin allerdings nicht in der Lage diese beiden Dinge miteinander zu Verknüpfen, sodass sie so funktionieren wie ich das gerne hätte.
    Ich würde mich sehr über Ideen oder fertige Lösungen freuen,
    vielen Dank schonmal,

    Florian

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Ort
    Karlsruhe
    Beiträge
    1.407
    Hallo Florian,

    willkommen im Forum. Nach Deiner Beschreibung kann ich mir noch nicht vorstellen, was Du vorhast. Kurzer Name, langer Name, Zähler -- wozu? Willst Du Acronyme durchnummerieren?

    Gruß,
    Alexander

  3. #3
    Registrierter Benutzer
    Registriert seit
    09.10.2008
    Beiträge
    8
    Hallo Alexander!
    Vielen Dank erstmal für deine Bereitschaft zur Hilfe.

    Meine Situation ist die folgende:
    Ich muss in meinen Chemie-Protokollen sämtliche im Text und in Abbildungen erscheinenden Verbindungen nummerieren. Außerdem muss ich sie im Text beim korrekten Namen nennen und Stellenweise die dazugehörige Nummer referenzieren. Ich möchte mir ganz einfach, nachdem ich die Verbindung an der Stelle ersten Auftretens definiert habe, nur unter Verwendung eines Kurznamens (den ich mir merken kann, der keine 5min tipparbeit ist) Zugriff auf den korrekten Namen und die zugehörige Nummer haben.
    Für die Nummer habe ich halt schon die Teillösung, die sieht so aus:
    Code:
    \newcounter{verbindungen} 
    \newcommand{\Verb}[1]{\refstepcounter{verbindungen}\label{#1}}
    \newcommand{\vref}[1]{{\bf \ref{#1}}}
    dann kann ich an beliebiger Stelle im Text schreiben
    Code:
    \Verb{mein_Kurzname}
    und der Verbindung wird ihre Nummer zugewiesen, die ich dann per
    Code:
    \vref{mein_Kurzname}
    ausgeben lassen kann. Nur möchte ich halt gerne in ein und demselben Befehl zur Definition der Verbindung auch einen langen Namen deklarieren können, den ich analog zur Nummer ausgegeben bekomme.
    Ist diese Beschreibung besser?

    Gruß, Florian

  4. #4
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    \refstepcounter erhöht ja nicht nur den Zähler, sondern setzt auch \@currentlabel. Mit \label wird eine Verbindung zwischen dem Labelnamen und \@currentlabel hergestellt, indem beides in die aux-Datei geschrieben wird.

    Du kannst aber in deinen Makros auch \@currentlabel als "Käsekuchen" definieren, das passende \ref{} würde dann keine Nummer(nkombination) liefern, sondern eben "Käsekuchen".

    (Um \@currentlabel umdefinieren zu können, muß die passende Makrodefinition mit \makeatletter und \makeatother geklammert werden.)

    Wenn du "Käsekuchen" nicht als Ersatz für die Nummer definieren möchtest, sondern zusätzlich Zugriff darauf haben möchtest, so könnte man das mit Hilfe des zref-Paketes (Richtiger Paketname? Ich meine das aus dem oberdiek-Paketbundle) bewerkstelligen.

    Gruß,
    Axel

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Ort
    Karlsruhe
    Beiträge
    1.407
    Zitat Zitat von FlorianKiel Beitrag anzeigen
    Ich muss in meinen Chemie-Protokollen sämtliche im Text und in Abbildungen erscheinenden Verbindungen nummerieren.
    Wie willst Du Verbindungen in Abbildungen nummerieren? Erstellst Du die Abbildungen selbst mit irgendeinem TeX-Format (Tikz oder so?)?

    Wie dem auch sein, Du bist nicht der erste Chemiker mit diesem Problem und es gibt dazu mehrere Pakete, z.B. chemcompounds und chemcono. Du findest näheres beispielsweise im thematischen Katalog der LaTeX-Pakete hier.

    Außerdem muss ich sie im Text beim korrekten Namen nennen
    Alternative Namen scheinen auch eine Chemiker-Spezialität zu sein, geht der Beschreibung nach wohl auch mit den o.g. Paketen. Du erhälst, wenn diese Pakete einmal installiert sind, die Anleitung übrigens mit

    Code:
    texdoc Paketname
    auf der Konsole.

    Wenn Dir das jetzt nicht hinreichend weiterhilft, dann wird es für Deine Leser hier leichter mit einem Minimalbeispiel.

    Was Axel da oben vorgeschlagen hat geht leider über meinen Horizont.

    Gruß,
    Alexander

  6. #6
    Registrierter Benutzer
    Registriert seit
    09.10.2008
    Beiträge
    8
    *FIXED*
    So, nach etwa 5stündiger Einarbeitung in Latex-Makros und das zref-Paket im speziellen (vielen Dank für den Hinweis, Axel!) ist es mir nun gelungen das Problem nach meinen Wünschen zu lösen. Vielen Dank auch an Alexander für den Hinweis auf die bereits vorhandenen Paktete, daran hatte ich gar nicht gedacht, dass sowas evtl. schon fertig verfügbar sein könnte.
    Hier meine Lösung:

    Code:
    \usepackage[user]{zref}
    
    \makeatletter
    
    \newcounter{verbnr}
    
    \zref@newprop*{vname}{}
    \zref@newprop*{vnr}{}
    \zref@addprop{main}{vname}
    \zref@addprop{main}{vnr}
    
    \def\Verbindung#1#2{%
       \stepcounter{verbnr}%
       \zref@setcurrent{vname}{#2}%   
       \zref@setcurrent{vnr}{\textbf{\arabic{verbnr}}}%
       \zref@wrapper@immediate{\zref@label{verb:#1}}%
    }
    \def\getname#1{%
       \zref@extract{verb:#1}{vname}
    }
    
    \def\getnr#1{%
       \zref@extract{verb:#1}{vnr}
    }
    
    
    \makeatother
    Damit kann ich an beliebiger Stelle im Text sagen

    Code:
    \Verbindung{v1}{sehr langer Verbindungsname}
    An beliebiger anderer Stelle verschafft

    Code:
    \getname{v1}
    \getnr{v1}
    mir den gewünschten langen Namen bzw die gewünschte Nummer der Verbindung.

    Also dann, nochmal Danke für die Hilfe,
    Gruß,
    Florian

    P.S.:Alexander, die Nummerierung in Abbildungen erreiche ich bei Verwendung von .eps-Grafiken mit dem Paket psfrag. Ich kann damit beliebige Textausschnitte in der .eps-Grafik ersetzen durch beliebigen Latex-Text (geht z.B. auch mit Formeln etc, wird alles in der in Latex gewählten Schriftart usw. dargestellt).
    Geändert von FlorianKiel (09-10-2008 um 20:08 Uhr)

  7. #7
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von cookie170 Beitrag anzeigen
    Was Axel da oben vorgeschlagen hat geht leider über meinen Horizont.
    Vielleicht hilft ein kleines Beispiel:

    Code:
    \documentclass{article}
    
    \makeatletter
    \newcommand*\meinbefehl[1]{\renewcommand\@currentlabel{#1}}
    \makeatother
    
    \begin{document}
    
    \ref{label1} \ref{label2}
    
    \meinbefehl{Kaesekuchen!}\label{label2}
    
    \meinbefehl{Ich mag}\label{label1}
    
    \end{document}
    Wenn man \@currentlabel und \ref allerdings derart für eigene Zwecke mißbraucht, ist in Verbindung mit dem hyperref-Paket einiges zu beachten. Mit dem zref-Paket ist man daher auch bei solch einfachen eindimensionalen label-ref Beziehungen auf der sichereren Seite.

    Liebe Grüße,
    Axel

  8. #8
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Noch ein kleiner Verbesserungsvorschlag:

    Code:
    \def\getname#1{%
       \zref@extract{verb:#1}{vname}%
    }
    
    \def\getnr#1{%
       \zref@extract{verb:#1}{vnr}%
    }
    Ohne die zusätzlichen % erzeugen \getname und \getnr zusätzlich ein Leerzeichen, welches sich u.U. störend auswirken könnte.

    Liebe Grüße,
    Axel

  9. #9
    Registrierter Benutzer
    Registriert seit
    09.10.2008
    Beiträge
    8
    Ist eingebaut, danke für den hinweis...

Lesezeichen

Berechtigungen

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