Matheprogramm mit Latex export

Formelsatz für Mathematik, Naturwissenschaften und Technik


Benutzeravatar
$3v|\|
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 27. Mär 2012, 15:52
Wohnort: Ulm a.d. Donau

Matheprogramm mit Latex export

Beitrag von $3v|\| »

Hallo Latex-Gemeinde

Ich suche ein freies Programm, in dem ich ähnlich wie in MathCad Berechnungen eingeben kann (ich hab leider keine Lizens mehr und möchte mich von illegalen Seiten im Internet fernhalten :twisted: ). Allerdings wäre eine Latex-Export-Funktion nicht schlecht.
Meine Idee ist: in diesem Programm ausführlichere Berechnungen durchführen und das Ergebniss als *.tex datei exportieren. (ähnlich wie bei OpenOffice.org ) Diese kann ich dann in meinem Hauptdokument includieren.

Das ganze hätte folgende Vorteile:
- wenn an der Berechnung etwas geändert werden muss, dann wird mein PDF nach erneutem Latex-Kompilieren automatisch geändert ohne dass ich die Formeln suchen muss und mühsam von Hand ändern mit der Gefahr, dass ich mich vertippe.
- auch wenn die Matheprogramme gut rechnen können, ist die Ausgabe von Latex doch angenehmer zu lesen. (Stichwort: Pretty Print)

nun meine Frage:
-gibt es so etwas überhaupt ?
-macht das Sinn ? (ich lerne erst Latex und kenne mich da noch nicht so gut aus)

Gruz Sven

PS: Ich benutze leider noch Windoof 7 - fange daher mit Linuxprogrammen wenig an (wollte ich schon längst mal ändern - muss jetzt aber erst mal Latex lernen)

Benutzeravatar
$3v|\|
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 27. Mär 2012, 15:52
Wohnort: Ulm a.d. Donau

Beitrag von $3v|\| »

Hallo Gemeinde

Ich hab noch einmal gesucht und bin auf folgende Programme gestoßen, die angeblich LATEX können sollen:
- Sage
- maxima mit wxMaxima als GUI
- GNU Octave (allerdings nur mit Umweg unter Windows lauffähig) mit GUIOctave als GUI
- Scilab

Allerdings scheinen das alles Alternativen zu MATLAB zu sein und nicht zu MathCad.

Hat jemand Erfahrung mit diesen Programmen und kann die LATEX-Exportfunktion bestätigen?
Ich möchte das Programm eigentlich nur für relativ einfache Berechnungen nutzen wie z.B.:
a:=3; b:=4; c:=a^2+b^2=3^2+4^2=25
daher scheint mir ein MATLAB-Derivat ein bischen zu heftig.

Gruz Sven


EDIT: Habe oben XOctave gelöscht, da es sich doch nicht um Freeware handelt
Zuletzt geändert von $3v|\| am Do 29. Mär 2012, 16:48, insgesamt 1-mal geändert.

fitzz
Forum-Anfänger
Forum-Anfänger
Beiträge: 30
Registriert: Mi 31. Aug 2011, 22:56

Beitrag von fitzz »

Hi Sven,
$3v|\| hat geschrieben:Ich möchte das Programm eigentlich nur für relativ einfache Berechnungen nutzen wie z.B.:
a:=3; b:=4; c:=a^2+b^2=3^2+4^2=25
Wenn es dir nur um die Berechnung geht und du auf die anderen Möglichkeiten die dir ein Computeralgebrasystem bietet verzichten kannst, dann schau dir mal das LaTeX-Paket "TikZ/pgf" an (Handbuch des Pakets "pgfmanual", Part V, S. 534 ff). Dort ist eine sehr mächtige "mathematical engine" beschrieben.

lg
gerald

Benutzeravatar
$3v|\|
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 27. Mär 2012, 15:52
Wohnort: Ulm a.d. Donau

Beitrag von $3v|\| »

Danke Gerald

