Ulrike konnte mir bei meinem letzten pgfoo-Problem weiterhelfen. Ich habe die Vermutung, dass folgendes Problem verwandt ist, konnte es aber mit ihren Hinweisen nicht lösen.

Folgendes Beispiel schlägt fehl, mit der Meldung, dass der Aufruf der Methode \myObject.getFile() nicht ihrer Definition entspricht:

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{subfig}
\usepackage{filecontents}
\usepackage{pgf}
\usepgfmodule{oo}
\begin{filecontents*}{foo.bar}
Das ist ein Test
\end{filecontents*}
\pgfooclass{MyClass}{
\attribute name;
\attribute file;
\method MyClass(#1){ % constructor
\pgfooset{name}{#1}
}
\method printName() {
\pgfoovalueof{name}
}
\method setFile(#1) {
\pgfooset{file}{#1}
}
\method getFile() {
\pgfoovalueof{file}
}
}
\pgfoonew \myObject=new MyClass(Automatic Foo Bar)
\myObject.setFile(foo.bar)
\begin{document}
\lstinputlisting{\myObject.getFile()}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Weiß jemand Rat?

gefragt 06 Aug '14, 11:56

ErnstZ's gravatar image

ErnstZ
611142833
Akzeptiert-Rate: 62%

1

Ich würde ja wetten, dass \myObject nicht expandierbar ist, was aber nötig wäre für \lstinputlisting

(06 Aug '14, 12:04) cgnieder

@Clemens liegt absolut richtig, wie man mit einem einfachen \edef\test{\myObject} bzw. \test{\myObject.getFile()} überprüfen kann. Grundsätzlich können für Dateinamen nur Makros verwendet werden, die voll expandierbar sind und keine Absätze erzeugen. Wenn sie Leerzeichen erzeugen, endet der Dateinamen ggf. am ersten Leerzeichen.

(06 Aug '14, 12:21) gast3

Ok langsam verstehe ich das Ganze ein wenig besser. Habe nochmal im pgfmanual nachgeschaut und folgenden Befehl gefunden, der mir bei dieser Geschichte weiterhilft:

\pgfooget{<attribute>}{<macro>} Reads the current value of attribute and stores the result in macro.

Damit funktioniert Folgendes:

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{subfig}
\usepackage{filecontents}
\usepackage{pgf}
\usepgfmodule{oo}
\begin{filecontents*}{foo.bar}
Das ist ein Test
\end{filecontents*}
\pgfooclass{MyClass}{
\attribute name;
\attribute file;
\method MyClass(#1){ % constructor
\pgfooset{name}{#1}
}
\method printName() {
\pgfoovalueof{name}
}
\method setFile(#1) {
\pgfooset{file}{#1}
}
\method getFile() {
\pgfooget{file}{\fileMacro}
\lstinputlisting{\fileMacro}
}
}
\pgfoonew \myObject=new MyClass(Automatic Foo Bar)
\myObject.setFile(foo.bar)
\begin{document}
\myObject.getFile()
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 06 Aug '14, 13:14

ErnstZ's gravatar image

ErnstZ
611142833
Akzeptiert-Rate: 62%

bearbeitet 06 Aug '14, 14:18

Deine Antwort
[Vorschau ausblenden]

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

Frage-Themen:

×27
×23
×3

gestellte Frage: 06 Aug '14, 11:56

Frage wurde gesehen: 7,636 Mal

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