Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Eigene Makros funtionieren wegen versch. Packet nicht

  1. #1
    sLy
    Gast

    Eigene Makros funtionieren wegen versch. Packet nicht

    Hallo alle zusammen,

    ich bin neu hier und schreibe gerade meine Facharbeit mit LaTex. Hierzu soll ich die darstellung von Schaltbildern mit dem Erweiterungspaket pst-circ
    vereinfachen. Bin noch ein absoluter LaTex-Frischling, weshalb ich nun auf die Hilfe dieses Forums setzte.
    Ich habe dieses Problem bereits in einem anderen Forum gepostet und dort wurde mir gesagt, dass zwar \multido und auch \forloop in normalem Rahmen funktionieren, doch als Argument von \multidipole geht das nicht so einfach, da es die folgenden Argumente "bearbeitet" und mit den Makros danach nicht klarkommt.

    Hier ist mein Problem:
    Ich möchte meinen eigenen Befehl schreiben, der so aussehen soll:
    Code:
    \WiderstandParallel {3}

    Mit dem Parameter drei soll jetzt der eigentliche Befehl

    Code:
     \resistor[labeloffset=0]{$R_1$}
    3mal ausgegeben werden, wobei die Wiederstände nicht alle "R_1" heißen sollen, sondern fortlaufend nummeriert werden.

    Um in pst-circ mehrere Widerstände hintereinander zu schalten, muss man den Befehl

    Code:
     \multidipole (B) (C) \resistor [labeloffset=0] {$R_1$}\resistor [labeloffset=0] {$R_2$}\resistor [labeloffset=0] {$R_3$}. %Hier sind also 3 Widerstände hintereinandergeschalten. Die punkte B und C sind Punkt in einem Koordinatensystem, zwischen denen die Widerstände seien sollen. Der Punkt am Ende beendet \multidipole.
    verwenden.
    Wenn ich also jetzt meinen obigen Befehl"\WiderstandParallel {3}" eintippe, muss seine "Ausgabe"
    Code:
     \multidipole (B) (C) \resistor [labeloffset=0] {$R_1$}\resistor [labeloffset=0] {$R_2$}\resistor [labeloffset=0] {$R_3$}.
    sein.

    Hier ein kompilierbares Minibeispiel:
    Code:
    %Festlegung der Dokumentklasse:
    \documentclass[a4paper,twoside,]{article}
    
    %Auflistung aller verwendeten Packete:
    \usepackage{endnotes} %Erlaubt weitere Endnoten-Optionen
    \usepackage{ngerman} %Aktiviert u. a. die deutsche Trennung
    \usepackage[latin1]{inputenc}   %Erlaubt, dass Umlaute normal geschrieben werden können
    \usepackage{enumerate} %Erlaubt erweiterte Listen-Optionen
    \usepackage{url} %Unterstützt die Darstellung von URLs
    \usepackage{geometry} %Definiert die Seitenränder, Texthöher und -breite, sowie Hoch- oder Querformat
    \usepackage{graphicx} %Erleichterung der Arbeit mit Bildern
    \usepackage{rotating} %Rotieren von Texten
    \usepackage{color} %Für Farbe im Text
    \usepackage{verbatim} %Erleichtert das unveränderte setzen von Text (z.B. Syntax)
    \usepackage{pstricks,pst-circ} %Ermöglicht das erstellen von Schaltbildern
    \usepackage{multido}%Ermöglicht Schleifen
    
    \begin{document}
    
    %_____________________________________________________________________________________________________________________________
    
    \def\WiderstandReihe#1{
    \multidipole(B)(C)%
    \multido{\I=1+1}{#1}{\resistor[labeloffset=0]{$R_\I$}}%
    .
    }
    
    So ist es:
    \newline
    \bigskip
    
    
    \begin{pspicture}[showgrid=true](0,0)(8,5)
        \pnode(0.5,4.5){A}
        \pnode(0.5,1.75){B}
        \pnode(7.5,1.75){C}
        \pnode(7.5,4.5){D}
        \battery (D)(A){$U_0$}
        \wire (A)(B)
        \wire (C)(D)
       \WiderstandReihe{3}  
    \end{pspicture}
    
    \newline
    \bigskip
    \bigskip
    \bigskip
    \bigskip
    
    
    So sollte es sein:
    \newline
    \bigskip
    
    
    \begin{pspicture}[showgrid=true](0,0)(8,5)
        \pnode(0.5,4.5){A}
        \pnode(0.5,1.75){B}
        \pnode(7.5,1.75){C}
        \pnode(7.5,4.5){D}
        \battery (D)(A){$U_0$}
        \wire (A)(B)
        \wire (C)(D)
       \multidipole(B)(C)%
       \resistor[labeloffset=0]{$R_1$} \resistor[labeloffset=0]{$R_2$} \resistor[labeloffset=0]{$R_3$}%
       .  
    \end{pspicture}
    
    
    \end{document}

    Ich hoffe ihr könnt mir helfen. Danke im vorraus. Falls ich mein (doch recht kompliziertes) Problem zu umständlich geschildert haben sollte, fragt bitte nach.
    Falls ihr ebenfalls beispielcode verwendet, wäre ich für viele erklährende Kommentare sehr dankbar.

    Viele Grüße,
    sLy

  2. #2
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.046
    Zitat Zitat von sLy Beitrag anzeigen
    Falls ihr ebenfalls beispielcode verwendet, wäre ich für viele erklährende Kommentare sehr dankbar.
    Das ist nicht so einfach, weil \multidipole erst alle Bauteile sammeln muss. Mit \multido werden sie aber vorher schon "zerlegt". Mit \toks@ kann man jetzt erstmal alle Bauteile sammeln und am Ende komplett ausgeben, so als hätte man sie getippt.

    Code:
    \documentclass{article}
    \usepackage[T1]{fontenc}
    \usepackage[latin1]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage{pst-circ} 
    
    \makeatletter
    \newcommand*\InitToks{\toks@={}}
    \newcommand\AddToks[1]{\toks@=\expandafter{\the\toks@ #1}}
    \newcommand*\PrintToks{\the\toks@}
    
    \def\WiderstandReihe#1{%
     \begingroup
     \InitToks
     \AddToks{\multidipole(B)(C)}%
     \count@=0 %
     \loop\ifnum\count@<#1\relax
      \advance\count@ by 1 %
      \AddToks{\resistor[labeloffset=0]{$R_{\the\count@}$}}%
     \repeat
     \AddToks{.}%
     \PrintToks
     \endgroup}
    \makeatother
    
    \begin{document}
    
    \begin{pspicture}[showgrid=true](0,0)(8,5)
     \pnode(0.5,4.5){A}
     \pnode(0.5,1.75){B}
     \pnode(7.5,1.75){C}
     \pnode(7.5,4.5){D}
     \battery (D)(A){$U_0$}
     \wire (A)(B)
     \wire (C)(D)
     \WiderstandReihe{3}  
    \end{pspicture}
    
    \end{document}
    Herbert

  3. #3
    sLy
    Gast
    Hi,
    danke für deine antwort.
    Leider werden die Widerstände nicht der reihe nach nummeriert, sondern heißen alle R3

    Da ich diese syntax nicht einfach in meinen Quellcode einbinden kann, sondern sie auch noch verstehen muss, wäre ich für eine erklärung sehr dankbar (z.b. allgemeine syntax des \toks befehls)

    was bedeuten die @ zeichen hinter den variablen?

    mfg
    sLy

  4. #4
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.046
    Zitat Zitat von sLy Beitrag anzeigen
    Leider werden die Widerstände nicht der reihe nach nummeriert, sondern heißen alle R3

    Da ich diese syntax nicht einfach in meinen Quellcode einbinden kann, sondern sie auch noch verstehen muss, wäre ich für eine erklärung sehr dankbar (z.b. allgemeine syntax des \toks befehls)

    was bedeuten die @ zeichen hinter den variablen?
    habe jetzt erst die Frage gesehen. Hast du sie gelöst?

    Herbert

  5. #5
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.801
    Hallo Herbert,

    ganz schön harte Nuss;-)
    Ich denke mal das Problem ist hier, daß `\the\count@' genau so in \toks@ landet (eben nicht der aktuelle Zählerstand) und an diesem aktuellen-Zählerstand-in-\toks@ hab ich mir erstmal die Zähne dran ausgebissen ... bis ich mich gefragt hab, warum nicht zweimal durchzählen?
    Code:
    \documentclass{article}
    \usepackage[T1]{fontenc}
    \usepackage[latin1]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage{pst-circ} 
    
    \makeatletter
    \newcommand*\InitToks{\toks@={}}
    \newcommand\AddToks[1]{\toks@=\expandafter{\the\toks@ #1}}
    \newcommand*\PrintToks{\the\toks@}
    \newcounter{wid@r}
    \newcommand*\init@wid{\setcounter{wid@r}{0}}
    \newcommand*\next@wid{\stepcounter{wid@r}}
    \def\WiderstandReihe#1{%
      \begingroup
        \InitToks
        \AddToks{\init@wid}%
        \AddToks{\multidipole(B)(C)}%
        \init@wid
        \loop\ifnum\c@wid@r<#1\relax
          \next@wid
          \AddToks{\resistor[labeloffset=0]{$R_{\next@wid\thewid@r}$}}%
        \repeat
        \AddToks{.}%
        \PrintToks
      \endgroup}
    \makeatother
    
    \begin{document}
    
    \begin{pspicture}[showgrid=true](0,0)(8,5)
     \pnode(0.5,4.5){A}
     \pnode(0.5,1.75){B}
     \pnode(7.5,1.75){C}
     \pnode(7.5,4.5){D}
     \battery (D)(A){$U_0$}
     \wire (A)(B)
     \wire (C)(D)
     \WiderstandReihe{3}  
    \end{pspicture}
    
    \end{document}
    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
  •