WOW - das ist ja ein ganz schön mächtiges Tool - allerdings hab ich da noch das Gefühl, dass ich dadurch nicht unbedingt weniger Fehler mach ;-)

Ich bin bisher über das ganze Dokument (726 Seiten) nur mal drübergeflogen, aber so wie ich das sehe kann man fast alles darstellen (z.B. Struktogramme, Funktionen, Kalender, elektrische Schaltpläne, logische Schaltkreise). Ich find es aber nicht gerade übersichtlich. Ich muss mir die 726 Seiten Doku mal genauer anschauen wenn ich mal etwas Zeit übrig habe.

Zu den grafischen Aspekten gibt es Beispiele in der Doku und auch im iNet. Ich hab mal zum Spaß ein paar Beispiele ausprobiert; allerdings bekomm die meisten Beispiele nicht zum laufen. Sobald ich "\tikzexternalize" aufrufe spukt es mir eine Fehlermeldung aus. Liegt vielleicht daran, dass ich mein LATX Dokument mit einem Klick in WinShell oder TEXnicCenter kompilier und ich als Anfänger ohne makefile-Erfahrung mit der Angabe "pdflatex -shell-escape main" noch nichts anfange :cry:

Das Kapitel "Mathematical Engine" hab ich genauer unter die Lupe genommen. Leider gibt es hierfür kein vollständiges Beispiel und ich hab auch im iNet nix gefunden und mir daher mal was zusammen gebastelt:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
%\usepackage{pgfmath}
\usepackage{latexsym}		% weitere mathematischen Symbole
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{blindtext}		% Damit ich mir nicht immer neuen Text ausdenken muss
\begin{document}
\blindtext[1]
\begin{eqnarray*}		% wie displaymath (ohne Nummerierung) aber mehrzeilig mit "\\" ; "\newline" geht nicht
% \begin{align*}
\def\a{3}
\def\b{4}
a = \a 
%a& = \a \\ % geht nicht -> ansonsten funktionieren alle nachfolgenden Berechnungen nicht mehr
b = \b 
c = \sqrt{ a^{2}+b^{2}}
c = \sqrt{ \a^{2}+\b^{2}}
%c & = \a^{2} + \b \\
%& = \sqrt{ \a^{2}+\b^{2}} \\ 	% geht nicht, da ich ja keine neue Zeile machen darf
c = \sqrt{ \pgfmathparse{\a^2} \pgfmathresult + \pgfmathparse{\b^2} \pgfmathresult}
c = \sqrt{ \pgfmathparse{(\a^2)+(\b^2)} \pgfmathresult}
c = \pgfmathparse{((\a^2)+(\b^2))^(1/2)} \pgfmathresult \\ % wenn keine Berechnung mehr kommt dann funktioniert das
a& = 3 \\ 
b& = 4 \\ 
c& = \sqrt{ a^{2}+b^{2}} \\
 & = \sqrt{ 3^{2}+4^{2}} \\
 & = \sqrt{ 9 + 16} \\
 & = \sqrt{ 25 } \\
 & = 5 % allerdings funktioniert das alignment nicht - die "=" sollten untereinander stehen
% \end{align*}
\end{eqnarray*}
\blindtext[1]
\end{document}
- warum ist der Zeilenumbruch (und so auch alignment) nicht möglich?
- kann ich "9 + 16" ausgeben lassen anstatt "9.0 + 16.0"
- Wurzel aus 25 ist 5 und nicht 4.99963

Ich bin bei meiner Recherche noch auf das Packet {fp} gestossen. Was ist der Unterschied zu {tikz}?

Da ich hoffe, dass noch jemand etwas zu den anderen Programmen sagen kann, lass ich das Thema mal offen.

Gruz Sven

fitzz
Forum-Anfänger
Forum-Anfänger
Beiträge: 30
Registriert: Mi 31. Aug 2011, 22:56

Beitrag von fitzz »

Hi Sven,

