Anzeige:
Ergebnis 1 bis 13 von 13

Thema: usebox, sbox, eigener Befehl

  1. #1
    Registrierter Benutzer
    Registriert seit
    10.11.2004
    Beiträge
    124

    usebox, sbox, eigener Befehl

    Ich wollte mir die Handhabung von usebox ein wenig vereinfachen. Dazu habe ich die folgenden 2 Befehle definiert. Um immer dafür zu sorgen, dass der Boxname gleich dem Label der (pstricks-)Zeichnung ist, will ich den Namen der Box ohne Backslash eingeben und im Befehl \newsavebox hinzufügen (daher \#1). Das mag Latex aber wohl nicht. \textbackslash macht die Sache nicht besser. Wie füge ich den String richtig zusammen?

    Code:
    %Box anlegen und speichern
    \newcommand{\defbx}[2]{\newsavebox{\#1}
    \sbox{\#1}{#2}
    }
    
    %Box einfuegen
    \newcommand{\usebx}[2]{
    \begin{figure}
    \usebox{\#2}
    \label{fig:#2}
    \caption{#1}
    \end{figure}
    }
    Beispiel:

    Code:
    \defbx{test}{Hallo}
    erzeugt den Fehler:
    A box was supposed to be here

  2. #2
    Registrierter Benutzer
    Registriert seit
    26.05.2006
    Beiträge
    879
    Zitat Zitat von RungeZipperer Beitrag anzeigen
    Ich wollte mir die Handhabung von usebox ein wenig vereinfachen. Dazu habe ich die folgenden 2 Befehle definiert. Um immer dafür zu sorgen, dass der Boxname gleich dem Label der (pstricks-)Zeichnung ist, will ich den Namen der Box ohne Backslash eingeben und im Befehl \newsavebox hinzufügen (daher \#1). Das mag Latex aber wohl nicht. \textbackslash macht die Sache nicht besser. Wie füge ich den String richtig zusammen?

    Code:
    %Box anlegen und speichern
    \newcommand{\defbx}[2]{\newsavebox{\#1}
    \sbox{\#1}{#2}
    }
    
    %Box einfuegen
    \newcommand{\usebx}[2]{
    \begin{figure}
    \usebox{\#2}
    Code:
    \usebox\csname#2\endcsname
    sonst bekommst du ja mit \#2 das _Zeichen_ #, gefolgt von der 2.

    rc

  3. #3
    Registrierter Benutzer
    Registriert seit
    10.11.2004
    Beiträge
    124
    sonst bekommst du ja mit \#2 das _Zeichen_ #, gefolgt von der 2.
    OK, danke. Das leuchtet ein.

    Allerdings ist folgender Code auch nicht richtig, denn ich erhalte den Fehler

    Command \csnametest \endcsname already defined.

    Code:
    %Box anlegen und speichern
    \newcommand{\defbx}[2]{\newsavebox{\csname #1 \endcsname}
    \sbox{\csname #1 \endcsname}{#2}
    }
    
    \defbx{test}{Hallo}
    By the way: Wo gibts denn ne ordentliche Doku zu Tex? Ich hab nämlich keine Ahnung, was \csname etc. so alles anstellt!

  4. #4
    Registrierter Benutzer
    Registriert seit
    26.05.2006
    Beiträge
    879
    Zitat Zitat von RungeZipperer Beitrag anzeigen
    OK, danke. Das leuchtet ein.

    Allerdings ist folgender Code auch nicht richtig, denn ich erhalte den Fehler

    Command \csnametest \endcsname already defined.

    Code:
    %Box anlegen und speichern
    \newcommand{\defbx}[2]{\newsavebox{\csname #1 \endcsname}
    \sbox{\csname #1 \endcsname}{#2}
    }
    
    \defbx{test}{Hallo}
    Stimmt, du musst hier den Boxnamen schon mit \ übergeben.

    Code:
    \newcommand{\defbx}[2]{\newsavebox{#1}\sbox{#1}{#2}}
    
    \defbx{\test}{Hallo}
    By the way: Wo gibts denn ne ordentliche Doku zu Tex? Ich hab nämlich keine Ahnung, was \csname etc. so alles anstellt!
    [/QUOTE]
    http://www.tug.org/TeXnik/mainFAQ.cgi?file=docs

    rc

  5. #5
    Registrierter Benutzer
    Registriert seit
    10.11.2004
    Beiträge
    124
    Stimmt, du musst hier den Boxnamen schon mit \ übergeben.

    Code:

    \newcommand{\defbx}[2]{\newsavebox{#1}\sbox{#1}{#2}} \defbx{\test}{Hallo}
    So hatte ich es zuerst, aber das ist genau, was ich nicht will. Funktioniert alles prima, aber dann habe ich Probleme bei usebox, denn ich will ja sicherstellen, dass das Label meiner Gleitumgebung und die Box denselben Namen haben.

    Bei usebox brauche ich den Namen mit Backslash
    \usebox{\#2} %Falscher Code

    beim Label ohne
    \label{fig:#2}

    Also würde ich meinem Namen gerne ein Backslash hinzufügen.

    Hab schonmal an das \string Makro gedacht...bin da aber auch nicht zum Ergebnis gekommen

  6. #6
    Registrierter Benutzer
    Registriert seit
    26.05.2006
    Beiträge
    879
    Zitat Zitat von RungeZipperer Beitrag anzeigen
    So hatte ich es zuerst, aber das ist genau, was ich nicht will. Funktioniert alles prima, aber dann habe ich Probleme bei usebox, denn ich will ja sicherstellen, dass das Label meiner Gleitumgebung und die Box denselben Namen haben.

    Bei usebox brauche ich den Namen mit Backslash
    \usebox{\#2} %Falscher Code

    beim Label ohne
    \label{fig:#2}

    Also würde ich meinem Namen gerne ein Backslash hinzufügen.
    oder umgekehrt ...
    Code:
    \makeatletter
    \newcommand\defbx[2]{%
      \newsavebox#1%
      \savebox#1{#2}%
      \label{\expandafter\@gobble\string#1}
    }
    \makeatother
    \newcommand\usebx[1]{\usebox#1}
    
    \begin{document}
    
    \defbx{\test}{Hallo}
    \usebx{\test} XXX \usebx{\test}
    
    \clearpage siehe \pageref{test}\clearpage
    rc

  7. #7
    Registrierter Benutzer
    Registriert seit
    10.11.2004
    Beiträge
    124
    Supi, klappt

    Was mir allerdings völlig schleiherhaft ist: Warum kann ich das Label nicht auch bei \usebx erst setzen?

    Code:
    \makeatletter
    \newcommand\defbx[2]{%
      \newsavebox#1%
      \savebox#1{#2}%  
    }
    
    %Box ausgeben
    \makeatother
    \newcommand\usebx[2]{%
    \begin{figure}%
    \usebox#1%
    \caption{#2}%
    \label{\expandafter\@gobble\string#1}%
    \end{figure}%
    }
    Das klappt interessanterweise nicht. Es wird verwiesen auf eine Zeile in der .aux:

    \newlabel{\spacefactor \@m gobble\test}{{1}{3}}

    mit dem Fehler

    Missing \endscname inserted.


  8. #8
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Zitat Zitat von RungeZipperer Beitrag anzeigen
    Supi, klappt

    Was mir allerdings völlig schleiherhaft ist: Warum kann ich das Label nicht auch bei \usebx erst setzen?

    Code:
    \makeatletter
    \newcommand\defbx[2]{%
      \newsavebox#1%
      \savebox#1{#2}%  
    }
    
    %Box ausgeben
    \makeatother
    \newcommand\usebx[2]{%
    \begin{figure}%
    \usebox#1%
    \caption{#2}%
    \label{\expandafter\@gobble\string#1}%
    \end{figure}%
    }
    Das klappt interessanterweise nicht. Es wird verwiesen auf eine Zeile in der .aux:

    \newlabel{\spacefactor \@m gobble\test}{{1}{3}}

    mit dem Fehler

    Missing \endscname inserted.

    Schaetze mal, Du setzt \makeatother zu frueh - Dein \@gobble kommt jetzt erst danach
    MfG,
    Rainer
    There's nothing a good whack with a hammer won't fix!

  9. #9
    Registrierter Benutzer
    Registriert seit
    26.05.2006
    Beiträge
    879
    Zitat Zitat von rais Beitrag anzeigen
    Schaetze mal, Du setzt \makeatother zu frueh - Dein \@gobble kommt jetzt erst danach
    MfG,
    und mal ganz nebenbei gefragt, wozu soll die Box überhaupt gut sein??
    Die brauchst du doch gar nicht ...

    rc

  10. #10
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Zitat Zitat von RedCloud Beitrag anzeigen
    und mal ganz nebenbei gefragt, wozu soll die Box überhaupt gut sein??
    Die brauchst du doch gar nicht ...

    rc
    Was soll ich sagen? Das hab' ich mich auch schon gefragt ;-)
    MfG,
    Rainer
    There's nothing a good whack with a hammer won't fix!

  11. #11
    Registrierter Benutzer
    Registriert seit
    10.11.2004
    Beiträge
    124
    Wozu ich die Box brauche?

    Also, meine Dokumente bestehen zu großen Teilen aus pstricks-Zeichnungen (plots, etc.). Das macht das Hauptdokument sehr unübersichtlichlich. Deshalb will ich alle diese Zeichnungen auslagern, aber nicht jede Zeichnung in eine Datei. OK, wäre auch möglich....aber ich fand´s mit dem usebox eigentlich ganz praktisch. Jetzt gibt es eine Datei zeichnungen.tex, in der ich mit \defbx die Zeichnungen speichere und im Hauptdokument steht dann nur noch \usebx und es ist sofort ein label vergeben und es handelt sich um ein Gleitobjekt.
    Bitte um Gegenvorschläge

  12. #12
    Registrierter Benutzer
    Registriert seit
    26.05.2006
    Beiträge
    879
    Zitat Zitat von RungeZipperer Beitrag anzeigen
    Wozu ich die Box brauche?

    Also, meine Dokumente bestehen zu großen Teilen aus pstricks-Zeichnungen (plots, etc.). Das macht das Hauptdokument sehr unübersichtlichlich. Deshalb will ich alle diese Zeichnungen auslagern, aber nicht jede Zeichnung in eine Datei. OK, wäre auch möglich....aber ich fand´s mit dem usebox eigentlich ganz praktisch. Jetzt gibt es eine Datei zeichnungen.tex, in der ich mit \defbx die Zeichnungen speichere und im Hauptdokument steht dann nur noch \usebx und es ist sofort ein label vergeben und es handelt sich um ein Gleitobjekt.
    Bitte um Gegenvorschläge
    \newcommand[2]\pstI{%
    \centering
    \begin{pspicture}(5,5)
    ... wat auch immer hier ...
    \end{pspicture}
    \caption{#1}\label{#2}%
    }

    fertig is ...

    rc

  13. #13
    Registrierter Benutzer
    Registriert seit
    10.11.2004
    Beiträge
    124
    \newcommand[2]\pstI{%
    \centering
    \begin{pspicture}(5,5)
    ... wat auch immer hier ...
    \end{pspicture}
    \caption{#1}\label{#2}%
    }
    Aber dann habe ich doch nix ausgelagert. Meine Plots haben 2000 Zeilen. Und die stehen dann immer noch im Hauptdokument.

    Momentchen mal...d.h. ich soll für jedes Bildchen einen Befehl definieren...ahhhhhhhhhhhhh. Der Groschen fällt langsam....
    Geändert von RungeZipperer (30-08-2006 um 16:44 Uhr)

Lesezeichen

Berechtigungen

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