I am trying to write a macro to do a conditional check against two strings. The problem I'm having is that I want to check the output of a \sage command and do a string comparison without expanding the content of the \sage output. Normally I'd do some combinations of \expandafter and/or \noexpand, but the wrinkle I can't seem to get past is how fragile the \sage command is, since it requires multiple compiles before it has content.
In terms of pseudocode I want to do something like the following:
\documentclass{article}
\usepackage{sagetex}
\newcommand{\sagecheck}[3]{%
% #1 is the sagevariable,
% #2 is what I want to check to see if it is equal to
% #3 is the action to take if they are equal.
\ifthen{%
\magicstringcheck{$\sage{#1}$}{%
\newlabel{@sageinline0}{{%
#2}{}{}{}{}}%
}%
{#3}
}% End of \sagecheck
\newcommand{\magicstringcheck}[2]{%
%This is the part I don't know how to write. It should detokenize the result of the \sage command, but not the \sage command itself, and it should check that against the expected sage string output, which is of the form (in the sout file):
% \newlabel{@sageinline0}{{%
% (sage_variable_output)}{}{}{}{}}
}
\begin{document}
\begin{sagesilent}
k = 4
\end{sagesilent}
\sagecheck{k}{4}{This should work}
\sagecheck{k}{15}{This should do nothing}
\sagecheck{foo}{12}{Ideally this would error, since there is no sage variable named 'foo'}
\end{document}
if k == 4: .... – John Palmieri Sep 24 '19 at 17:56\sagecommand specifically, and not have a string directly displayed from sage. My hope was to have a LaTeX command that could parse the sage output and write it's own string (or something else) in native LaTeX, but based upon the sage result. – Jason Sep 24 '19 at 18:47\edef\temp{\sage{<variable name>}}and then\ifxthat against the expected value? Why do you use the whole label definition in the comparison? – siracusa Sep 25 '19 at 02:56\sagestrwork? – DJP Sep 25 '19 at 12:19