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

cis's gravatar image

cis
5.9k10120210
Akzeptiert: 69%

bearbeitet 23 Jul, 14:13

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

(27 Jul, 18: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 Gestern

Ijon%20Tichy's gravatar image

Ijon Tichy
5.5k1919

bearbeitet Gestern

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

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:

×14
×7
×5

Frage gestellt: 23 Jul, 07:13

Frage wurde angeschaut: 237 Mal

Zuletzt aktualisiert: Gestern