da der Thread noch offen ist und ich jetzt etwas Zeit habe möchte ich dir auf deinen letzten Post antworten (ACHTUNG wird länger!).
$3v|\| hat geschrieben: WOW - das ist ja ein ganz schön mächtiges Tool ...
Mein Schweitzer-Offiziersmesser für LaTeX. Wenn sonst layoutmäßig nichts mehr geht, damit habe ich noch eine Chance (Man sollte natürlich
versuchen den richtigen Scgraubenzieher zu bekommen bevor man das Schweitzer-Offiziersmesser nimmt).
$3v|\| hat geschrieben: Ich bin bisher über das ganze Dokument (726 Seiten) nur mal drübergeflogen, [...] (z.B. Struktogramme, Funktionen, Kalender, elektrische Schaltpläne, logische Schaltkreise). Ich find es aber nicht gerade übersichtlich. Ich muss mir die 726 Seiten Doku mal genauer anschauen wenn ich mal etwas Zeit übrig habe.
Das "musst" du nicht! Ich schreibe mit dem Paket alle meine Graphiken, aber eins ist sicher, entweder ich habe das Manual geöffnet, am besten audf einem zweiten Monitor oder ich habe es ausgedruckt vor mir liegen. Auswendig lernen macht wenig Sinn. Wenn du was lesen willst, les dir die Tutorien durch, das reicht, neben dem was du schon selbst festgestellt hast und was in den Tutorien steht hast du einen Überblick, wofür du das Paket einsetzten kannst. Wenn du den hast, dann wirst du feststellen, dass das Manual doch übersichtlich ist, vor allem in der elektronischen Form (Stichwort Links).
$3v|\| hat geschrieben: Zu den grafischen Aspekten gibt es Beispiele in der Doku und auch im iNet. Ich hab mal zum Spaß ein paar Beispiele ausprobiert; allerdings bekomm die meisten Beispiele nicht zum laufen.
Wo liegt das Problem, bei etlichen Beispielen, müssen bestimmte "TikZ"-Pakete geladen werden, die entweder nicht in den LaTeX-Distributionen enthalten sind, bzw. nirgendswo mehr zu finden sind (kenn ich aus eigenen Erfahrungen).
$3v|\| hat geschrieben: Sobald ich "\tikzexternalize" aufrufe spukt es mir eine Fehlermeldung aus.
Wofür braucht du das? Es gibt genau drei Gründe dafür:
1. Das "TikZ-picture" ist so groß und komplex, dass die Erstellung viel Zeit baraucht UND an dem erstellten Bild ändert sich so gut wie nie was.
2. Du brauchst das Bild auch noch in einem andere Format, z. B. jpg, um es auch in einem anderen Programm einbinden zu können.
3. Du erstellst eine LaTeX-Datei für jemand anderes, z. B. eine Druckerei, die das "pgf/TikZ"-Paket nicht haben, dann kanst du durch einfaches
Kommentieren ( % vor den Zeilen) und erstellen einer neuen Umgebung, welche die erstellten Dateien mittels "\includgraphic", einbindet und den
Rest der Umgebung nicht beachtet, dafür sorgen, dass es nur eine Sourcedatei gibt.

Ich selber bin noch nie in die Verlegenheit gekommen, dass ich dies brauchte.
$3v|\| hat geschrieben: ... mit der Angabe "pdflatex -shell-escape main" noch nichts anfange
<b>VORSICHT WARNUNG ACHTUNG</b>

Dieser Befehl ist perse noch nicht böse, unter bestimmten Umständen auch nötig <b>aber:</b>

- Er sollte nicht al Standard benuzt werden.

