Anzeige:
Ergebnis 1 bis 5 von 5

Thema: \g@addto@macro

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

    Question \g@addto@macro

    Hallo,

    bevor die Frage kommt, hier das Minimalbeispiel.

    Code:
    \documentclass[a4paper,12pt,ngerman]{scrreprt}
    \usepackage{babel}
    \usepackage[utf8]{inputenc}
    
    \makeatletter
    \newenvironment{testum}{\begin{list}{\bfseries Zeile:}{\itshape\large}
    \item[\Large Vorwort:]
    }{\end{list}}
    \g@addto@macro\testum{\small}%
    \makeatother
    
    \begin{document}
    \begin{testum}
    Hier soll eine eigene Liste hin
    \item Nummer 1
    \item Nummer 2
    \end{testum}
    
    \end{document}
    So nun meine Frage:
    Mithilfe der Anweisung \g@addto@macro kann ich diverse Sachen in schon definierte Listen schreiben. Jetzt meine Sorge. Ist es Möglich mittels der Anweisung \g@addto@macro auch auf den Befehl \item[\Large Vorwort:] einzuwirken. Also aus Large mache huge?

    Ich versuche gerade den Befehl zu verstehen. Die Definition ist in der latex.ltx wie folgt hinterlegt:
    Code:
    \long\def\g@addto@macro#1#2{%
      \begingroup
        \toks@\expandafter{#1#2}%
        \xdef#1{\the\toks@}%
      \endgroup}
    Danke und Gruß
    Marco

  2. #2
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von mechanicus Beitrag anzeigen
    So nun meine Frage:
    Mithilfe der Anweisung \g@addto@macro kann ich diverse Sachen in schon definierte Listen schreiben. Jetzt meine Sorge. Ist es Möglich mittels der Anweisung \g@addto@macro auch auf den Befehl \item[\Large Vorwort:] einzuwirken. Also aus Large mache huge?

    Ich versuche gerade den Befehl zu verstehen. Die Definition ist in der latex.ltx wie folgt hinterlegt:
    Es geht, aber damit setzt du die _komplette_ Umgebung auf small.
    Beispiel:
    Code:
    \documentclass[a4paper,12pt,ngerman]{scrreprt}
    \usepackage{babel}
    \usepackage[utf8]{inputenc}
    
    \makeatletter
    \newenvironment{testum}{\begin{list}{\bfseries Zeile:}{\itshape\large}
    \item[\Large Vorwort:]
    }{\end{list}}
    \g@addto@macro\testum{\tiny}%
    \makeatother
    
    \begin{document}
    \begin{testum}
    Hier soll eine eigene Liste hin
    \item Nummer 1
    \item \large Nummer 2
    \end{testum}
    
    foo
    
    \end{document}
    Das ist ja in diesem Fall nicht dass, was du willst. Außerdem muss man bei Umgebungen,
    die eigentlich aus zwei Makros \itemize und \enditemize bestehen, immer ein wenig aufpassen. Die kann man
    nicht immer einfach so ergänzen.

    Code:
    \long\def\g@addto@macro#1#2{%  long->Parameter können \par enthalten
      \begingroup
        \toks@\expandafter{#1#2}%  expandiere erst #1 (das aktuelle Makro) und hänge #2 dahinter, \toks@ ist ein internes Tokenregister
        \xdef#1{\the\toks@}% globale Neudefinition des alten Makros
      \endgroup}
    Herbert

  3. #3
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von voss Beitrag anzeigen
    Das ist ja in diesem Fall nicht dass, was du willst. Außerdem muss man bei Umgebungen,
    die eigentlich aus zwei Makros \itemize und \enditemize bestehen, immer ein wenig aufpassen. Die kann man
    nicht immer einfach so ergänzen.

    Code:
    \long\def\g@addto@macro#1#2{%  long->Parameter können \par enthalten
      \begingroup
        \toks@\expandafter{#1#2}%  expandiere erst #1 (das aktuelle Makro) und hänge #2 dahinter, \toks@ ist ein internes Tokenregister
        \xdef#1{\the\toks@}% globale Neudefinition des alten Makros
      \endgroup}
    Herbert
    Das ist ein super Erklärung. Dann kann ich damit noch ein Wenig rumspielen.
    Habe ich mir auch wieder ein schwieriges Makro rausgesucht

    Das bedeutet aber auch, dass für die Neudefinition von diversen Befehlen nur eine globale Erweiterung stattfinden kann, aber keine Neudefinion von irgendwelchen Befehlen?

    Gruß und Danke
    Marco

  4. #4
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von mechanicus Beitrag anzeigen
    Das bedeutet aber auch, dass für die Neudefinition von diversen Befehlen nur eine globale Erweiterung stattfinden kann, aber keine Neudefinion von irgendwelchen Befehlen?
    Neudefinition geht nicht mit \g@addto@macro. Das macht man dann analog
    zu latex.ltx meistens mit renewcommand oder eben \def, was allerdungs alles
    gnadenlos überbügelt.

    Hier ein Beispiel, wo \g@addto@macro in die Hose geht. Du kannst das letzte
    Beispiel mit dem vorletzten vertauschen und siehst dann, das \begingroup ...
    \endgroup dort keine Wirkung haben und das alles zerschossen ist.

    Herbert

    Code:
    \listfiles
    \documentclass[12pt,parskip]{scrartcl}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{bera,graphicx}
    
    \begin{document}
    \begin{description}
     \item[Linux] Feine Sache
     \item[Windows] Zu kalt, bei dem Wetter 
    \end{description}
    
    \renewcommand*\descriptionlabel[1]{%
      \normalfont\ttfamily\bfseries\reflectbox{#1}}% :-)
    
    \begin{description}
     \item[Linux] Feine Sache
     \item[Windows] Zu kalt, bei dem Wetter 
    \end{description}
    
    \renewcommand*\descriptionlabel[1]{%
      \normalfont\ttfamily\bfseries#1}
    
    Das folgende geht \emph{nicht} in die Hose und kann lokal gehalten
    werden:
    \begingroup
    \makeatletter
      \let\@Item\@item
      \def\@item[#1]{\@Item[#1:]}
    \makeatother
    
    \begin{description}
     \item[Linux] Feine Sache
     \item[Windows] Zu kalt, bei dem Wetter 
    \end{description}
    \endgroup
    
    Das folgende geht jetzt aber voll in die Hose:
    \makeatletter\g@addto@macro{\item}{:}\makeatother
    
    \begin{description}
     \item[Linux] Feine Sache
     \item[Windows] Zu kalt, bei dem Wetter 
    \end{description}
    
    \verb+\item+ ist nicht so einfach zu ergänzen ...
    
    \end{document}

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

    Dieses Beispiel hilft mir sehr. Danke. Irgendwann muss man ja mal anfangen, sich mit solchen Befehlen auseinander zu setzen, wenn man nicht auf der Stelle treten möchte.

    Gruß
    Marco

Lesezeichen

Berechtigungen

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