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 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 |
Ok langsam verstehe ich das Ganze ein wenig besser. Habe nochmal im pgfmanual nachgeschaut und folgenden Befehl gefunden, der mir bei dieser Geschichte weiterhilft:
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} beantwortet 06 Aug '14, 13:14 ErnstZ |
Ich würde ja wetten, dass
\myObject
nicht expandierbar ist, was aber nötig wäre für\lstinputlisting
@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.