<b>Warum:</b><br/>
TeX ist eine Programmiersprache, und damit LaTeX auch, weil es kann jederzeit auch auf TeX zurückgreifen. Eine Programmiersprache sollte und kann (meistens) auch auf das darunterliegende Betriebsystem zugreifen um externe Programme zu starten. Das ist natürlich gefährlich. Um diese zu entschärfen gibt es das sogenannt "Sandbox"-Verfahren. Das muss man sich wie folgt vorstellen:
<sarkasmus an>
30-50 Kinder auf einem Spielplatz sind zu beaufsichtigen. Solange sie im Sandkasten spielen besteht keine Gefahr, außerhalb könnten sie auf die Straße laufen.
Sind also alle Kinder im Sandkasten, brauch man sich keine Gedanken zu machen, alles ist sicher. Aber wie hält man sie im Sandkasten? (Nicht wörtlich nehme) Man baut um den Sandkasten einen Elektrozaun (ähnlich wie bei Widezäunen, nur mit weniger Volt) und eine steile Rutsche mit der die Kinder in den Sandkasten können.

Soweit so gut, aber was ist wenn ein Kind auf Toilette muss oder von der Mutter abgeholt wird (kein Kommentar zu dem Elektrozaun, Muttern ist froh, dass sie ihr Kind in relativ sichere Umgebung abgeben kann). Der Elektrozaun muss abgeschaltet werden. Genau das ist der Moment, wo wieder erhöhte Aufmeksamkeit erfordert ist, damit keinem Kind etwas passiert, da nun alle Kinder den Sandkasten verlassen können, klar, di meisten werden im Sandkasten weiterspielen (sie haben den Elektrozaun noch nicht mal bemerkt), aber es gibt mit Sicherheit den ein oder anderen Rabauken, der nur darauf gewartet hat den Sandkasten zu verlassen.
<sarkasmus aus>
Genau diesen Schalter schaltet man mit oben genannten Befehl aus. D. h. alles was über den "write18" geschrieben wird, wird ausgeführt. Im schlimmsten Fall eine Formatierung der Festplatte. Das Problem dabei ist, man schaltet das für alles frei was von "main".tex aufgerufen wird. Wer also seine Pakete nur von offiziellen Stellen holt, braucht sich da wohl kaum gedanken machen. Ansonsten gilt: den Quellcode der nicht aus solchen Quellen stammt nach "write18" zu durchsuchen und wenn man was findet, zu verstehen was er da macht, ansonsten ist auf diesen Befehl zu verzichten.
$3v|\| hat geschrieben: Das Kapitel "Mathematical Engine" hab ich genauer unter die Lupe genommen. Leider gibt es hierfür kein vollständiges Beispiel und ich hab auch im iNet nix gefunden ...
Auch wenn man dieses mächtige Paket seperat benutzen kann, so ist es doch zuerst im Zusammenhang mit den Berechnungen im "pgf/TikZ"-Paket zu sehen. Ich selbst nutze es mehr oder weniger auch nur um bestimmte Längen vernünftig als Debugausgabe zu bekommen oder um damit Berechnungen für "pgf/TikZ"-Graphiken zu machen.
Das ist der Grund warum du nichts im INet findest.

$3v|\| hat geschrieben: (ich lerne erst Latex und kenne mich da noch nicht so gut aus)

- warum ist der Zeilenumbruch (und so auch alignment) nicht möglich?
Genau wegen dieser Kombination, Entschuldigung, klingt zwar hart, aber das ist leider der Grund und du kannst wahrscheinlich noch nicht einmal was dafür.
Auch wenn man im INet mehr wie genug Beispiele findet, der Befehl "\def" darf nie in ein LaTeX-Dokument, dieser Befehl ist ein TeX-Primitiv und hat mit LaTeX nichts, aber auch garnichts zu tun, wer mit diesem Befehl arbeitet muss sich mit TeX auskennen. In einer Paket-Datei darf er natürlich sein, auch wenn am ihn vermeiden sollte, man kann es nicht immer. Der äquivalente LaTeX-Befehl dazu heißt: "\newcommand".

