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, 10:45

ErnstZ's gravatar image

ErnstZ
541425
Akzeptiert: 83%

bearbeitet 06 Aug '14, 08: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, 10:53

Ulrike%20Fischer's gravatar image

Ulrike Fischer
2.2k13

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, 03: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, 08:16) Ulrike Fischer
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×17
×6
×4
×3

Frage gestellt: 05 Aug '14, 10:45

Frage wurde angeschaut: 1,422 Mal

Zuletzt aktualisiert: 06 Aug '14, 08:20