PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : usebox, sbox, eigener Befehl



RungeZipperer
28-08-2006, 09:30
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?



%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:


\defbx{test}{Hallo}

erzeugt den Fehler:
A box was supposed to be here

RedCloud
28-08-2006, 13:40
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?



%Box anlegen und speichern
\newcommand{\defbx}[2]{\newsavebox{\#1}
\sbox{\#1}{#2}
}

%Box einfuegen
\newcommand{\usebx}[2]{
\begin{figure}
\usebox{\#2}




\usebox\csname#2\endcsname

sonst bekommst du ja mit \#2 das _Zeichen_ #, gefolgt von der 2.

rc

RungeZipperer
28-08-2006, 14:17
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.



%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!

RedCloud
28-08-2006, 15:18
OK, danke. Das leuchtet ein.

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

Command \csnametest \endcsname already defined.



%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.



\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

RungeZipperer
28-08-2006, 15:31
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 :confused:

RedCloud
28-08-2006, 16:23
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 ...


\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

RungeZipperer
29-08-2006, 08:41
Supi, klappt :)

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



\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.

:confused: :confused: :confused:

rais
29-08-2006, 18:08
Supi, klappt :)

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



\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.

:confused: :confused: :confused:
Schaetze mal, Du setzt \makeatother zu frueh - Dein \@gobble kommt jetzt erst danach ;)
MfG,

RedCloud
29-08-2006, 19:35
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

rais
29-08-2006, 20:17
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,

RungeZipperer
30-08-2006, 08:27
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 :)

RedCloud
30-08-2006, 15:29
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

RungeZipperer
30-08-2006, 16:40
\newcommand[2]\pstI{%
\centering
\begin{pspicture}(5,5)
... wat auch immer hier ...
\end{pspicture}
\caption{#1}\label{#2}%
}

:confused: Aber dann habe ich doch nix ausgelagert. Meine Plots haben 2000 Zeilen. Und die stehen dann immer noch im Hauptdokument. :confused:

Momentchen mal...d.h. ich soll für jedes Bildchen einen Befehl definieren...ahhhhhhhhhhhhh. Der Groschen fällt langsam....