Loading and Use - PGML

From WeBWorK_wiki
Jump to navigation Jump to search

Loading the macro file

If you are going to use PGML in your problem, you must include "PGML.pl" in the loadMacros() call at the beginning of your problem.

 loadMacros("PGML.pl");

If you don't, you'll get a message about PGML::Format2 not being defined.

Producing Text using PGML

The text that you want processed by PGML should be enclosed in BEGIN_PGML and END_PGML, each on a separate line. That is,

 BEGIN_PGML
 ... your PGML code here ...
 END_PGML

You can have as many such PGML sections as you like within one problem.

Producing Solutions using PGML

The text of the solution should be enclosed in BEGIN_PGML_SOLUTION and END_PGML_SOLUTION, each on a separate line. That is,

 BEGIN_PGML_SOLUTION
 ... your PGML code here ...
 END_PGML_SOLUTION

PGML's math formatting and command substitution commands are particularly useful here, as you can include intermediate computations directly within the PGML itself:

 BEGIN_PGML_SOLUTION
 If [:x = [$a]:], then [:x+1 = ([$a]+1) = [@ $a+1 @]:]
 END_PGML_SOLUTION

There is no need to use a separate variable for the value of $a+1, as the result of this computation will be inserted into the solution at that point.

Producing Hints using PGML

The text for the hint should be enclosed in BEGIN_PGML_HINT and END_PGML_HINT, each on a separate line. That is,

 BEGIN_PGML_HINT
 ... your PGML code here ...
 END_PGML_HINT

As with solutions, you can perform computations and mathematical typesetting within the PGML hint:

 BEGIN_PGML_HINT
 What happens when [:x = [@ $a - $b @]:]?
 END_PGML_HINT

There is no need for a separate variable for the value of $a-$b.