Subsection 7.1.2 Perl-free Problems
If you’d just like to rattle off a quick question with no randomization, you can do as in this example.
<exercise>
<webwork>
<statement>
<p><m>1+2=</m><var name="'3'" width="5" /></p>
</statement>
</webwork>
</exercise>
The
<exercise>
above could be given an optional
<title>
,
<introduction>
, and
<conclusion>
. The
<webwork>
inside could be given a
<hint>
and
<solution>
. These are discussed in
Subsection 7.1.3.
In the above example, '3'
is the @name
attribute to a <var>
element. There is actually no “variable” named “3”; we are just using the slot where more complicated exercises would place a Perl variable answer.
So the above is how to create an answer blank that is expecting \(3\) as the answer. What you give as a @name
attribute will be passed to PG’s Compute()
constructor, so it needs to be valid input for Compute()
. Note that you could pass a string encased in quotes, or a perl expression. Just be mindful of the difference:
8**2
will process a perl real using exponentiation and lead to the MathObject Real 64.
'8^2'
will process a perl string and lead to the MathObject Real 64.
8^2
will process the perl real using bitwise XOR and lead to the MathObject Real 10.
The default context is Numeric
, which understands numerical expressions and formulaic expressions in the variable \(x\text{.}\) You can activate some other context as in this example.
<exercise>
<webwork>
<pg-code>
Context("ImplicitPlane");
</pg-code>
<statement>
<p>The answer is <m>x+y=1</m>.</p>
<p><var name="'x+y=1'" width="8" /></p>
</statement>
</webwork>
</exercise>
Many special contexts are automatically detected by PreTeXt, and it loads the appropriate macro file into the PG problem. However you may need to explicitly load a macro file as described in
Subsection 7.1.3.
Subsection 7.1.3 PG code in Problems
To have randomization in problems or otherwise take advantage of the algorithmic programming capabilities of Perl and WeBWorK’s PG language requires using a <pg-code>
tag. Having at least a little familiarity with coding problems in WeBWorK is necessary, although for simpler problems you could get away with mimicking the sample article in mathbook/examples/webwork/
. A <statement>
, optional <hint>
, and optional <solution>
follow.
<webwork>
<pg-code>
</pg-code>
<statement>
</statement>
<hint>
</hint>
<solution>
</solution>
</webwork>
If you are familiar with code for WeBWorK PG problems, the <pg-code>
contains lines of PG code that would appear in the “setup” portion of the problem. Typically, this is the code that precedes the first BEGIN_TEXT
or BEGIN_PGML
. If your code needs any special WeBWorK macro libraries, you may load them in a <pg-macros>
tag prior to <pg-code>
, with each such .pl
file’s name inside a <macro-file>
tag. However many of the most common macro libraries will be loaded automatically based on the content and attributes you use in the rest of your problem.
Here is a small example. Following the example, we’ll continue discussing <statement>
and <solution>
.
<webwork>
<pg-code>
Context("LimitedNumeric");
$a = Compute(random(1, 9, 1));
$b = Compute(random(1, 9, 1));
$c = $a + $b;
</pg-code>
<statement>
<p>Compute <m><var name="$a"/> + <var name="$b"/></m>.</p>
<instruction>Type your answer without using the <c>+</c> sign.</instruction>
<p>The sum is <var name="$c" width="2"/>.</p>
</statement>
<solution>
<p><m><var name="$a"/> + <var name="$b"/> = <var name="$c"/></m>.</p>
</solution>
</webwork>
Within a <statement>
, <hint>
, or <solution>
, reference <var>
tags by @name
.
Within the <statement>
, a <var>
tag with either a @width
or @form
attribute creates an input field answer blank that expects the variable with that @name
to be the answer.
A <var>
can have @form
with value essay
, in which case it need not have a @name
attribute. This is for open-ended questions that must be graded by a human. The form field will be an expandable input block if the question is served to an authenticated user within WeBWorK. But for the WeBWorK cells in PreTeXt HTML output, there will just be a message explaining that there is no place to enter an answer.
A <var>
can have @form
with value array
. You would use this when the answer is a Matrix or Vector MathObject (a WeBWorK classification) to cause the input form to be an array of smaller fields instead of one big field.
A <var>
can have @form
with value popup
, buttons
, or checkboxes
for multiple choice questions.
If you are familiar with PG, then in your <pg-code>
you might write a custom evaluator (a combination of a custom answer checker, post filters, pre filters, etc.). If you store this similar to
$my_evaluator = $answer -> cmp(...);
then the <var>
can have @evaluator
with value $my_evaluator
.
An <instruction>
is specific instructions for how the reader might type or otherwise electronically submit their answer. Contents of an <instruction>
will be omitted from print and other static output forms. The <instruction>
is a peer to <p>
, but may only contain “short text” children.
Subsection 7.1.4 WeBWorK in an <exercisegroup>
An
<exercisegroup>
is a collection of exercises with common instructions that are put into an
<introduction>
. If you put WeBWorK exercises in an exercisegroup, then when the exercises are exported to
.pg
problem files for use as online homework from a WeBWorK server it makes sense that the instructions from the
<exercisegroup>
’s
<introduction>
should be included in the
.pg
file. And so they are included there. Note that they are
not included when you are building
HTML or
LaTeX output for your project. (Rather, the
<exercisegroup>
’s
<introduction>
appears in its normal place.)
You should be aware of this when you write the <exercisegroup>
’s <introduction>
. It impacts the specific language you should use. For example, if you write “Differentiate the following functions.” or “Differentiate each of the functions below.”, then you have language that doesn’t fit the individual problem when it is used for homework on a WeBWorK server. Instead you might write “Differentiate the function”. It makes sense as common instructions for the <exercisegroup>
as well as the instructions for an individual exercise.
Subsection 7.1.6 Reusing a <webwork>
by @xml:id
If a <webwork>
has an @xml:id
, then another <webwork>
can “copy” the first one simply by using a @copy
attribute whose value is the first <webwork>
’s @xml:id
. The @seed
of the first <webwork>
is ignored, and the second <webwork>
may set its own @seed
. For example:
<exercise>
<webwork xml:id="foo" seed="1">
<pg-code>
$a = random(1,9,1);
$answer = $a+1;
</pg-code>
<statement>
<p>
Enter <m><var name="$a"/>+1</m>. <var name="$answer" width="10"/>
</p>
</statement>
</webwork>
</exercise>
<exercise>
<webwork copy="foo" seed="2"/>
</exercise>
The @copy
attribute should point to a <webwork>
that has PreTeXt-authored source, not to a <webwork>
with a @source
attribute. (If you want to copy one with a @source
attribute, just reuse the same @source
value.)
Subsection 7.1.7 Images
Subsubsection 7.1.7.1 Using a Local image file
Planned.
Subsubsection 7.1.7.2 Using TikZ
In a problem statement (or hint, or solution), you may use an
<image>
with a
<latex-image>
child, as long as the host WeBWorK server is version 2.16 or later. See
Subsubsection 4.14.3.2 for generalities about using
<latex-image>
.
However, if a <latex-image>
is inside a <webwork>
, you must use \(...\)
instead of $...$
to encase any inline math in the image. And if you have display math, that should use \[...\]
instead of $$...$$
.
Your latex-image code can use variables that you defined in the <pg-code>
section. Scalar variables may be used simply by using their perl names including the dollar sign sigil. For example, \draw ($a,$b) -- ($c,$d);
where $a
, $b
, $c
, and $d
are variables. However, any instance of \$
in code will be interpreted as an escaped dollar sign first, so rare situations may require you to be more explicit. The alternative is to include variables just as you would anywhere else in a problem statement, using a <var>
element like <var name="$a"/>
. You would also need to use a <var>
element if you would like to insert a perl array, for example <var name="@a"/>
.
In perl, $
, @
, and %
each have special meaning. So you may wonder about using them in your latex-image code. The short answer is that you should use them just as you would use them in a regular LaTeX document. So when you would like a dollar sign, write \$
. For a percent sign, use \%
. An “at” character does not need escaping, so write @
.
As mentioned above, do not use a dollar sign to encase math. If you want to put a LaTeX comment in the code, you may write it in the usual way like % This is a comment
.
Your project’s
<docinfo>
may contain a
<latex-image-preamble>
element. If so, and if that preamble content should affect the latex-images inside the
<webwork>
, then you need to get that preamble content up on the WeBWorK host course. In many cases, you will
need to get that preamble content up on the host course for the image to even compile. See
Section 38.3.
See the WeBWorK sample chapter for examples.
Subsubsection 7.1.7.3 Using @pg-name
In a problem statement (or hint, or solution), you may use an <image>
with a @pg-name
. This attribute’s values should be the name of an image created in the <pg-code>
section. For example, an image created using init_graph
from PGgraphmacros.pl
.
See the WeBWorK sample chapter for examples.