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, 05:56

ErnstZ's gravatar image

ErnstZ
541425
Akzeptiert: 83%

1

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

(06 Aug '14, 06:04) Clemens

@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, 06:21) Ijon Tichy

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, 07:14

ErnstZ's gravatar image

ErnstZ
541425

bearbeitet 06 Aug '14, 08:18

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

Frage gestellt: 06 Aug '14, 05:56

Frage wurde angeschaut: 1,365 Mal

Zuletzt aktualisiert: 06 Aug '14, 08:18