Difference between revisions of "Sage in WeBWorK"
Line 50: | Line 50: | ||
replaceOutput: true}); |
replaceOutput: true}); |
||
} |
} |
||
− | |||
singlecell.init(makecells); // load Single Cell libraries and then |
singlecell.init(makecells); // load Single Cell libraries and then |
||
// initialize Single Cell instances |
// initialize Single Cell instances |
||
− | |||
}); |
}); |
||
</script> |
</script> |
||
Line 70: | Line 68: | ||
ANS($funct_diff->cmp() ); |
ANS($funct_diff->cmp() ); |
||
− | |||
ENDDOCUMENT(); |
ENDDOCUMENT(); |
||
− | |||
− | |||
</nowiki> |
</nowiki> |
||
− | + | The example show how a problem can to pass perl variables from the problem initialization into the sage block. |
|
:: TEXT(<<SAGE_CODE); |
:: TEXT(<<SAGE_CODE); |
||
− | where << SAGE_CODE without single quotes allows interpolation. |
||
+ | where << SAGE_CODE without single quotes is necessary. However, the Sage code will not execute if no variables are actually passed in. Since perl variables within the Sage code are now interpreted as perl variables, all latex delimiters also need to be converted from $ signs to \( and \) pairs. |
||
− | This will not work correctly if no variables are actually passed in. Since perl variables within the Sage code are now interpreted as perl variables, all latex delimiters need to be converted from $ signs to \( and \) pairs. |
||
+ | Additionally, any @interact needs to be escaped and written as ~~@interact |
||
− | Also, any @interact needs to be escaped and written as ~~@interact |
||
− | If you are not passing any variables |
+ | If you are not passing any variables, 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. Sage code can then be pasted in verbatim without any need to convert formatting or escaping other characters. |
[[Category:Developers]] |
[[Category:Developers]] |
Revision as of 23:02, 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"> var('x') ~~@interact def _(f = ($funct)): df = diff(f,x,1) html('\( f \prime (x) = %s \)'%str(latex(df)) ) </script> </div> SAGE_CODE TEXT(<<'SAGE_SCRIPT'); <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_SCRIPT # 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();
The example show how a problem can to pass perl variables from the problem initialization into the sage block.
- TEXT(<<SAGE_CODE);
where << SAGE_CODE without single quotes is necessary. However, the Sage code will not execute if no variables are actually passed in. Since perl variables within the Sage code are now interpreted as perl variables, all latex delimiters also need to be converted from $ signs to \( and \) pairs. Additionally, any @interact needs to be escaped and written as ~~@interact
If you are not passing any variables, use:
- TEXT(<<'SAGE_CODE');
where <<'SAGE_CODE' tells perl not to interpret variables. Sage code can then be pasted in verbatim without any need to convert formatting or escaping other characters.