alt text

Ich würde gerne für Tabellen \TabelleI, \TabelleII, \TabelleIII,... soetwas erstellen:

Öffne in Overleaf
\newcommand\TabelleII{
    \pgfplotstableread{
    p q
    4 5
    6 7
    }\temp
    \pgfplotstabletypeset[MyStyle]{\temp}
    }

Mir ist klar, dass man ein Problem beheben könnte, wenn die Tabellen nicht alle mit \temp benennt, aber den Schritt hier verschiedene Namen zu verwenden würde ich gerne umgehen.

Das ist 99,9%ig wieder etwas mit "expandafter, global, xdef usw." - ich weiß aber nicht wie das geht. :(

Öffne in Overleaf
\documentclass[border=5mm]{standalone}
\usepackage{pgfplotstable}

% geht: 
\pgfplotstableread{
a b
o 1
2 3
}\temp
%
\newcommand\TabelleI{
\pgfplotstabletypeset[MyStyle]{\temp}
}

% geht nicht:
\newcommand\TabelleII{
\pgfplotstableread{
p q
4 5
6 7
}\temp
\pgfplotstabletypeset[MyStyle]{\temp}
}

\pgfplotstableset{% Style, der obige Tabellen angewendet werden soll
MyStyle/.style={string type}
}

\begin{document}
geht: \TabelleI

geht nicht: %\TabelleII
\end{document}

gefragt 07 Okt '18, 19:06

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%

bearbeitet 07 Okt '18, 19:10

1

Bei mir geht \TabelleII wenn ich auf die Warnung in der .log-Datei höre und es mit \pgfplotstableread[row sep=\\]{ p q\\ 4 5\\ 6 7\\ }\temp probiere. Ich kann Dir aber nicht sagen, wieso.

(07 Okt '18, 19:15) moewe
1

Aha, Erklärungen dazu auf Seite 7 der PgfplotsTable-Dokumentation bei der row sep.

(07 Okt '18, 19:17) moewe

Ah, verdammt! Kommas, &'s und \\'s wollte ich auch vermeiden.

Habe hier https://tex.stackexchange.com/questions/226238/pgfplotstableread-dynamically-create-loaded-table-macro-from-pgfplotsinvokefor etwas in die Richtung gefunden... denke, dass es so geht. Aber das Beispiel dort ist gleich wieder ultra kompliziert.

(07 Okt '18, 19:22) cis
1

Ich denke nicht, dass Dir percusse's Antwort hier wriklich hilft. In seiner Anwort wird der Inhalt ja aus einer Datei gelesen. Wenn Du hier den Inhalt aus einer Datei liest, brauchst Du m.E. den ganzen Zauber nicht.

(07 Okt '18, 23:00) Community

Ja, ich glaube es gibt einen bugigen Hintergrund zu Inline-Tables und Datafile-Tables - als Anhaltspunkt:

https://sourceforge.net/p/pgfplots/bugs/193/

im hierigen Thread https://texwelt.de/wissen/fragen/22945/pgfplots-patch-pgfplotstable-datentabellen-aus-dem-code-auslagern

(ich wollte dazu mal etwas eröffnen)

Schade... es wäre gut, wenn es mit Inline-Tables ginge.

(08 Okt '18, 08:04) cis

@Murmeltier Dich interessieren ja immer auch die Hintergründe; dazu: ich möchte ein Applet für Lineare Gleichungssysteme erstellen, dass im Hinblick auf die Umformungsschitte, wie sie bei LGSen üblich sind, mit einer sehr mageren Notation aufwartet (ein Bild dazu hier).

Nun sollen natürlich die erweiterten Koeffizientenmatrizen dazu auch möglichst sparsam eingebbar sein (also ohne Komma, &, \\), sonst wäre es kein gescheites Applet.

(08 Okt '18, 18:01) cis

Daher suche ich auch teilweise nicht einfach nach einer BruteForce Lösung um jeden Preis. Das ist ganz einfach der Hintergrund.

(08 Okt '18, 18:02) cis

\pgfplotstableread benötigt catcode Änderungen (zumindest ist in der Definition von \pgfplotstableread@impl das schöne Macro \pgfplotstablecollectoneargwithpreparecatcodes, dessen Name förmlich schreit, dass es schief geht). Ohne ein manuelles Setzen von row sep benötigt \pgfplotstableread also Veränderungen von catcodes, die im Argument von \newcommand nicht mehr durchgeführt werden können (ohne fiese Tricks). Wie sonst sollte es das Ende einer Zeile von einem Leerzeichen zwischen Spalten unterscheiden?

(08 Okt '18, 19:53) Skillmon

@Skillmon Und ich dachte, das müsste ggf. auch wie in Deiner anderen Antwort gehen. Da hab ich mich wohl geirrt.

(09 Okt '18, 04:50) cis
Ergebnis 5 von 9 show 4 more comments

Das Folgende definiert dir ein Macro, dass deine Tabellen in der von dir gewünschten Syntax liest und ein Macro definiert, um diese auszugeben. Allerdings benötigt auch das Macro zum Tabellendefinieren catcode Änderungen und kann nicht im Argument anderer Macros verwendet werden! Ob dir das Ganze hilft, weiß ich nicht. Die Lösung zum Definieren der Macros ist ähnlich wie in https://texwelt.de/wissen/fragen/23269/pgfplotstable-eine-anzahl-newcommands-automatisch-erstellen, allerdings verwende ich hier expl3, um mir das Leben ein wenig zu vereinfachen:

Öffne in Overleaf
\documentclass[border=5mm]{standalone}
\usepackage{pgfplotstable}
\usepackage{xparse}

\ExplSyntaxOn
\cs_new_protected:Npx \cis_replace_verb_newline:Nn #1 #2
  {
    \tl_replace_all:Nnn #1 { \char_generate:nn { 13 } { 12 } } { #2 }
  }
\cs_new_protected:Npx \cis_replace_verb_newline_newline:Nn #1 #2
  {
    \tl_replace_all:Nnn #1
      { \char_generate:nn { 13 } { 12 } \char_generate:nn { 13 } { 12 } } { #2 }
  }
\cs_new_protected:Npn \cis_process_verb_newline:nnn #1 #2 #3
  {
    \tl_set:Nn \ProcessedArgument { #3 }
    \cis_replace_verb_newline_newline:Nn \ProcessedArgument { #2 }
    \cis_replace_verb_newline:Nn \ProcessedArgument { #1 }
  }
\cs_new_protected:Npn \cis_def_tabelle_inner:Nn #1 #2
  {
    \scantokens{\pgfplotstableread[row~sep=\\]{#2}}#1
  }
\cs_generate_variant:Nn \cis_def_tabelle_inner:Nn { cn }
\int_new:N \g_cis_tabellen_int
\NewDocumentCommand \DefTabelle
  {
    m
    >{ \cis_process_verb_newline:nnn { \\ } { \\\\ } } +v
  }
  {
    \int_gincr:N \g_cis_tabellen_int
    \cis_def_tabelle_inner:cn { CisTab \int_use:N \g_cis_tabellen_int } { #2 }
    \cs_set:Npx #1
      {
        \exp_not:N \pgfplotstabletypeset [ MyStyle ]
          {
            \exp_after:wN \exp_not:N
            \cs:w CisTab \int_use:N \g_cis_tabellen_int \cs_end:
          }
      }
  }
\ExplSyntaxOff

\pgfplotstableset{MyStyle/.style={string type}}

\DefTabelle \TabelleI
  {
    p q
    4 5
    6 7
  }

\begin{document}
\TabelleI
\end{document}
Permanenter link

beantwortet 08 Okt '18, 20:33

Skillmon's gravatar image

Skillmon
1.2k6
Akzeptiert-Rate: 46%

bearbeitet 08 Okt '18, 20:43

Ui... Woher weißt denn Du das alles?

(09 Okt '18, 04:50) cis
1

@cis hauptsächlich durch meine Tätigkeiten, in denen ich Nutzlospakete für LaTeX schreibe, und durch meine bevorzugte Variante des Prokrastinieren: Fragen hier und auf TeX.SX beantworten. Du kannst das obige Macro übrigens auch nicht in \loop verwenden (\loop liest den Inhalt bis \repeat als Argument ein). Den Ansatz mit \cis_process_verb_newline:nnn habe ich bspw. für ducksay geschrieben (der ist zwar eigentlich nicht optimal aber hier stört das nicht, weil \pgfplotstableread klug genug ist, die erste leere Zeile zu ignorieren, wie es scheint).

(09 Okt '18, 11:27) Skillmon

@Skillmon Durch Deine Antworten habe mein Applet für Lineare Gleichungssysteme so gut wie fertig [übrigens viel toller als gauss.sty :)]. Ich muss nur noch das mit diesen Klammern rausfinden, woran ich mir gerade die Zähne ausbeiße.

(09 Okt '18, 11:43) cis
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:

×39

gestellte Frage: 07 Okt '18, 19:06

Frage wurde gesehen: 4,052 Mal

zuletzt geändert: 09 Okt '18, 11:43