Hättest du diesen anstatt "\def\a{3}" benutzt, hättest du eine Fehlermeldung bekommen, das dieser Befehl schon benutzt wird. "\def" überprüft nichts, sondern überschreibt einfach. In diesem Fall ist aber interessant, dass es sich hierbei nicht nur um einen schon vorhandenen Befehl handelt der überschrieben wird, sondern dieser Befehl hat auch noch eine spezielle Bedeutung. "\a" leitet einen Akzent ein. Im Mathe-Mode sind aber normale Akzente nicht erlaubt, was passiert ist ungewiss, es gibt aber eine entsprechende Fehlermeldung, die man allerdings interpretieren können muss.
LaTeX Warning: Command \\\ invalid in math mode on input line 18.


! LaTeX Error: Command \\\ unavailable in encoding T1.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.18 a& = \a \\
Hier haben wir erst nur eine Warnung, das ein Commando benutzt wird, welches im Mathemodus nicht erlaubt ist. Als nächstes kommt ein Fehler, das dieses Commando nicht als Zeiche in der T1-Codierung vorhanden ist. Zulezt sieht man Zeile 18 und den Befehl der dort ausgeführt wird. Zusammengenommen heißt das:
der Befehl "\a \\ schrumpft zusammen auf "\\". Für jemanden der in TeX, nicht LaTeX programmiert, heißt das, meine Definition hat keine direkte Auswirkung auf den Befehl und es kann nur einen Grund dafür geben, es ist kein normaler Befehl, dann geht die große Sucherei los. Allerdings wird wohl kein TeX-Programmiere so kurze Befehle für sich beanspruchen, sondern davon ausgehen, dass die schon vergeben sind und längere wählen.

Auch "\b" war schon definiert, aber nur als normaler Befehl, wirkte sich dadurch nicht im Mathe-Mode aus, hätte aber später Seiteneffekte erzeugen können.

Folgender Code kann so erstellt weden:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{blindtext}      % Damit ich mir nicht immer neuen Text ausdenken muss
\begin{document}
\blindtext[1]
\newcommand{\mya}{3}
\newcommand{\myb}{4}

\begin{align*}
% a = \mya\\
a& = \mya \\
b& = \myb \\
c& = \sqrt{ a^{2}+b^{2}} \\
c& = \sqrt{ \mya^{2}+\myb^{2}} \\
% c & = \mya^{2} + \myb \\
% & = \sqrt{ \mya^{2}+\myb^{2}} \\    % geht nicht, da ich ja keine neue Zeile machen darf
c& = \sqrt{ \pgfmathparse{\mya^2} \pgfmathresult + \pgfmathparse{\myb^2} \pgfmathresult}\\
c& = \sqrt{ \pgfmathparse{(\mya^2)+(\myb^2)} \pgfmathresult}\\
c& = \pgfmathparse{sqrt((\mya^2)+(\myb^2))} \pgfmathresult \\ % hier wird die Quadratwurzel vewendet
c& = \pgfmathparse{((\mya^2)+(\myb^2))^0.5pt} \pgfmathresult \\ % hier nicht s. u.
c& = \pgfmathparse{((\mya^2)+(\myb^2))^(1/2)} \pgfmathresult \\ % hier auch nicht s. u.
a& = 3 \\
a& = \mya \\
b& = 4 \\
c& = \sqrt{ a^{2}+b^{2}} \\
 & = \sqrt{ 3^{2}+4^{2}} \\
 & = \sqrt{ 9 + 16} \\
 & = \sqrt{ 25 } \\
 & = 5
\end{align*}
\blindtext[1]
\end{document}
Ein Wort noch zu deinem Beispiel, egal was passiert, "eeqnarray" egal ob mit oder ohne "*" sollte nicht mehr benutzt werden, siehe "l2tabu" oder google danach.
$3v|\| hat geschrieben: kann ich "9 + 16" ausgeben lassen anstatt "9.0 + 16.0"
Ja, dafür gibt es einen entsprechenden Befehl, den man entsprechend einstellen kann (siehe pgf-manual Kapitel 66, S. 543).

