Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Parameter innerhalb eines Befehls in Kleinschrift umwandeln

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180

    Parameter innerhalb eines Befehls in Kleinschrift umwandeln

    Hallo

    Kann man in einem Befehl den Parameter in Kleinschrift umwandeln und so weiter verwenden? Im folgenden Beispiel funktioniert der auskommentierte Teil nicht (Un-Kommentieren erzeugt eine Fehlermeldung. Kriegt man etwas mit der dargestellten Funktionalität hin?
    Code:
    \documentclass[11pt, ngerman,oneside]{scrbook} 
    \usepackage[acronym=true]{glossaries}
    \makeglossaries
    \newacronym{abl}{ABl}{Amtsblatt}
    
    
    
    \newcommand{\neueskommando}[1]{%
    Die Eingabe {#1} wird umgewandelt in \MakeLowercase{#1} und steht für die Abkürzung
    %\gls{\MakeLowercase{#1}}
     }
    
    \begin{document} 
    
    Amtsblatt\\
    \gls{abl}\\
    \neueskommando{ABl}
    
    
    
    \end{document}
    Grüsse
    ElEsido

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

    war das vielleicht zu Minimal

    Code:
    \documentclass[11pt, ngerman,oneside]{scrbook} 
    \usepackage[acronym=true]{glossaries}
    \makeglossaries
    \newacronym{abl}{ABl}{Amtsblatt}
    
    
    \newacronym{ABl}{\protect\MakeLowercase{ABl}}{ABlABlABlABlABlABl}
    
    \newcommand{\neueskommando}[1]{%
    Die Eingabe {#1} wird umgewandelt in \MakeLowercase{#1} und steht für die Abkürzung
    \gls{#1}}
    %  }
    
    \begin{document} 
    
    Amtsblatt\\
    \gls{abl}\\
    \neueskommando{ABl}
    
    \printglossary[type=\acronymtype]
    
    \end{document}
    Gruß
    Marco

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Sorry, dieser Treffer war (für einmal) nicht auf der Scheibe ;-)

    Die Definition des acronyms soll
    Code:
    newacronym{abl}{ABl}{Amtsblatt}
    sein, der normale Aufruf wäre also
    Code:
    \gls{abl}
    Ich suche eine Möglichkeit, mit dem Befehl
    Code:
    \neueskommando{ABl}
    den Aufruf
    Code:
    \gls{abl}
    zu triggern. Der Parameter hinter dem Befehl soll nicht verändert werden, und das acronym auch nicht, der Paramter soll stattdessen innerhalb des Befehls in Kleinbuchstaben umgewandelt und dann zum Aufrufen des acronyms verwendet werden.

    Mein Beispiel war sehr kurz, tatsächlich brauche ich aber den Parameter innerhalb des Befehls sowohl in Originaleingabe wie auch alles in Kleinschrift.

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Code:
    \newcommand{\neueskommando}[1]{%
    Die Eingabe {#1} wird umgewandelt in \MakeLowercase{#1} und steht für die Abkürzung
    \MakeLowercase{\noexpand\gls{#1}}}

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Super, danke Ulrike!

  6. #6
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Leider habe ich das Beispiel etwas zu stark vereinfacht und es funktioniert in der tatsächlichen Anwendung nicht. Diese ist wie folgt: In einem Biblatex-Stil soll das Feld journaltitle geprüft werden und je nach Inhalt ein unterschiedliches Makro aufgerufen werden. Die Schriebweise innerhalb des Journal-Feldes kann jedoch zwischen den folgenden drei Fällen variieren:

    - ABL
    - \gls{abl}
    - {\gls{abl}}

    Ausgeschrieben sieht die Sache so aus:
    Code:
    \newcommand{\journalcheck}{%
    % Fälle
    \iffieldundef{howpublished}
    {% Test, ob Journaltitle {\gls{abl}}, \gls{abl} oder ABl
      \iffieldequalstr{journaltitle}{{\gls{abl}}}{\usebibmacro{abl}}%
        {\iffieldequalstr{journaltitle}{\gls{abl}}{\usebibmacro{abl}}
        {\iffieldequalstr{journaltitle}{ABl}{\usebibmacro{abl}}
        {% Test ob Journaltitle {\gls{rpw}}, \gls{rpw} oder RPW
            \iffieldequalstr{journaltitle}{{\gls{rpw}}}{\usebibmacro{rpw}}
            {\iffieldequalstr{journaltitle}{\gls{rpw}}{\usebibmacro{rpw}}
            {\iffieldequalstr{journaltitle}{RPW}{\usebibmacro{rpw}}
            {% Test ob Journaltitle BGE
              \iffieldequalstr{journaltitle}{{\gls{bge}}}{\usebibmacro{bge}}
              {\iffieldequalstr{journaltitle}{\gls{bge}}{\usebibmacro{bge}}
              {\iffieldequalstr{journaltitle}{ABL}{\usebibmacro{bge}}
              {% Alle andern
              \usebibmacro{andere}}}}}}}}}}} 
    {\printfield{howpublished}}
    }
    Ich möchte sie jedoch mit dem Befehl
    Code:
    \jounalcheck{ABl}
    aufrufen, also müsste es irgendwie so aussehen:

    Code:
    \newcommand{\journalcheck}[1]{%
    % Fälle
    \iffieldundef{howpublished}
    {% Test, ob Journaltitle {\gls{abl}}, \gls{abl} oder ABl
      \iffieldequalstr{journaltitle}{{\gls{#1 in Kleinschrift}}}{\usebibmacro{abl}}%
        {\iffieldequalstr{journaltitle}{\gls{#1 in Kleinschrift}}{\usebibmacro{abl}}
        {\iffieldequalstr{journaltitle}{#1}{\usebibmacro{abl}}
        {% Test ob Journaltitle {\gls{rpw}}, \gls{rpw} oder RPW
            \iffieldequalstr{journaltitle}{{\gls{#1 in Kleinschrift}}}{\usebibmacro{rpw}}
            {\iffieldequalstr{journaltitle}{\gls{#1 in Kleinschrift}}{\usebibmacro{rpw}}
            {\iffieldequalstr{journaltitle}{#1}{\usebibmacro{rpw}}
            {% Test ob Journaltitle BGE
              \iffieldequalstr{journaltitle}{{\gls{#1 in Kleinschrift}}}{\usebibmacro{bge}}
              {\iffieldequalstr{journaltitle}{\gls{#1 in Kleinschrift}}{\usebibmacro{bge}}
              {\iffieldequalstr{journaltitle}{#1}{\usebibmacro{bge}}
              {% Alle andern
              \usebibmacro{andere}}}}}}}}}}} 
    {\printfield{howpublished}}
    }
    Gibt es eine Möglichkeit? Beispielsweise mit der Definition eine neuen Variable, der der Wert des Parameters 1 in Kleinschrift übergeben wird, und die dann an Stelle des #1 in Kleinschrift eingesetzt wird?

    (Ein lauffähiges Minimalbeispiel ist schwierig zu erstellen, da ich dazu die ganze Baustelle meines Biblatex-Stils hochladen müsste.)
    Geändert von ElEsido (20-07-2009 um 15:41 Uhr)

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

    setze doch eine temp-Variable ein:
    UNGETESTET:
    Code:
    \newcommand{\journalcheck}[1]{%
    % Fälle
    \def\tempA{\MakeLowercase{#1}}
    \iffieldundef{howpublished}
    {% Test, ob Journaltitle {\gls{abl}}, \gls{abl} oder ABl
      \iffieldequalstr{journaltitle}{{\gls{\tempA}}}{\usebibmacro{abl}}%
        {\iffieldequalstr{journaltitle}{\gls{\tempA}}{\usebibmacro{abl}}
        {\iffieldequalstr{journaltitle}{#1}{\usebibmacro{abl}}
        {% Test ob Journaltitle {\gls{rpw}}, \gls{rpw} oder RPW
            \iffieldequalstr{journaltitle}{{\gls{\tempA}}}{\usebibmacro{rpw}}
            {\iffieldequalstr{journaltitle}{\gls{\tempA}}{\usebibmacro{rpw}}
            {\iffieldequalstr{journaltitle}{\tempA}{\usebibmacro{rpw}}
            {% Test ob Journaltitle BGE
              \iffieldequalstr{journaltitle}{{\gls{\tempA}}}{\usebibmacro{bge}}
              {\iffieldequalstr{journaltitle}{\gls{\tempA}}{\usebibmacro{bge}}
              {\iffieldequalstr{journaltitle}{#1}{\usebibmacro{bge}}
              {% Alle andern
              \usebibmacro{andere}}}}}}}}}}} 
    {\printfield{howpublished}}
    }

    Das funktioniert:
    Code:
    \documentclass{article}
    \parindent0pt
    \newcommand{\journalcheck}[1]{%
    \def\tempA{\MakeLowercase{#1}}
    \tempA}
    \begin{document}
    \journalcheck{ABL}
    
    \journalcheck{AbL}
    
    \journalcheck{abl}
    \end{document}
    Gruß
    Marco

  8. #8
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Das funktioniert leider nicht, mit der Definition
    Code:
    \def\tempA{\MakeLowercase{#1}}
    ergibt die Ausgabe
    Code:
    \tempA
    zwar
    Code:
    bge
    aber die Prüfung \iffieldequalstr
    Code:
    {\gls{\tempA}}
    wird als ungleich
    Code:
    {\gls{bge}}
    erkannt und der fallback-Befehl
    Code:
    usebibmacro{andere}
    wird ausgeführt...

  9. #9
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Hm. Ich denke, du hast nicht den richtigen Ansatz. Ein \if-Schachtelung über vier Ebenen, die dann auch noch mit "alle anderen" weitergeht, kann irgendwie nicht die richtige Idee sein.

    Wenn ich das richtig sehe, dann ist der Inhalt des Feldes journaltitle im Makro \abx@field@journaltitle gespeichert. Ich würde einfach diesen Inhalt benutzen, um unterschiedliche Befehle auszuführen (Ich gehe dabei davon aus, dass der Inhalt keine komplizierten Dinge enthält.). Außerdem würde ich \gls lokal umdefinieren.

    Code:
    \documentclass[11pt]{article}  
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    
    \begin{document}
    
    \makeatletter
    \def\bibmacrofor@abl{Benutze ABL!}
    \def\bibmacrofor@ABL{Benutze ABL!}
    \def\bibmacrofor@rpw{Benutze RPW}
    % usw ....
    
    \newcommand\journalcheck{%
     \begingroup
     \def\gls##1{##1}%
     \csname bibmacrofor@\abx@field@journaltitle\endcsname
     \endgroup}
     
    \def\abx@field@journaltitle{\gls{abl}}
     \journalcheck
     
    \def\abx@field@journaltitle{abl}
     \journalcheck
    
    \def\abx@field@journaltitle{ABL}
     \journalcheck
     
    \def\abx@field@journaltitle{rpw}
     \journalcheck
    
    \end{document}

  10. #10
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Ulrike, das tönt wonach ich suche, aber ich komm bei Deinem Code nicht ganz draus (bin kein Programmierer).

    Ich erkläre mal das Endziel, zu dem ich mich hintasten will:

    Bei der Definition der Cite-Befehle will ich die Typen @jurisdiction und @legislation abfangen und ihnen Makros zur Zitierweise zuweisen.

    Bei der Zitierweise müssen die Einträge der Zeitschriften RPW, ABl und BGE (möglicherweise später noch weitere) gesondert behandelt werden. Im enrsprecheneden BIB-File können die Zeitschriftentitel ausgeschrieben sein, oder mit dem Paket glossaries als Abkürzungen verwaltet sein. Sie können also die Form "ABl", "\gls{abl}" oder "{\gls{abl}}" haben.

    Zudem gibt es ein Makro für den Zitierstil aller andern Zeitschriftentitel des Typs @jurisdiction und @legislation.

    Für jede Zitierweise (footcite, cite, cite*) hat jede dieser Zeitschriften ihre eigenen Regeln, welche im entsprechenden Makro festgehalten sind.

    Zudem werden in diesen Zeitschriften (zumindest im ABl) sowohl Gesetze (@legislation) als auch Fälle {@jurisdiction} veröffentlicht. Ausserdem muss ich die Trennung der verschiedenen Zeitrschriften sowohl für die Zitierweise als auch für das Literaturverzeichnis machen.

    Meine Idee war, dass ich den Code, der die Trennung der verschiedenen a) Zitierweisen, b) Eintragstypen, c) Zitierart (Zitat oder Verzeichnis) und d) Zeitschriften vornimmt und den Einträgen die entsprechenden Makros zuordnet, an einem Ort zusammenfassen kann.

    Momentan ist er noch ausgeschrieben (vgl. attachment). Ich wollte eine Lösung finden, die mir erlaubt, den die Sortierung der Zeitschriften und die Generierung der Makro-Namen zusammen zu fassen, ohne dass ich die Titel der Zeitschriften in das Makro reinprogrammieren muss.

    So in der Art: Bei der Definition der Zitierweise würde der Befehl

    Code:
    \journalcheck{< Zitierweise "cite", "footcite" oder "citestar" >}{< entrytype "legislation" oder "jurisdiction" >}{< "cbx" (Zitat) oder "bbx" (Bibliographie) >}{< Zeitschrift1 >}{< Zeitschrift2 >}{< Zeitschrift3 >}{< Zeitschrift4 >}
    beispielsweise das Makro #1#2#3#6 aufrufen.

    Konkret:

    Code:
    \DeclareCiteCommand{\cite}%
      {\usebibmacro{prenote}}
      {\usebibmacro{citeindex}%
     \ifthenelse{\equal{\thefield{entrytype}}{jurisdiction}}{\journalcheck{cite}{jurisdiction}{cbx}{ABl}{RPW}{BGE}{VPB}}{\ifthenelse{\equal{\thefield{entrytype}}{legislation}}{\journalcheck{cite}{legislation}{cbx}{ABl}{RPW}{BGE}{VPB}}{\usebibmacro{cite}}}}
      {\multicitedelim}
      {\usebibmacro{postnote}}
    schickt beispielsweise einen Fall der RPW an das Makro citejurisdicioncbxRPW
    und einen Fall des ABl an das Makro citejurisdicioncbxABl
    und einen Fall der in der XYZ publiziert ist an das Makro citejurisdicioncbxalleandern

    Geht das?

    Um dahin zu kommen, wollte ich eben, die verschiedenen IF-Abfragen machen und diese durch Parameter des Befehls steuern lassen (wobei eben die Parameter in Kleinschrift übersetzt werden müssen um auf Übereinstimmung z.B. mit der Zeichenkette \gls{abl} geprüft zu werden). Die Ausgabe der Makro-Namen aufgrund der Parameter wäre dann wohl noch ein einfaches...
    Geändert von ElEsido (20-07-2009 um 15:43 Uhr)

  11. #11
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Ich weiß von biblatex nur sehr wenig und habe sicherlich nicht die Zeit mich da jetzt reinzuhängen. Ich kann daher eine grundsätzlich Bemerkung machen: Soweit ich das verstanden habe, hast du ein Feld und je nach Wert dieses Feldes möchtest du etwas anderes machen.

    Nun sowas kann man auf zwei Arten machen: Man geht entweder nacheinander die möglichen Werte durch und vergleicht sie mit dem Feldinhalt.

    Oder man baut eine Datenbank auf, die zu jedem möglichen Wert die dazughörige Aktion speichert, und benutzt diese dann.

    Code:
    \documentclass[]{scrartcl}
    \usepackage{ifthen}
    \begin{document}
    Verschiedene Ausgaben je nach Wert des Arguments
    
    Variante 1: mit vielen ifthenelse-Vergleichen:
    
    \newcommand\mytest[1]{%
    \ifthenelse{\equal{#1}{A}}
     {AX}
     {\ifthenelse{\equal{#1}{B}}
      {BX}
      {\ifthenelse{\equal{#1}{C}}
       {CX}
       {was anderes}}}}
    
    \mytest{A}, \mytest{B}, \mytest{C}, \mytest{D}
    
    Variante 2: 
    
    \def\aktionA{AX}
    \def\aktionB{BX}
    \def\aktionC{CX}
    
    \renewcommand\mytest[1]{%
     \ifcsname aktion#1\endcsname
      \csname aktion#1\endcsname
     \else
      was anderes
     \fi}
     
     
    \mytest{A}, \mytest{B}, \mytest{C}, \mytest{D},
    \def\temp{C}\mytest{\temp}
    \end{document}

    Die zweite Methode ist meist sehr viel übersichtlicher und auch leichter zu erweitern: Es reicht ein einfach \def\aktionD{DX}. Und du kannst den Werten auch leicht weitere Aktionen zuordnen (\def\weitereaktionA{AXX} ...) Allerdings dürfen die Werte (A,B, C, ....) nicht zu komplex sein. Und du musst eine klare Vorstellung habe, wie die Aktionen aussehen.

  12. #12
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Danke Ulrike, das ist tatsächlich die übersichtlichere Variante. Ich versuche mich mal damit...

  13. #13
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Ich komme noch einmal auf das Folgende zurück:
    Zitat Zitat von u_fischer Beitrag anzeigen
    Wenn ich das richtig sehe, dann ist der Inhalt des Feldes journaltitle im Makro \abx@field@journaltitle gespeichert. Ich würde einfach diesen Inhalt benutzen, um unterschiedliche Befehle auszuführen (Ich gehe dabei davon aus, dass der Inhalt keine komplizierten Dinge enthält.). Außerdem würde ich \gls lokal umdefinieren.

    Code:
    \documentclass[11pt]{article}  
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    
    \begin{document}
    
    \makeatletter
    \def\bibmacrofor@abl{Benutze ABL!}
    \def\bibmacrofor@ABL{Benutze ABL!}
    \def\bibmacrofor@rpw{Benutze RPW}
    % usw ....
    
    \newcommand\journalcheck{%
     \begingroup
     \def\gls##1{##1}%
     \csname bibmacrofor@\abx@field@journaltitle\endcsname
     \endgroup}
     
    \def\abx@field@journaltitle{\gls{abl}}
     \journalcheck
     
    \def\abx@field@journaltitle{abl}
     \journalcheck
    
    \def\abx@field@journaltitle{ABL}
     \journalcheck
     
    \def\abx@field@journaltitle{rpw}
     \journalcheck
    
    \end{document}
    Es kann sein, dass im Feld Journaltitle steht: "{\gls{abl}}". Die Zeile
    Code:
    \def\abx@field@journaltitle{{\gls{abl}}}
     \journalcheck
    wird jedoch nicht erkannt, da zuerst die äussersten Klammern entfernt werden müssten.

    Ich habe diesen Code gefunden, der das zu machen scheinT, kann ihn aber nicht auf das obige Beispiel anpassen. Weiss jemand Rat?

    Code:
     
       % \@defstrip defines a command that assumes that the true argument
       % comes embraced in braces "{}", and first strips off those braces,
       % before passing it to the parameter text.
       \def\@defstrip#1#2#{%
         \def#1##1{\@nameuse{\name#1.}##1}%
         \@namedef{\name#1.}#2}
       
       \def\@name@defstrip#1{\expandafter\@defstrip\csname #1\endcsname}
    Im folgenden MB müsste die letzte Ausgabe nicht "was anderes" sein, sondern "BENUTZE RPW".

    Code:
    \documentclass[11pt]{article}  
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    
    \begin{document}
    
    \makeatletter
    \def\bibmacrofor@abl{Benutze ABL!}
    \def\bibmacrofor@ABL{Benutze ABL!}
    \def\bibmacrofor@ABl{Benutze ABL!}
    \def\bibmacrofor@rpw{Benutze RPW}
    \def\bibmacrofor@RPW{Benutze RPW}
    % usw ....
    
    \newcommand\journalcheck{%
    \begingroup
     \def\gls##1{##1}%
      \def\Gls##1{##1}%
    \ifcsname bibmacrofor@\abx@field@journaltitle\endcsname
     \csname bibmacrofor@\abx@field@journaltitle\endcsname
    \else
    was anderes
    \fi
     \endgroup
    }
     
    \def\abx@field@journaltitle{\Gls{abl}}
     \journalcheck
     
    \def\abx@field@journaltitle{abl}
     \journalcheck
    
    \def\abx@field@journaltitle{ABl}
     \journalcheck
     
    \def\abx@field@journaltitle{\gls{rpw}}
     \journalcheck
    
    \def\abx@field@journaltitle{RPW}
     \journalcheck
     
     \def\abx@field@journaltitle{gugus}
     \journalcheck
    
    \def\abx@field@journaltitle{{\gls{rpw}}}
     \journalcheck
    
    \end{document}

  14. #14
    Registrierter Benutzer
    Registriert seit
    19.03.2009
    Beiträge
    180
    Und was ich auch noch bräuchte, wäre, dass anstelle der Ausgabe "Benutze ABL!" bei
    Code:
    \def\bibmacrofor@abl{Benutze ABL!}
    die Variable tempP auf den Wert "abl" gesezt wird.

    Code:
    \def\bibmacrofor@abl{\def\tempP{abl}}
    funktioniert jedoch nicht.

Lesezeichen

Berechtigungen

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