Difference between revisions of "Sage in WeBWorK"
Line 76: | Line 76: | ||
To pass perl variables to the sage block if you need to from the problem initialization use: |
To pass perl variables to the sage block if you need to from the problem initialization use: |
||
− | :: TEXT(<<SAGE_CODE); [[ Details on how to pass variables in to be added later ... under construction ]] |
||
+ | :: TEXT(<<SAGE_CODE); |
||
− | where << SAGE_CODE allows interpolation |
+ | where << SAGE_CODE without single quotes allows interpolation. |
+ | This will not work correctly if no variables are not actually passed in. |
||
+ | Since perl variables within the Sage code are not interpreted as perl variables, all latex delimiters need to be converted from $ signs to \( and \) pairs. |
||
+ | Also, any @interact needs to be escaped and written as ~~@interact |
||
− | otherwise use: |
||
+ | If you are not passing any variables in use: |
||
:: TEXT(<<'SAGE_CODE'); |
:: TEXT(<<'SAGE_CODE'); |
||
− | where <<'SAGE_CODE' tells perl not to interpret variables |
+ | where <<'SAGE_CODE' tells perl not to interpret variables. This way Sage code and be pasted in verbatim without any need to convert formatting or other characters. |
[[Category:Developers]] |
[[Category:Developers]] |
Revision as of 22:54, 12 January 2012
Sage is an open source, online symbolic mathematical system. Details on Sage can be found at http://www.sagemath.org .
For use within WebWork, a special "single-cell" version of Sage is located at http://sagemath.org:5467
## Template for calling Sage from within a WebWork pg file DOCUMENT(); loadMacros( "PGstandard.pl", "PGchoicemacros.pl", "MathObjects.pl", ); TEXT(beginproblem()); # Regular WebWork setup $funct = Compute("x**4"); $funct_diff = $funct->D('x'); TEXT(<<'SAGE_CODE'); <div id="singlecell-test"><script type="text/code"> # Example Sage Python var('x') @interact def _(f = (x^2)): df = diff(f,x,1) html('$f \prime (x) = %s$'%str(latex(df)) ) # End of Sage code - Start of scripts that call the Sage single-cell server </script></div> <script type="text/javascript" src="http://sagemath.org:5467/static/jquery-1.5.min.js"></script> <script type="text/javascript" src="http://sagemath.org:5467/embedded_singlecell.js"></script> <script type="text/javascript"> $(function() { // load only when the page is loaded var makecells = function() { singlecell.makeSinglecell({ inputLocation: "#singlecell-test", editor: "codemirror", hide: ["editor","computationID","files","messages","sageMode"], evalButtonText: "Start/Restart", replaceOutput: true}); } singlecell.init(makecells); // load Single Cell libraries and then // initialize Single Cell instances }); </script> SAGE_CODE # Continue pg file as normal BEGIN_TEXT $PAR Using Sage above, determine the derivative of \[ f(x) = $funct \]. $PAR \(f '(x) = \) \{ ans_rule(20) \} END_TEXT Context()->normalStrings; ANS($funct_diff->cmp() ); ENDDOCUMENT();
To pass perl variables to the sage block if you need to from the problem initialization use:
- TEXT(<<SAGE_CODE);
where << SAGE_CODE without single quotes allows interpolation. This will not work correctly if no variables are not actually passed in. Since perl variables within the Sage code are not interpreted as perl variables, all latex delimiters need to be converted from $ signs to \( and \) pairs. Also, any @interact needs to be escaped and written as ~~@interact
If you are not passing any variables in use:
- TEXT(<<'SAGE_CODE');
where <<'SAGE_CODE' tells perl not to interpret variables. This way Sage code and be pasted in verbatim without any need to convert formatting or other characters.