Aufbauend auf dieser Frage, versuche ich das aktuell mit dem Einsatz von sageTex zu kombinieren.

Öffne in Overleaf
\documentclass[a4paper,12pt,parskip=true]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{sagetex}
\usepackage{filecontents}
\begin{filecontents*}{Daten.csv}
x;y
1;2
-3;1
0;5
\end{filecontents*}

\usepackage{datatool}
\DTLsetseparator{;}
\DTLloaddb{daten}{Daten.csv}

\newwrite\texfile
\makeatletter
\newcommand\writetexfile[2]{%
  \immediate\openout\texfile #1
  \immediate\write\texfile{#2}%
  \immediate\closeout\texfile
}
\makeatother
\newcounter{texfile}
\newcommand\writenotexfile[1]{%
  \stepcounter{texfile}%
  \writetexfile{\jobname-\thetexfile.tex}{#1}%
}

\begin{document}

\DTLforeach*{daten}{
\x=x,%
\y=y%
}{%
%\writenotexfile{%
Bestimme das Produkt von $\x$ und $\y$: $\x\cdot\y=\sage{\x*\y}$
%}%
}

\end{document}

Die Erstellung von PDFs klappt einwandfrei (pdfLaTeX, dann Sage, dann wieder pdfLaTeX), alle Berechnungen werden durchgeführt und das Ergebnis entsprechend eingefügt. Nun bräuchte ich aus Gründen der Weiterverarbeitung für jeden Durchlauf aber den TeX-Code (siehe Link). Das ist prinzipiell auch kein Problem, solange ich den sage-Befehl mit einem string versehe, allerdings steht dann jeweils der Befehl selbst und nicht das Ergebnis in der Datei (ohne string wird gar nicht erst kompiliert). Lässt es sich bewerkstelligen, dass für jeden Durchlauf das Ergebnis in die Datei statt des Befehls geschrieben wird oder komme ich da langsam an die Grenzen der Möglichkeiten von LaTeX?

gefragt 30 Nov '17, 11:32

Hirshy's gravatar image

Hirshy
73133645
Akzeptiert-Rate: 0%

Dass, das nicht funktionieren kann, sollte eigentlich bereits aus meinen früheren Erläuterungen zu sagetex recht deutlich werden. Dort sind auch alternative Strategien angegeben (erst berechnen, dann verwenden) und angedeutet (pgfmath, Lua mit lualatex).

(30 Nov '17, 12:09) gast3

Das ist schade, aber mit so was hatte ich schon gerechnet. Da ich in der Regel nicht nur ganze Zahlen multipliziere sondern z.B. Wurzeln oder Sinuswerte vorkommen und das Ergebnis nicht gerundet werden soll, kann ich wahrscheinlich auch nicht Lualatex verwenden.

(30 Nov '17, 13:23) Hirshy

Also erstens kann lua natürlich mehr als nur die Grundrechenarten und zweitens wie willst du Wurzel aus 2 berechnen ohne zu runden?

(30 Nov '17, 14:59) Ulrike Fischer

Dass lua mehr als die Grundrechenarten kann hatte ich gesehen, so hatte ich das auch nicht gemeint. Statt "berechnen" sollte ich wohl eher "exaktes Ergebnis anzeigen" schreiben, z.B. bei sin(pi/4) hätte ich gerne frac{sqrt{2}}{2} statt 0.707 ausgegeben (dass nur solche "schönen" und bekannten Werte rauskommen ist sicher gestellt).

(30 Nov '17, 15:07) Hirshy

Derartige Umformungen musst du selbst festlegen. Woher soll irgend ein Programm wissen, ob du 2 lieber als 1+1 oder Wurzel 4 oder 2*sin(pi/2) darstellen willst?

(30 Nov '17, 15:30) Ulrike Fischer

Natürlich ist das irgendwo Geschmackssache, und ich muss mich immer zurückhalten wenn ich in Aufgaben etwas lese wie "Vereinfachen Sie Ihr Ergebnis soweit wie möglich" und der Korrektor dann exakt ein Ergebnis als richtig anerkennt. Es gibt aber mMn einen gewissen Konsens, was denn nun zu vereinfachen ist, ohne diesen genau zu definieren. Die Ausgaben von sage/tex etwa entsprachen meinen Vorstellungen, dass Ausdrücke soweit wie möglich zusammengefasst wurden und dabei exakt bleiben (auch hier ist natürlich Spielraum bei "möglichs weit"), das lässt sich ja aber nicht für mein Vorhaben verwenden

(30 Nov '17, 15:45) Hirshy

Nun, es gibt meines Wissens kein latex Paket, das symbolische Umformungen macht. Also musst du entweder auf ein externes Tool zurückgreifen (das man natürlich per --shell-escape auch als Zwischenschritt aufrufen kann) oder du brauchst eine entsprechende lua-Bibliothek, die du einbinden kann.

(30 Nov '17, 16:03) Ulrike Fischer
Ergebnis 5 von 7 show 2 more comments

Rechnungen ausführen und in Dateien schreiben kannst du mit directlua (braucht lualatex, ist schnell) oder fpeval (geht auch mit pdflatex, langsamer und evtl nicht alle Rechnungen möglich, Doku ist in interface3.pdf).

Öffne in Overleaf
\documentclass{report}
\usepackage{xfp}
\begin{document}

\newwrite\texfile
\immediate\openout\texfile exportrechnung.txt

\immediate\write\texfile{\directlua{ x = math.sqrt(2) + math.sin (math.pi);  tex.sprint (x) }}

\immediate\write\texfile{\fpeval{sqrt(2) + sin(pi)}}

\immediate\closeout\texfile
\end{document}

In der Exportdatei steht dann:

Öffne in Overleaf
1.4142135623731
1.414213562373095
Permanenter link

beantwortet 30 Nov '17, 15:18

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.6k23
Akzeptiert-Rate: 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:

×17
×11

gestellte Frage: 30 Nov '17, 11:32

Frage wurde gesehen: 4,966 Mal

zuletzt geändert: 30 Nov '17, 16:03