$3v|\| hat geschrieben: Wurzel aus 25 ist 5 und nicht 4.99963
Das ist falsch, die Wurzel aus 25 ist 25. Die Quadratwurzel aus 25 ist 5. Hättest du den Quadratwurzel-Befehl (sqrt()) benutzt, wie im obigen Beispiel, hättest du auch 5.0 rausbekommen. Du hast allerdings die auch mathematisch korrekte Potenzschreibweise gewählt, das sollte man allerdings in jeder Programmiersprache nur dann tun, wenn es entsprechende Bibliotheken dafür gibt, bzw. das Ergebnis sichergestellt ist, Fließpunktrechnungen haben systembedingt immer Ungenauigkeiten, die korrigiert werden müssen. 1/10 == 0.1, das meinen viele, stimmt aber nicht ganz, der exakte Wert ist 0.100000001490116119384765625 . Der Unterschied ist nicht viel, aber mit diesen werten wird weitergerechnet, diese Ungenauigkeiten summieren/multiplizieren/potenzieren sich natürlich. Die entsprechende floatpoint-Bibliothek bzw. die Bibliothek der Programmiersprache muss das natürlich ausgleichen können. Die "Mathematic Engine" von "pgf" ist in erster Linie für die Graphikbearbeitung geschrieben. Dort ist im Endeffekt nur die Quadratwurzel wirklich gefragt, alle anderen Wurzel müssen nur hinreichend genau sein und können angenähert werden. Genau das macht auch die "Mathematic Engine" von "pgf", dokumentiert auf S. 531.

$3v|\| hat geschrieben: Ich bin bei meiner Recherche noch auf das Packet {fp} gestossen. Was ist der Unterschied zu {tikz}?
Diese Paket benutzt ersten die Postfixnotation oder Umgekehrte Polnische Notation. Das ist schon eine ganz schöne Umgewöhnung:
aus 5+9+6/2 = 15 wird soweit ich mich recht erinnere 5 9 + 6 2 / + = 15 und aus (5+9+6)/2 = 10 wird 5 9 + 6 + 2 / = 10

Über die Genauigkeit kann ich nichts sagen, weil ich das Paket nicht nutze (s. o.), ich bevorzuge die Infixnotation, reine Gewohnheitssache..

$3v|\| hat geschrieben: Da ich hoffe, dass noch jemand etwas zu den anderen Programmen sagen kann, lass ich das Thema mal offen.
Da bis jetzt da noch nichts gekommen ist und ich einsehe, dass das pgf/TikZ-Paket für deine Zwecke nicht das richtige ist, schreibaufwand und übersichlichkeit, kommt hier noch ein zweiter Vorschlag:

