Ich arbeite mich gerade in die Objektorientierung von pgf ein (zu finden im pgfmanual Kapitel 94), da ich es in meinem Dokument recht gut gebrauchen kann. Jedoch bin ich gerade auf das Problem gestoßen, dass ich auf definierte Methoden einer Klasse innerhalb der eckigen Klammern eines subfloat die Fehler bekomme, dass der Aufruf nicht der Definition entspricht. Ich vermute, es liegt an dem Parse-Vorgang von pgf, welcher Probleme mit den eckigen Klammern in der Umgebung hat. Hier ein Beispiel:

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{subfig}
\usepackage{pgf}
\usepgfmodule{oo}

\pgfooclass{MyClass}{
    \attribute name;    
    \method MyClass(#1){ % constructor
        \pgfooset{name}{#1} 
    }
    \method printName() {
        \pgfoovalueof{name}
    }   
}

\pgfoonew \myObject=new MyClass(Automatic Foo Bar)

\begin{document}

\begin{figure}
\centering
\subfloat[\myObject.printName()]{Manual Foo Bar}
\caption{Bla Bla}
\end{figure}

\myObject.printName()

\end{document}

Wenn man Manual Foo Bar gegen \myObject.printName() vertauscht, also statt den oben gezeigten Code \subfloat[Manual Foo Bar]{\myObject.printName()} nimmt, dann funktioniert das Beispiel. Kann mir hier jemand weiterhelfen?

gefragt 05 Aug '14, 16:45

ErnstZ's gravatar image

ErnstZ
611132833
Akzeptiert-Rate: 62%

bearbeitet 06 Aug '14, 14:20


Das Argument von subfloat "bewegt" sich: Es muss z.B. in Abbildungslisten wandern. Da darf es nicht zerbrechlich sein. Entweder benütze das zweite optionale Argument für den Listeneintrag oder schütze den Befehl:

Open in writeLaTeX
\subfloat[\protect\myObject.printName()]{Manual Foo Bar}
\subfloat[listeneintrag][{\myObject.printName()}]{Manual Foo Bar}
Permanenter link

beantwortet 05 Aug '14, 16:53

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.6k23
Akzeptiert-Rate: 52%

Vielen Dank Ulrike. Deine Lösung mit \protect bringt zwar prinzipiell keine Fehler, allerdings hat sie komische Seiteneffekte, da der Name zweimal ausgegeben wird und der Inhalt der Figure verschoben ist. Deine andere Lösung hingegen funktioniert wunderbar.

(06 Aug '14, 09:07) ErnstZ
1

Ja, protect hilft Fehler mit zerbrechlichen Befehlen zu verhindern, aber oft will man gar nicht, dass der Befehl wandert (gilt z.B. auch bei Fußnoten, cite u.ä).

(06 Aug '14, 14:16) Ulrike Fischer
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×27
×7
×4
×3

gestellte Frage: 05 Aug '14, 16:45

Frage wurde gesehen: 7,654 Mal

zuletzt geändert: 06 Aug '14, 14:20