Crosspost: Matheplanet


Ich habe mit Sage eine Funktion definiert. Wie kann ich diese in einer pgfplotstable anwenden?

Hinweis: Falls kein Sage installiert ist, kann https://cocalc.com/ (SageMathCloud) verwendet werden (dort New LaTeX-Document...).

Öffne in Overleaf
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[margin=.25in]{geometry}
%\usepackage{kpfonts}  %Changing the default fonts
\usepackage{sagetex}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.12}

\begin{document}
\pagestyle{empty}
Test:

\begin{sagesilent}
sigma = 1
VerteilungsFunktion = RealDistribution('gaussian', sigma)
phi = VerteilungsFunktion.cum_distribution_function
\end{sagesilent}
\newcommand{\PHI}[1]{$\varphi(#1) = \sage{round(phi(#1), ndigits=5)}$}

\noindent \PHI{0.62} \\
\sage{phi(0.62)}
\bigskip

% TUT NICHT! ==========
\pgfplotstabletypeset[sci zerofill]{
x 0.1 0.2
1 \sage{phi(1.1)} 1.2
2 2.1 2.2
}

\bigskip

\end{document}

gefragt 23 Jul '17, 13:13

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 23 Jul '17, 20:13

Sage / sagetex wird wohl von den Experten nicht so oft genutzt?

(28 Jul '17, 00:10) cis

Das kann nicht funktionieren. Die sagetex-Anweisung \sage ist wie folgt definiert:

Öffne in Overleaf
\newcommand{\sage}[1]{\ST@wsf{%
try:^^J
 _st_.inline(\theST@inline, #1)^^Jexcept:^^J
 _st_.goboom(\the\inputlineno)}%
\ifST@paused
  \mbox{(Sage\TeX{} is paused)}%
\else
  \begin{NoHyper}\ref{@sageinline\theST@inline}\end{NoHyper}
  \@ifundefined{r@@sageinline\theST@inline}{\gdef\ST@rerun{x}}{}
\fi
\stepcounter{ST@inline}}

Schon ohne dass wir uns anschauen müssen, was \ST@wsf macht, können wir sehen, dass das Ergebnis des \sage-Aufrufs keine Zahl ist, sondern entweder eine Box mit Text zuzüglich der Erhöhung eines LaTeX-Zählers oder aber eine Gruppe mit einem Querverweis eventuell mit einer zusätzlichen Definition und wieder zuzüglich der Erhöhung eines Zählers. Nicht nur die Zusätze wie die Erhöhung des Zählers und ggf. die Definition des Makros \ST@rerun stören dabei. Natürlich stört auch die Umgebung NoHyper und selbst \ref liefert nicht unbedingt eine Zahl zurück.

Dein Beispiel läuft also im besten Fall auf etwas wie:

Öffne in Overleaf
\documentclass[12pt]{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.12}
\newenvironment{NoHyper}{}{}
\newcounter{testzahl}
\begin{document}

\refstepcounter{testzahl}\label{testzahl}

\pgfplotstabletypeset[sci zerofill]{
x 0.1 0.2
1 \begin{NoHyper}\ref{testzahl}\end{NoHyper}\stepcounter{testzahl} 1.2
2 2.1 2.2
}

\end{document}

hinaus. Hier leuchtet vermutlich jedem schnell ein, dass das nicht funktionieren kann.

Will man also mit sagetex Werte berechnen, die man mit pgfplotstable oder pgfplots verarbeiten will, statt diese Werte direkt mit pgfplots selbst oder mit Lua zu berechnen, so bleibt IMHO nur, die Werte vorab zu berechnen und beispielsweise die plot-Daten in eine Datei zu schreiben, die dann mit pgfplotstable (oder pgfplots) gelesen wird.

Permanenter link

beantwortet 17 Okt '17, 10:50

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 17 Okt '17, 10:52

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
×11
×7

gestellte Frage: 23 Jul '17, 13:13

Frage wurde gesehen: 5,487 Mal

zuletzt geändert: 17 Okt '17, 10:52