Creating Custom Contexts
Suppose that you have accumulated a nontrivial number of context modifications which you use frequently when writing problems. You can combine all of these modifications into a single file and define your own context.
First, what do you want to call your context? Let's say we will name it MyContext
. Whatever you end up naming your context, it is recommended practice to begin your filename with context
and it must end with .pl
as all macro files do. So your filename might be contextMyContext.pl
. When we're done we'll put the file in the /pg/macros/
sudbdirectory of the WebWork installation, or in your course's templates/macros
directory.
You will then include the file in the loadMacros()
call at the top of your file along with the other macros you load. You should place your context file after the standard macro files. So, for example,
loadMacros( "PGstandard.pl", "MathObjects.pl", "contextMyContext.pl", "PGcourse.pl", );
When defining a new context in your file, the code will proceed as follows:
- copy an existing context which is close to what you want,
- modify what you want changed.
For example, this line copies Context("Numeric")
into a new Context("MyContext")
:
$context{MyContext} = Parser::Context->getCopy("Numeric");
The following lines modify some aspects of this context:
$context{MyContext}->functions->disable("Trig"); $context{MyContext}->parens->set('('=>{type=>'Vector'}); etc...
The last line in the file should be
1;
which makes the file return a non-zero value (a zero value would indicate an error within the file).
That's it. Save it, put it in /pg/macros/
or your course templates/macros
directory, and load it in your problems with loadMacros()
.
You can save more complex changes as well, like the added functions or operators listed in the Modifying Contexts (advanced) page.