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

Weiß jemand Rat?

gefragt 06 Aug '14, 11:56

ErnstZ's gravatar image

ErnstZ
611132833
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
\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}
Permanenter link

beantwortet 06 Aug '14, 13:14

ErnstZ's gravatar image

ErnstZ
611132833
Akzeptiert-Rate: 62%

bearbeitet 06 Aug '14, 14:18

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
×23
×3

gestellte Frage: 06 Aug '14, 11:56

Frage wurde gesehen: 7,402 Mal

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