Du verwendest LaTeX statt OpenOffice.org bzw. MS Word. Warum verwendest du dann nich Python (http://www.python.org) anstatt MathCad etc.

Python und LaTeX habe vieles gemeinsam:
- ähnlich steile Lernkurven
- einfache Syntax
- LaTeX hat Pakete für fast alles, Python Module
- beides ist Opensource
- Python ist wahrscheinlich die Programmiersprache, die auch den meisten Architekturen und Betriebssystemen portiert wurde.

Wenn du WinShell benutzt, brauchst du noch nicht mal einen anderen Editor, Syntaxhighlighting für Python müsste er können und einen externen Pythonaufruf kan man meines wissens auch darin erstellen. Dann hättest du alles in einem Projekt.

Im folgende findest du dein Beipiel als Python 2.7/LateX-Kombination (der Pythoncode ist ausführlich kommentiert):

Pythoncode:
#!/usr/bin/env/python2
# -*- coding: utf8 -*-

# Das Kommentarzeichen in Python ist: #
# Die Beiden ersten Zeilen diese Beipiels müssen in
# den ersten Zeilen der Pythondatei stehen.
# die erste Zeile ist für Windows zwar nicht wichtig,
# sie wird nur von Unix-artigen Betriebssystemen
# ausgewertet (Linux, *BSD, MacOSX), muss aber wegen der
# zweiten Zeile mit der das Encoding für das Pythonscript
# eingestellt wird vorhanden sein. Beide Zeile sind den
# localen Verhältnissen anzupassen.

# Hier importieren wir aus dem math-Modul nur die Quadratwurzelfunktion
# alle anderen Funktionen interessieren uns für diese Beispiel nicht.
# Der Vorteil die einzelenen Funktionen so zu importieren ist,
# sie können direkt mit dem Namen aufgerufen werden.
# Hätten wir zusätzlich noch die Potenzfunktion aus dem math-Maodul benutzen
# wollen, so hätte man folgendes schreiben müssen:
# from math import sqrt, pow
from math import sqrt
# Hier wird das subprocess-Modul importiert. Es stehen damit alle Funktionen
# dieses Moduls bereit. Der Aufruf muss aber anders erfolgen:
# modulname.funktionsname
# siehe weiter unten wo dieses Modul verwendung findet.
import subprocess

# Hier werden zwei Strings definiert, der erste enthält den Namen
# der Datei in der wir die Formel in LaTeX-Code schreiben, der zweiten
# enthält den Namen der LaTeX-Dokumentdatei in der die Formeldatei
# eingebunden wird
formeldatei="formel1.tex"
dokumentdatei="./beispiel-formel.tex"

# Hier wird eine Liste mit den Argumenten erstellt, um LaTeX mit dem
# LaTeX-Dokument aufzurufen.
latex=["pdflatex", "-interaction=nonstopmode", "-synctex=1", dokumentdatei]

# Die Variblen werden Deklariert und initalisiert.
# WICHTIG: Python überprüft den Typ einer Variablen nicht, das heißt:
# die Variable a ist hier vom Type Integer, man kann ihr später einen
# String zuweisen, ab dem Moment wäre sie vom Type String.
a=3
b=4

# Hier wird Zeile für Zeile ein String aufgebaut der die Formel im
# LaTeX-Formatierung enthält. Da der Backshlash als Escape-Zeichen
# in Strings fungiert, muss er verdoppelt werden.
#
# Das \n am ende des Strings sorgt für einen Zeilenumbruch in der
# Datei oder bei der Ausgabe am Bildschirm.
temps = "\\begin{align*}\n"
temps +="c &=\\sqrt{a^2 + b^2}\\\\\n"
temps +="c &=\\sqrt{%d^2 + %d^2}\\\\\n" %(a,b)
temps +="c &=\\sqrt{%d + %d}\\\\\n" %(a**2,b**2)
temps +="c &=\\sqrt{%d }\\\\\n" %(a**2 + b**2)
temps +="c &=%d \\\\\n" %(sqrt(a**2 + b**2))
temps +="\end{align*}\n"
temps +="""äöüß\n

Mit 3"\ kann man auch einen mehrzeiligen
String erstellen.

\\textbf{Das steht vor dem Blindtext:}
"""

# Hier wird die Formeldatei zu schreiben geöffnet
fd=open(formeldatei, "w")
# Hier wird in sie geschrieben
fd.write(temps)
# Hier wird sie wieder geschlossen
fd.close()

# Hier rufen wir eine Prozess zum erstellen des
# LaTeX-Dokuments auf. Wenn er nicht mit OK (0)
# beendet wird, ruft Python eine Fehler auf.
subprocess.check_call(latex)
# Der letzte Befehl ist zwar nicht zwingend
# notwendig, aber daurch ist sichergestell, dass
# das aus dem LaTeX-Dokument erstellt PDF auch
# die neueste Berechnung enthält.
Der dazugehörige LaTeXcode:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
%\usepackage{pgfmath}
\usepackage{latexsym}      % weitere mathematischen Symbole
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{blindtext}      % Damit ich mir nicht immer neuen Text ausdenken muss
\begin{document}
\blindtext[1]
\input{formel1.tex}
\blindtext[1]
\end{document}
Zum Ausprobieren intallier dir die neueste Version von Python 2.7 (http://www.python.org/download/), und speicher den Code in einem Verzeichnis unter folgende Namen: Python: test.py und LaTeX: beispiel-formel.tex

Danach brauchst du test.py nur wie folgt von der Kommandozeile aufrufen: python test.py

dann kanst du dir die PDF-Datei beispiel-formel.pdf ansehen :wink:

Was du sonnst noch mit Python anstellen kannst, wie mehrere tausend Zeilen lange berechete Tabellen für LaTeX zu erstellen, wird nur durch deine Phantasie begrenzt :wink:

lg
gerald

Benutzeravatar
$3v|\|
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 27. Mär 2012, 15:52
Wohnort: Ulm a.d. Donau

Beitrag von $3v|\| »

Danke Gerald

1.) für ein funktionierendes Beispiel:
Aufgrund der vielen Beispiele im Inet durch die ich mich gekämpft habe, hab ich garnicht gemerkt, dass ich Tex- und alte Latex-Befehle verwendet hatte. Inzwischen bin ich hoffentlich schlauer ;-) (ich hab mich immer gefragt was denn der Unterschied zwischen "eeqnarray*" und "align*" ist. Allerdings ist mir immernoch nicht klar was denn der Unterschied zwischen Latex un Latex2e ist.)

