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, 20:35

typ42's gravatar image

typ42
38341928
Akzeptiert-Rate: 33%

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, 08: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, 11: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, 13:16) esdd

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

(18 Sep '15, 03: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, 15: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, 16:59) Henri
Ergebnis 5 von 6 show 1 more comments

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, 19:37

typ42's gravatar image

typ42
38341928
Akzeptiert-Rate: 33%

wikifiziert 18 Sep '15, 08:16

saputello's gravatar image

saputello
11.1k174365

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

(18 Sep '15, 08: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, 17:04

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

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:

×11
×7

gestellte Frage: 15 Sep '15, 20:35

Frage wurde gesehen: 9,390 Mal

zuletzt geändert: 20 Sep '15, 17:04