Probleme mit \usebox und \label

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Probleme mit \usebox und \label

von Deancel » So 8. Jan 2012, 23:42

Kurzer Nachtrag, den ich mit cgnieder per PN geführt habe, der aber auch für andere interessant sein könnte.



DEANCEL:
Nochmal kurz ein Nachtrag zu dem im Grunde gelösten Problem:

Mit der edef-Variante erhalte ich jetzt, wenn ich als caption einen längeren Text eingebe, z.B.
"Kartesisches Produkt der Mengen $A=\{a,b,c\}$ und $B=\{1,2,3\}$"
die Fehlermeldung:
TeX capacity exceeded, sorry [input stack size=5000]



CGNIEDER:
Du könntest einfach auf die mit xparse definierte Variante umsteigen, damit geht es nämlich fehlerfrei.

Oder die Zeile
\def\odef#1#2{\expandafter\def\expandafter#1\expandafter{#2}}
einfügen und in der Umgebungsdefinition \edef durch \odef ersetzen.



DEANCEL:
Die letzte Lösung funktioniert nun bei mir einwandfrei.
Vielen Dank dafür.

von Deancel » So 8. Jan 2012, 19:49

Klar ist das ok.

von cgnieder » So 8. Jan 2012, 19:42

\edef ist ein TeX-Befehl. Da wird der Befehl bei der Definition gleich expandiert, wodurch in diesem Fall das Argument „gespeichert“ wird.

Siehe z.B. das TeXbook für weitere Informationen.

PS: ich habe den Status mal auf „beantwortet“ gestellt. Ich hoffe, das ist ok...

von Deancel » So 8. Jan 2012, 19:35

Ja, sauber! Die Variante mit \edef funktioniert einwandfrei!
Den Befehl kannte ich gar nicht. Hab zwar stundenlang gegoogelt, bin dabei aber nur auf die Möglichkeit mit den saveboxes gestoßen.

Vielen, vielen Dank!
Und noch einen schönen Sonntagabend.

von cgnieder » So 8. Jan 2012, 19:02

Ich würde entweder \edef verwenden, um Caption und Label zu speichen, oder die Umgebung mit xparse definieren:
\documentclass[12pt,oneside]{scrreprt}
\usepackage{tikz,float}

\newenvironment{grafik}[3][H]
  {\begin{figure}[#1] \edef\GrafikCaption{#2} \edef\GrafikLabel{#3} \begin{center} \begin{tikzpicture}}
  {\end{tikzpicture} \end{center} \caption{\GrafikCaption}\label{\GrafikLabel}\end{figure}}

% oder mit xparse:
\usepackage{xparse}
\NewDocumentEnvironment{xgrafik}{O{H}mm}
  {\begin{figure}[#1]\begin{center}\begin{tikzpicture}}
  {\end{tikzpicture}\end{center}\caption{#2}\label{#3}\end{figure}}

\begin{document}

\begin{grafik}{Venn-Diagramm einer echten Teilmenge}{label}
   \draw (0,0) circle (1) node[] {$Z_1$};
   \draw (0.5,0) circle(2) node[]{};
   \node (L) at (1.75,0) {L};
\end{grafik}

\begin{xgrafik}{Venn-Diagramm einer echten Teilmenge}{label_zwo}
   \draw (0,0) circle (1) node[] {$Z_1$};
   \draw (0.5,0) circle(2) node[]{};
   \node (L) at (1.75,0) {L};
\end{xgrafik}

\begin{xgrafik}[htp]{Venn-Diagramm einer echten Teilmenge}{label_drei}
   \draw (0,0) circle (1) node[] {$Z_1$};
   \draw (0.5,0) circle(2) node[]{};
   \node (L) at (1.75,0) {L};
\end{xgrafik}

\end{document}

Probleme mit \usebox und \label

von Deancel » Fr 6. Jan 2012, 15:17

Ich habe in meinem newenvironment das Problem, dass ich die Fehlermeldung "Missing \endcsname inserted" erhalte.
Die Umgebung soll folgendermaßen funktionieren:
\documentclass[12pt,oneside]{scrreprt}
\usepackage[latin1]{inputenc}						
\usepackage[babel,german=quotes]{csquotes}
\usepackage[german]{babel}
\usepackage{fancyhdr}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{shapes,backgrounds}
\usepackage{array}

\newsavebox{\GrafikCaption}
\newsavebox{\GrafikLabel}
\newenvironment{grafik}[2]
{\begin{figure}[H] \sbox{\GrafikCaption}{#1} \sbox{\GrafikLabel}{#2} \begin{center} \begin{tikzpicture}}
{\end{tikzpicture} \end{center} \caption{\label{\usebox{\GrafikLabel}}\usebox{\GrafikCaption}} \end{figure}}


\begin{grafik}{Venn-Diagramm einer echten Teilmenge}{label}
	\draw [fill=yellow!50] (0,0) circle(1) node[]{$Z_1$};
	\draw (0.5,0) circle(2) node[]{};
	\node (L) at (1.75,0) {L};
\end{grafik}
Das newenvironment soll einfach den Code innerhalb der Arbeit abkürzen. Mit Caption soll eine Beschriftung unterhalb der Grafik entstehen, daher die Verschachtelung mit newsavebox. Die Labels brauche ich für einen Bezug.

Das Problem scheint die Stelle \label{\usebox{\GrafikLabel} zu sein. Wenn ich stattdessen \label{test} eingebe, funktioniert es einwandfrei. Das Label muss ja aber nach Caption kommen, deshalb sind andere Stellen ausgeschlossen.
Wo ist mein Fehler?

Ich habe auch schon versucht, das \label nicht ins Environment zu nehmen sondern manuell an die Stelle vor \end{grafik} zu schreiben. Allerdings ist die Referenz dann nicht die Grafik, sondern die Section. Das bringt also auch nichts.

Nach oben