2.) für Dein Sandbox-Hinweis
Was eine ist und wie sie funktioniert wusste ich - aber nicht dass Latex in einer läuft und das der Befehl "pdflatex -shell-escape main" diese verlässt - Ich dachte dass wäre eine von vielen Optionen die man irgendwo setzen muss. Allerdings hab ich diesen Befehl ebenso wie die Beispiele mit "\tikzexternalize" aus dem besagten "pgfmanual" S.343 und folgende.
:idea: Dein Vergleich mit dem Spielplatz finde ich genial :!:

3.) für den Crashkurs in Phyton
Längerfristig gesehen ist das glaub eine super Idee. Allerdings muss ich erst mal Latex bischen besser verstehen bevor ich mich an eine weitere Programmiersprache ranmach - Was ich suche ist eine Umgebung in der ich sofort abschätzen kann ob das sein kann was da raus kommt. Bei Deiner Lösung schreibe ich erst ein Phython-Script, dass ich kompilieren muss um ein Latex-Script zu bekommen, welches ich wieder mindestens einmal kompilieren muss (je nach Anzahl der Warnungen) um im pdf-Reader endlich kontrollieren zu können ob es das ist was ich haben möchte. Um den Fehler direkt nach dem ersten Kompilieren zu erkennen - dafür fehlt mir leider noch die Erfahrung. (Ich drück ja jetzt schon viel zu oft auf F7 im TeXnicCenter aber wenn ich einen halben Tag lang schreib, dann find ich meine eigenen Fehler nicht mehr und bin nur noch mit Auskommentieren beschäftigt :-x )

Auf die Gefahr hin als Gluck$chaiser abgestempelt zu werden: kann es sein dass es im Pyhonscript
Mit 3\" kann man auch einen mehrzeiligen String erstellen.
an Stelle von
Mit 3"\ kann man auch einen mehrzeiligen String erstellen.
heißen müsste?

Also nochmal: fetten Respekt für Deine ausführliche Antwort

Gruz Sven

Bausparfuchs
Forum-Anfänger
Forum-Anfänger
Beiträge: 30
Registriert: Do 12. Apr 2012, 14:50

Beitrag von Bausparfuchs »

Wieso nimmst Du nicht einfach Maxima, wie in Deinem ersten Post geschrieben. Maxima ist ein mächtiges CAS und hat sehr guten Latex-export. Und Deine im ersten Post verfasste Aussage, dass Maxima was mit Matlab zu tun haben soll, ist nicht so korrekt.

Matlab ist kein CAS.
Die freien Alternativen für Matlab/Simulink sind bspw. Octave/Scilab

Gruß

Antworten