Hallo, ich führe mittels sagetex eineige Berechnungen in LATeX durch. Wie kann ich mehrere Ergebnisse mittels ifthenelse vergleichen? Oder kann man das in den sage-Code einbinden?

Open in Online-Editor
 \documentclass{article}
\usepackage{sagetex}
\usepackage{ifthen}
\begin{document}
\begin{sagesilent}
  var('x')
   f = x^2
 \end{sagesilent}
 $\ifthenelse{\sage{f(2)}>0}{a}{b}$

 \end{document}

gefragt 15 Sep '15, 14:35

typ42's gravatar image

typ42
19313
Akzeptiert: 100%

Würde mich nicht wundern, wenn das nicht ginge. \ifthenelse muss das erste Argument immer voll expandieren. Ich bezweifle aber, dass \sage{f(2)} voll expandierbar ist. Das schreibt nämlich u. a. eine .sage-Datei. Echte Tests konnte ich mangels sage leider nicht machen. Man müsste irgendwie anders an das Ergebnis aus der .sout-Datei heran kommen. Da ich Mangels sage nicht testen kann und keine .sout-Datei habe, kann ich dazu nichts weiter beitragen.

(16 Sep '15, 02:02) saputello

Genau das ist wohl das Problem. Das obige Besipiel funktioniert nicht, da ich nicht an den Wert von sage(f(2)) komme.

(16 Sep '15, 05:31) typ42
1

Die Frage wurde auch unter How can i compare values from sagetex with ifthenelse? gestellt. Bitte gib Links zu Crossposts Deiner Fragen immer mit an.

(16 Sep '15, 07:16) esdd

Was ist eigentlich sagetex? Gehört das zum Kanon? Finde es zwar bei CTAN, habe es aber nicht bei meiner TeXLive-Distribution.

(17 Sep '15, 21:10) cis

Also ich kann dir nur sagen, wofür ich es nutze. sagetex bezieh sich auf das Computeralgebrasystem sage. Der Vorteil von sage ist, dass du Schnittstellen zu vielen großen Programmen (Maxima, R, Mathematica...) hast. Ich stelle damit Berechnungen an, die ich dann in LaTeX direkt einbinde.

(18 Sep '15, 09:12) typ42

Unabhängig von der Frage, aber da f(x) = x^2 ist wird der Test immer a geben, da x^2 > 0 für alle x.

(20 Sep '15, 10:59) Henri
Ergebnis 5 von 6 Alle anzeigen

Ich poste hier mal die Antwort von DJP auf meine Frage aus dem Tex.stackexchange forum:

A lot of packages don't "play well" with the sagetex package. This appears to be one such package in that it prevents you from typing things in the natural way you tried in your code. One approach is to take advantage of sagetex and Python to avoid even having to use the ifthen package. But if you want to use that package then you can have sagetex insert the command as a string. This solution doesn't seem particularly natural but I don't know of a better way.

Open in Online-Editor
\documentclass{article}
 \usepackage{sagetex}
\usepackage{ifthen}
\begin{document}
\begin{sagesilent}
var('x')
 f = x^2

output = r""
 if f(2)>0:
 output += "a"
 else:
 output += "b"

 output1 = r"\ifthenelse{%s>%s}{a}{b}"%(f(2),0)
 \end{sagesilent}
 One way to handle the problem is to process it with sagetex to get\\
 \sagestr{output}\\
  and another way is to insert the command as a string\\
 \sagestr{output1}
 \end{document}
Permanenter link
Dieser Antwort ist "Community-Wiki" markiert.

beantwortet 17 Sep '15, 13:37

typ42's gravatar image

typ42
19313

wikifiziert 18 Sep '15, 02:16

saputello's gravatar image

saputello
18.4k22352

Da es nicht Deine Antwort ist (und Du sie nicht einmal übersetzt hast), habe ich mir erlaubt sie zu wikifizieren.

(18 Sep '15, 02:18) saputello

Das ganze funktioniert recht leicht mit LuaLaTeX. Die Ausgabe ist natürlich a.

Open in Online-Editor
\documentclass{article}
\usepackage{ifthen}
\begin{document}
\directlua{
function f(x)
    return tex.sprint(x^2)
end
}
\ifthenelse{\directlua{f(2)}>0}{a}{b}
\end{document}
Permanenter link

beantwortet 20 Sep '15, 11:04

Henri's gravatar image

Henri
10.0k31730

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

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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:

×6
×4

Frage gestellt: 15 Sep '15, 14:35

Frage wurde angeschaut: 1,139 Mal

Zuletzt aktualisiert: 20 Sep '15, 11:04