List Students
Use the "List Students" link to list the students in your class. On this page you can
import (register and enroll) students from a file, enroll a student (already registered)
with a known username. This is the easiest way to add a guest user to your class. Note that the "Last Login"
date shows the last time the student logged into XYZ Homework, not necessarily the last time they accessed
your course.
The List Students page also gives you access to student email addresses, as well as a link to send out a mass email or message
to all students
Exceptions
Click the "Make Exception" link to change the Start or End date of an assessment
for a single student. If you need to make exceptions for multiple students at once, or want to make
exceptions for multiple assessments at once, use the "Make Exception" button in connection with the checkboxes
in the Gradebook.
Resetting Passwords / Changing Info
Use the "Chg Info" link to reset a student's password,
update their email address, username or full name, or change their section or code.
You can also lock the student out of the course on this page. Doing so will
display a message to the student that they need to see their instructor to
regain access to the course. On this page you can also set a time limit multiplier
for students needing extra time on timed assessments. Setting the multiplier to 1.5 would
give the student 1.5 times the usual timelimit for all assessments.
Unenrolling
Use the "Unenroll" link to unenroll a student from the class, or the "Unenroll All" button
to unenroll all students. This can be useful to clear out a classroom at the end of
a term. Unenrolling all students will also delete all regular posts from the course's forums.
Import Students from File
Use the Import Students from File feature to register and enroll a set of students
automatically from a CSV (commas separated values) file. You can generate a CSV
file using any spreadsheet program.
The form will guide you through specifying which columns of the CSV file contain
First name, Last name, email address, and desired username. Once setting these options,
the first five rows of the file will be displayed so you can verify that the import
settings are correct. The students will be both registered and enrolled in the
current class upon submission.
Assigning Section and/or Code Numbers
Click the "Assign section and/or code numbers" link to assign section or code
numbers to students. These only serve for identification purposes, the the gradebook
will be sorted first by section, then by name. Section can be alphanumeric; code number
must be numeric, up to 4 digits.
Manage LatePasses
Click the "Manage LatePasses" link to give students LatePasses. Students can redeed
a LatePass for an extension on an online assessment without your intervention, provided
you have clicked the "Allow use of latepasses" option in that assessment.
On this page you can also define the number of hours extension a LatePass will grant
Manage Tutors
Click the "Manage Tutors" link to manage tutors for your class. Tutors can have an
instructor account or student account. Tutors will be able to view students' scores
and online assessments. If given permission, tutors can edit or enter online or offline
scores.
Add tutors by listing their usernames in the box
provided. Remove tutors by clicking the "Remove" checkboxes next to tutors and clicking Update
Once tutors are added, you can limit them to a single section of the course. If selected,
tutors will only be able to see scores for students in the section they're limited to. This
can be used in conjunction with the diagnostic system, since second-level selections become the
student's section identifier
LTI Integration
XYZ Homework can be used as a LTI tool using a course-level configuration (LTI 1.1 only) or
a global college-wide configuration (LTI 1.1 or 1.3). Use of LTI 1.3 is highly recommended.
LTI 1.1
Key Types
For a course-level configuration, your LTI key will take the form LTKkey_###_#. The first number, ###, is your course ID.
The last number determines how authentication is handled.
If that last digit is 0, then when the student accesses the LTI placement, the first time they will be asked to sign into their
XYZ Homework account or create one, and that account will be linked with the account at the host LMS. From then on, when the same
student accesses any LTI placement, they will not need to sign in again. They will be able to sign in directly to XYZ Homework as well.
If the last digit of your LTI key is 1, then a student account will automatically be created the first time a student
accesses the LTI placement, and that account will be linked with the host LMS account. The student will not be provided an XYZ Homework
username or password, so they will only be able to access XYZ Homework resources through the LMS LTI placements.
Note that grade return ONLY works reliably with the _1 type keys, so that type of key is recommended.
LTI Connection Options
XYZ Homework supports several types of LTI integration, including whole course single-signon,
and new links created from the LMS.
The recommended integration technique is to setup individual LTI links for each
assessment. This is necessary if you want the grade to be returned from XYZ Homework
to your LMS. The easiest way to set up LTI links in the LMS is to use the
Export feature in XYZ Homework to create links and import those into your LMS. To do this,
go to Course Items -> Export, select the items you want to export,
your LMS, and Download the CC Export. Then follow the appropriate instructions below.
Alternatively, you can manually create individual links to assignments, or you
can create a single link that launches your entire XYZ Homework course. Be aware
that in many LMSs, manually created links to assignments will lose their association
with XYZ Homework assessments when the course is copied in the LMS, so using the Import
process is recommened when supported by the LMS.
XYZ Homework can also be an LTI 1.1 consumer, using the External Tool option for Link items.
LTI 1.3
LTI 1.3 must be installed by the LMS administrator.
There are two general ways to set up an LTI connection:
- Dynamic Registration: Supported by Canvas, Moodle, and D2L, amongst others. The dynamic registration
URL is https://www.xyzhomework.com/imathas/lti/dynreg.php.
- Manually: Using the platform registration page: https://www.xyzhomework.com/imathas/lti/admin/platforms.php
The easiest way to set up LTI links in the LMS is to use the
Export feature in XYZ Homework to create links and import those into your LMS. To do this,
go to Course Items -> Export, select the items you want to export,
your LMS, and Download the CC Export. Then follow the appropriate instructions below.
Alternatively, you can setup individual links to assignments, using your LMS's "deep linking" feature.
The specific process varies by LMS.
Note that LTI 1.3 does not support a "whole course link" option, since that option does not allow grade
passback.
Canvas Integration - Using Import
Go to Course Items → Export, select the items you want to export, select your LMS,
and Download the Export Cartridge
To import the cartridge in Canvas:
- Go to Settings, then Import Course Content
- For Content Type, select Canvas Course Export Package.
Select the export file from your computer,
and select All Content. Click Import.
- If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, you do not need to set
up a course-level configuration. If you need to set up a course level
configuration, in your Canvas course:
- Go to Settings, then Apps, then View App Configurations
- Locate for the XYZ Homework App. Use the gear icon dropdown to select Edit
- For the Consumer Key, enter the Key listed in the Export screen in your XYZ Homework course.
- For Shared Secret enter the secret you set up in your Course Settings
- If Target URL is required, enter:
https://www.xyzhomework.com/imathas/bltilaunch.php
- Click Submit
Next you will need to establish the connection between your XYZ Homework course and Canvas course
- In Canvas, click one of the assessment links in your course.
- If this is your first time using this key and secret, XYZ Homework will
ask you, the teacher, to sign into your XYZ Homework account. This is necessary to
establish a connection between your LMS account and your XYZ Homework account.
You will not need to do this step again.
- Follow the prompts to associate the LMS course with your existing XYZ Homework course
or create a copy.
- Once complete, all the LTI links in your LMS should work.
- Be aware:
- Links, files, forums, and and text items were imported into your LMS. Changing
them in XYZ Homework will not change them in your LMS
- If you change assessment settings or the questions in an assessment in XYZ Homework,
those changes will show up when the assessment is launched from the LMS
- If you change due dates in XYZ Homework, they will be enforced by XYZ Homework, but the due dates
in the LMS will not automatically be updated. However, there is a course setting to allow
Canvas to set the due dates in XYZ Homework.
- Any new items added in XYZ Homework, including new assessments, will not
automatically show up in the LMS; you would need to repeat the export/import process.
- If configured, grades will be sent from XYZ Homework to the LMS immediately
every time the student completes a question, but the LMS may delay updating the grade.
Canvas Integration - Manual Process
If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, you do not need to set
up a course-level configuration. If you need to set up a course level
configuration, in your Canvas course:
- Go to Settings, then click the Apps tab
- Click on View App Configurations, then the +App button
- For Configuration type, select "By URL"
- For Name, enter XYZ Homework, or whatever you'd like
-
- For Consumer Key, enter:
LTIkey_####_1, where #### is your Course ID
- For Shared Secret enter the secret shown in your XYZ Homework Course Settings
- For the Config URL, enter
https://www.xyzhomework.com/imathas/canvas.php
- Click Submit
Blackboard Integration - older Common Cartridge Instructions
Go to Course Items → Export, select the items you want to export, select your LMS,
and Download the Export Cartridge
To import the cartridge in BlackBoard:
- Go to Packages and Utilities, then Import Package
- Click Import Package
- Select the export file from your computer, click Select All
to select all course materials, then click Submit.
- If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, skip ahead.
If you need to set up a course-level configuration, follow these steps.
- To to Packages and Utilities, then Manage LTI Links
- If the links are listed as Working, then you have an existing configuration,
and do not need to continue.
- For one of the links with status listed as Broken, use the drop-down menu
that shows when hovering over the link name and select Edit Credentials.
- For the Tool Provider Key, enter:
LTIkey_####_1, where #### is your Course ID
- For the Tool Provider Secret enter the secret you set up in your Course Settings
- Check the box "Apply these credentials to all links"
- Click Submit
- To enable grade return, Blackboard requires some additional steps:
- Return to the main course page in Blackboard.
- For each assessment link that was imported, use the drop-down menu and select Edit
- Set the Enable Evaluation option to Yes, specify the points possible (it does not
need to match the points possible in XYZ Homework), and set a Due Date if desired.
Next you will need to establish the connection between your XYZ Homework course and BlackBoard course
- In BlackBoard, click one of the assessment links in your course.
- If this is your first time using this key and secret, XYZ Homework will
ask you, the teacher, to sign into your XYZ Homework account. This is necessary to
establish a connection between your LMS account and your XYZ Homework account.
You will not need to do this step again, and students will not be asked to sign in
and will not need a XYZ Homework account.
- Follow the prompts to associate the LMS course with your existing XYZ Homework course
or create a copy.
- Once complete, all the LTI links in your LMS should work.
- Be aware:
- Links, files, forums, and and text items were imported into your LMS. Changing
them in XYZ Homework will not change them in your LMS
- If you change assessment settings or the questions in an assessment in XYZ Homework,
those changes will show up when the assessment is launched from the LMS
- If you change due dates in XYZ Homework, they will be enforced by XYZ Homework, but the due dates
in the LMS will not automatically be updated.
- Any new items added in XYZ Homework, including new assessments, will not
automatically show up in the LMS; you would need to repeat the export/import process.
- If configured, grades will be sent from XYZ Homework to the LMS immediately
every time the student completes a question, but the LMS may delay updating the grade.
Note: When configuring a course-level configuration, the use of a key in the form LTIkey_###_1 is recommended.
With this type of key, students will not have or need a username for XYZ Homework, and they must
access assignments via the LMS. This is usually desired when doing integration, and is necessary to ensure
grades are passed from XYZ Homework back to the LMS.
If, however, you are not interested in grade return, and simply want to provide single-signon from your LMS
into XYZ Homework while allowing direct login to XYZ Homework as well, then you can
use a key of the form LTIkey_###_0 instead. This will require students to have or create an
account on XYZ Homework, which they'll have to log into once to establish the connection.
Blackboard Integration - Using Import
Go to Course Items → Export, select the items you want to export, select your LMS,
and Download the Export Cartridge
To import the cartridge in BlackBoard:
- Go to Packages and Utilities, then Import Package
- Click Import Package
- Select the export file from your computer, click Select All
to select all course materials, then click Submit.
- If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, skip ahead.
If you need to set up a course-level configuration, follow these steps.
- To to Packages and Utilities, then Manage LTI Links
- If the links are listed as Working, then you have an existing configuration,
and do not need to continue.
- For one of the links with status listed as Broken, use the drop-down menu
that shows when hovering over the link name and select Edit Credentials.
- For the Tool Provider Key, enterthe Key listed in the Export screen in your XYZ Homework course.
- For the Tool Provider Secret enter the secret you set up in your Course Settings
- Check the box "Apply these credentials to all links"
- Click Submit
- If importing a Common Cartridge, to enable grade return Blackboard requires some additional steps:
- Return to the main course page in Blackboard.
- For each assessment link that was imported, use the drop-down menu and select Edit
- Set the Enable Evaluation option to Yes, specify the points possible (it does not
need to match the points possible in XYZ Homework), and set a Due Date if desired.
Next you will need to establish the connection between your XYZ Homework course and BlackBoard course
- In BlackBoard, click one of the assessment links in your course.
- If this is your first time using this key and secret, XYZ Homework will
ask you, the teacher, to sign into your XYZ Homework account. This is necessary to
establish a connection between your LMS account and your XYZ Homework account.
You will not need to do this step again.
- Follow the prompts to associate the LMS course with your existing XYZ Homework course
or create a copy.
- Once complete, all the LTI links in your LMS should work.
- Be aware:
- Links, files, forums, and and text items were imported into your LMS. Changing
them in XYZ Homework will not change them in your LMS
- If you change assessment settings or the questions in an assessment in XYZ Homework,
those changes will show up when the assessment is launched from the LMS
- If you change due dates in XYZ Homework, they will be enforced by XYZ Homework, but the due dates
in the LMS will not automatically be updated.
- Any new items added in XYZ Homework, including new assessments, will not
automatically show up in the LMS; you would need to repeat the export/import process.
- If configured, grades will be sent from XYZ Homework to the LMS immediately
every time the student completes a question, but the LMS may delay updating the grade.
Note: When configuring a course-level configuration, the use of a key in the form LTIkey_###_1 is recommended.
With this type of key, students will not have or need a username for XYZ Homework, and they must
access assignments via the LMS. This is usually desired when doing integration, and is necessary to ensure
grades are passed from XYZ Homework back to the LMS.
If, however, you are not interested in grade return, and simply want to provide single-signon from your LMS
into XYZ Homework while allowing direct login to XYZ Homework as well, then you can
use a key of the form LTIkey_###_0 instead. This will require students to have or create an
account on XYZ Homework, which they'll have to log into once to establish the connection.
Blackboard Integration - Manual Process
To manually create a link to XYZ Homework, in Blackboard:
- Under the Build Content dropdown, select Web Link
- Give the link a Name
- For URL, enter
https://www.xyzhomework.com/imathas/bltilaunch.php
- Click the checkbox for "This link is to a Tool Provider"
- If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, you will not see
or need to fill out the following two entries.
- For Key, enter
LTIkey_####_1, where #### is your Course ID
- For Secret, enter the secret shown in your XYZ Homework Course Settings
- If you are setting up a link to an individual assessment, set
"Enabled Evaluation" to Yes, and enter the points possible. Whole
course links to not return grades, so there is no need to enabled
evaluation for those.
- Click Submit
- If the link you just created shows "(invalid link)" next to the name,
they you'll need to ask your BlackBoard administrator to approve
LTI connections to XYZ Homework.
- Click on the link you just created.
- If this is your first time using this key and secret, XYZ Homework will
ask you, the teacher, to sign into your XYZ Homework account. This is necessary to
establish a connection between your LMS account and your XYZ Homework account.
You will not need to do this step again, and students will not be asked to sign in
and will not need a XYZ Homework account.
- If this is your first link from this course, XYZ Homework will ask you to
select the XYZ Homework course you want to connect your LMS course with.
- Select the assignment you want to link with, or select "Whole Course Placement"
if you want a single link to your entire XYZ Homework course, then
click Make Placement.
Be aware assessment links created manually in this way will lose their association
with XYZ Homework assessments when the course is copied in BlackBoard, so using the
Export/Import process is recommened if you are creating individual assessment links.
D2L Brightspace Integration
Go to Course Items → Export, select the items you want to export, select your LMS,
and Download the Export Cartridge
To import the cartridge in Brightspace:
- Go to Course Admin, and select Import/Export/Copy Components.
- Select Import Components, and "from a course package"
- Choose the export file and click Import All Components.
- If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, you can skip ahead.
If you need to set up a course-level configuration, follow these steps.
- Go to Course Admin, and click External Learning Tools
- Click on Manage Tool Providers. If you do not see this link,
then your LMS administrators have blocked your ability to self-configure the connection.
You will need to ask for them to set up a global tool provider.
- Click New Tool Provider
- For the Launch Point enter the address shown on the Export page
- For the Secret enter the secret you set up in your Course Settings
- Click the "Use custom tool information" box if needed
- For the Key, enter the Key listed in the Export screen in your XYZ Homework course.
- For the name name, enter:
XYZ Homework
- Click the "Allow users to use this tool provider" if that option is available.
- Under Security Settings, make sure the following options are checked (it is OK to check other ones as well):
- Send tool consumer information to tool provider
- Send context information to tool provider
- Send course information to tool provider
- Send LTI user ID and LTI role to tool provider
- Send user name to tool provider
- Send user email to tool provider (optional, but recommended)
- Save
Next you will need to establish the connection between your XYZ Homework course and Brightspace course
- In Brightspace, click one of the assessment links in your course.
- If this is your first time using this key and secret, XYZ Homework will
ask you, the teacher, to sign into your XYZ Homework account. This is necessary to
establish a connection between your LMS account and your XYZ Homework account.
You will not need to do this step again.
- Follow the prompts to associate the LMS course with your existing XYZ Homework course
or create a copy.
- Once complete, all the LTI links in your LMS should work.
- Be aware:
- LTI assessments may not show in the gradebook columns until a student started working on an assignment.
- Links, files, forums, and and text items were imported into your LMS. Changing
them in XYZ Homework will not change them in your LMS
- If you change assessment settings or the questions in an assessment in XYZ Homework,
those changes will show up when the assessment is launched from the LMS
- If you change due dates in XYZ Homework, they will be enforced by XYZ Homework, but the due dates
in the LMS will not automatically be updated.
- Any new items added in XYZ Homework, including new assessments, will not
automatically show up in the LMS; you would need to repeat the export/import process.
- If configured, grades will be sent from XYZ Homework to the LMS immediately
every time the student completes a question, but the LMS may delay updating the grade.
Moodle Integration
Go to Course Items → Export, select the items you want to export, select your LMS,
and Download the Export Cartridge
To import the cartridge in Moodle:
- Under Course Administration (in some versions, the big gear icon in the upper right), select Restore.
- Choose the export file and select Restore.
- Follow the prompts to import the content.
- Turn on editing for your course.
- For one of the assessment, use the Edit dropdown and select Edit Settings.
- If the Launch URL does not display the warning Tool configuration not found for this URL,
then you must have an existing LTI 1.3 connection or LTI 1.1 key and secret set up, and can skip ahead.
If you do see that warning, then follow these steps.
- Click the + sign located directly after the External tool type pulldown (in some versions, this is labeled Preconfigured Tool)
- Give the tool a name, like XYZ Homework
- For Tool base URL enter the address shown on the Export page
- For Consumer Key, enter the Key listed in the Export screen in your XYZ Homework course.
- For Shared Secret enter the secret you set up in your Course Settings
- Under Privacy, it is recommended to set all options to Always, but it is fine to leave it as Delegate to teacher instead.
- Save changes
- The Launch URL should now indicate Using tool configuration XYZ Homework. Click Save.
Next you will need to establish the connection between your XYZ Homework course and Moodle course
- In Moodle, click one of the assessment links in your course.
- If this is your first time using this key and secret, XYZ Homework will
ask you, the teacher, to sign into your XYZ Homework account. This is necessary to
establish a connection between your LMS account and your XYZ Homework account.
You will not need to do this step again.
- Follow the prompts to associate the LMS course with your existing XYZ Homework course
or create a copy.
- Once complete, all the LTI links in your LMS should work.
- Be aware:
- LTI assessments may not show in the gradebook columns until a student started working on an assignment.
- Links, files, forums, and and text items were imported into your LMS. Changing
them in XYZ Homework will not change them in your LMS
- If you change assessment settings or the questions in an assessment in XYZ Homework,
those changes will show up when the assessment is launched from the LMS
- If you change due dates in XYZ Homework, they will be enforced by XYZ Homework, but the due dates
in the LMS will not automatically be updated.
- Any new items added in XYZ Homework, including new assessments, will not
automatically show up in the LMS; you would need to repeat the export/import process.
- If configured, grades will be sent from XYZ Homework to the LMS immediately
every time the student completes a question, but the LMS may delay updating the grade.
LTI Integration for Other LMSs - Using Import
Go to Course Items → Export, select the items you want to export, select your LMS,
and Download the Export Cartridge. The cartridge is an IMS Common Cartridge format.
Import the cartridge into your LMS. If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, skip ahead.
Otherwise, you'll likely need to configure the LTI connection by providing the key and secret, which
can be found on the Course Settings page.
Next you will need to establish the connection between your XYZ Homework course and LMS course
- In your LMS, click one of the assessment links in your course.
- If this is your first time using this key and secret, XYZ Homework will
ask you, the teacher, to sign into your XYZ Homework account. This is necessary to
establish a connection between your LMS account and your XYZ Homework account.
You will not need to do this step again.
- Follow the prompts to associate the LMS course with your existing XYZ Homework course
or create a copy.
- Once complete, all the LTI links in your LMS should work.
- Be aware:
- Links, files, forums, and and text items were imported into your LMS. Changing
them in XYZ Homework will not change them in your LMS
- If you change assessment settings or the questions in an assessment in XYZ Homework,
those changes will show up when the assessment is launched from the LMS
- If you change due dates in XYZ Homework, they will be enforced by XYZ Homework, but the due dates
in the LMS will not automatically be updated.
- Any new items added in XYZ Homework, including new assessments, will not
automatically show up in the LMS; you would need to repeat the export/import process.
- If configured, grades will be sent from XYZ Homework to the LMS immediately
every time the student completes a question, but the LMS may delay updating the grade.
LTI Integration for Other LMSs - Manual Process
If you have an LTI 1.3 connection or global LTI 1.1 college-wide key and secret, you do not need to set
up a course-level configuration. Otherwise, you will need to set up a
course-level LTI configuration. Consult your LMS's help for how to do this;
some LMSs configure an LTI took at the course settings level, while some
have you enter the credentials with each link.
If you need to set up a course-level LTI configuration, you will need:
- A Consumer/Tool Key:
LTIkey_####_1, where #### is your Course ID
- A Secret: use the LTI secret shown in your XYZ Homework Course Settings
- Launch/Tool URL:
https://www.xyzhomework.com/imathas/bltilaunch.php
The process to set up LTI links varies by LMS, so consult your LMS for
details.
Be aware assessment links created manually in this way will lose their association
with XYZ Homework assessments when the course is copied in the LMS, so using the
Export/Import process is recommened if you are creating individual assessment links
and your LMS supports it.
Writing Questions
The XYZ Homework question format is based on PHP.
Question Parts
A question is formed in several parts:
- Description: A description of the question. This is not shown to students
- Use Rights: The rights you wish to grant other people (you always have full rights). Options are:
- Private: Only you can use the question
- Use, no modification: Anyone can use the problem, but only you can modify the problem. Anyone can add
library assignments, but cannot remove assignments.
- Use, allow modification: Anyone can use or modify the problem.
- Libraries: The question libraries you wish to include this question in
- Question type: The type of question.
- Common control: General definitions needed for both display and scoring
- Question control: Definitions only needed for question display
- Question text: The actual question display. This section should be HTML based, but
can include variables defined in the common or question control. For convenience, a blank line
is automatically interpreted to be a paragraph break. Use of < and > signs are usually
handled ok, but use of the HTML < and > are recommended in their place.
- Answer: Code defining the answer
Note: All control code can be placed in the "Common Control" box; the Question Control and Answer sections do not have to be used.
Basic Control Syntax
Lines of the common control, question control, and answer sections usually take the form of variable
definition. In XYZ Homework, variables are identified with a dollarsign ($) prefix. For example,
$a is the variable a. Most lines will take one of these forms:
- $var = number. Example: $a = 3
- $var = calculation. Example: $a = 3*$b*$c
- $var = function. Example: $a = showplot("sin(x)")
- $var = randomizer. Example: $a = rand(-5,5)
Variable Types
There are a few types of variables:
- A number: $a = 15. A calculation like $a = 3^2 will also result in a number
- An array: $a = array(6,8,10). This is a collection of variables. You can reference the parts using an index (note that arrays are zero-indexed), so $a[0] = 6.
- A string: $a = "hi there".
- Boolean: $a = true
Note that numbers are not in quotes, and strings are in quotes. When you use
the double-quote mark (") to define a string, you can interpolate variables into
the string. Example:
$a = 3
$b = 5
$str = "What is $a/$b"
In this example, $str now contains "What is 3/5".
Note that strings in single quotes will not interpolate variables
As a warning, strings are interpolated literally, so if you had $a = -4 and
then defined $b = "$a^2" you would end up with "-4^2", which may not be
what you intended. Use explicit parentheses in these cases.
Array assignment
In some cases you want to define several variables at once. There are two ways to
do this:
- $var1,$var2 = arrayfunction. Example: $a,$b = diffrands(-5,5,2)
- $ar = arrayfunction. Example: $ar = diffrands(-5,5,2)
In the first example, variables $a and $b each take on a single value. In the second example,
the variable $ar is an array; the elements can be accessed as $ar[0] and $ar[1] (note
that arrays are zero-indexed). If you use this approach, enclose the variable reference in
parenthesis in calculations, like $new = ($ar[0])^2, and in curly brackets inside strings,
like $string = "there were {$ar[0]} people".
You can also literally define an array using the "array" function.
Examples: $ar = array(2,3,4,5), or $ar = array("red","green","blue")
You can also use a shorthand notation for an array, using square brackets.
Example: $ar = [2,3,4,5].
Working with Strings
If needed, you can concatenate (combine) two strings using the . operator. Example:
$a = "string one "
$b = "string two"
$both = $a . $b
Here, $both now contains the string "string one string two"
If you have a long command to type, you can put a "&" at the end of a line to specify it continues on the next line. Example:
$questions = array("this is choice 1",&
"this is choice 2")
If defining a string for display, you can put a "&&" at the end of a line to specify it continues on the next line and insert
an HTML line break. Example:
$showanswer = "Do this first. &&
Then do this."
will be interpreted as:
$showanswer = "Do this first. <br/>Then do this."
Comments
You can insert comments in your code by starting the comment with two forward slashes: //this is a comment.
Typically it's best to put comments on their own line, but they can also be placed after a line of code.
Conditionals
Any assignment line can be followed by one of two conditional: "where" or "if".
"where" is used to repeat the previous assignment if the condition provided is not met. The
"where" condition is almost exclusively used with array randomizers. Example: to select two
different numbers that are not opposites:
$a,$b = diffrands(-5,5,2) where ($a+$b!=0)
Beware that the system will give up if it's unable to meet the specified conditions after 200 tries,
so be sure your where condition has fairly high probability of success, ideally at least 10%. If it doesn't,
you should consider where there are other ways to generate your values. Alternatively, you can
specify a fallback value to use if the condition fails using else:
$a = rand(1,100) where (gcd($a,$b)==1) else ($a = 7)
"if" is used to make an assignment conditional. For example:
$a = rand(0,1)
$b = "sin(x)" if ($a==0)
$b = "cos(x)" if ($a==1)
Note the use of double equal signs (==) for testing equality. A single equal sign (=) will
make an assignment (change the value of $a in this example) and return "true", which is probably not what you intended to do.
Comparison operators available for "if" and "where" statements:
- == Equal to
- != Not equal to
- > Greater than
- < Less than
- >= Greater than or equal to
- <= Less than or equal to
- isset($v) Whether $v is defined
To do compound conditionals, use || for "or", and && for "and". For example:
$a = nonzerorand(-9,9) where ($a!=1 && $a!=-1)
The "if" condition can also be used before or after a code block like this:
$a = rand(0,1)
if ($a==0) {
$b = 1
$c = 2
}
or
$a = rand(0,1)
{
$b = 1
$c = 2
} if ($a==0)
When "if" is used before a block of code, it can optionally be followed
with "elseif" and/or an "else" statement, like this:
$a = rand(0,5)
if ($a==0) {
$b = 1
} elseif ($a==2) {
$b = 3
} else {
$b = 2
}
"where" can also be applied to a block of code:
{
$a = rand(-5,-1)
$b = rand(1,5)
} where ($a+$b !==0)
or with a fallback
{
$a = rand(-5,-1)
$b = rand(1,5)
} where ($a+$b !==0) else {
$a = -3
$b = 5
}
Conditionals in Question Text
Within the question text, it's possible to have a section of text display based on the value of a variable.
If the text is a single string, it's preferable to define the string conditionally in the question code, then
insert the variable for the string in the question text. Putting a conditional direclty in the question text
is primarily intended for cases where there is a large block of text to control.
To do conditional text, wrap the text in [if variable==value][/if]. Note that the variable name
should be given without the preceeding dollar sign here. You can use other simple comparisons like != or <, but
not more complicated expressions. The value should not be in quotes, even if it is text. It is fine to have things
like $answerbox inside two conditionals, so long as only one will display at at time.
Example:
[if graphdispmode==0]
Given f(x)=$func, estimate f'(x) at x=$x. $answerbox
[/if]
[if graphdispmode>0]
$graph
Given the graph above, estimate f'(x) at x=$x. $answerbox
[/if]
Loops
There are several looping macros (such as calconarray) that can meet most needs. For more general use
there is a "for" loop:
for ($i=a..b) { action }
Here a and b represent whole numbers, variables, or simple expressions.
Examples:
$f = 0
for ($i=1..5) { $f = $f + $i }
$a = rands(1,5,5)
$b = rands(1,5,5)
for ($i=0..4) {
$c[$i] = $a[$i]*$b[$i]
}
For associative arrays (arrays with non-numeric or non-consecutive keys) you can use a "foreach" loop:
foreach ($arr as $k=>$v) { action }
Here $arr is the associative array, and as it loops the keys will be assigned
to $k and the values to $v.
Example:
$arr = ['red' => 3, 'green' => 5, 'blue' => 2]
$str = ''
for ($arr as $color=>$num) {
$str .= "There are $num balls that are $color. "
}
Conditions can be used inside a for loop, but not outside without explicit blocking
for ($i=1..5) {$a = $a+$i if ($i>2) } WORKS
for ($i=1..5) {$a = $a+$i} if ($a>2) DOES NOT WORK
{for ($i=1..5) {$a = $a+$i} } if ($a>2) WORKS
Inside a for loop, break can be used to break out of the loop, and
continue can be used to move on to the next iteration without executing
any further code in the block.
Randomizers
Note on macros: The descriptions below explain macros available and the arguments the
functions should be called with. Arguments in [square brackets] are optional arguments, and
can be omitted.
For all randomizers, all bounds (min,max) are inclusive.
Single result randomizers:
- rand(min,max): Returns an integer between min and max
- rrand(min,max,p): Returns a number between min and max in steps of p. Example: rrand(2,5,.1) might return 3.4.
rrand(2,5,.01) might return 3.27. rrand(2,8,2) might return 6
- nonzerorand(min,max): Returns a nonzero integer between min and max
- nonzerorrand(min,max,p): Returns a nonzero real number between min and max in steps of p
- randfrom(list or array): Return an element of the list/array. Examples of lists: "2,4,6,8", or "red,green,blue"
- randname(),randmalename(),randfemalename(): Returns a random first name
- randnamewpronouns([option]): Returns a random first name with pronouns in the order: subjective, objective, possessive (singular), possessive (plural), reflexive. Can set option to 'neutral' for they/them/their/theirs/themself pronouns.
Use: $name,$heshe,$himher,$hisher,$hishers,$himherself = randnamewpronouns()
- uniqid(): Generates a random unique string, useful for giving a unique id to elements.
Array randomizers (return multiple results):
- rands(min,max,n,[order]): Returns n integers between min and max. Can set order to 'inc' or 'dec' to sort the values, but be aware there may still be duplicate values.
- rrands(min,max,p,n,[order]): Returns n real numbers between min and max in steps of p. Can set order to 'inc' or 'dec' to sort the values.
- nonzerorands(min,max,n,[order]): Returns n nonzero integers between min and max. Can set order to 'inc' or 'dec' to sort the values.
- nonzerorrands(min,max,p,n,[order]): Returns n nonzero real numbers between min and max in steps of p. Can set order to 'inc' or 'dec' to sort the values.
- randsfrom(list/array,n,[order]): Return n elements of the list/array. Can set order to 'inc' or 'dec' to sort the values.
- jointrandfrom(list/array,list/array,[list/array,...]): Returns one element from each list, where the location used in each list is the same
- diffrands(min,max,n,[order]): Returns n different integers between min and max. Can set order to 'inc' or 'dec' to sort the values.
- diffrrands(min,max,p,n,[order]): Returns n different real numbers between min and max in steps of p. Can set order to 'inc' or 'dec' to sort the values.
- diffrandsfrom(list/array,n,[order]): Return n different elements of the list/array. Can set order to 'inc' or 'dec' to sort the values.
- nonzerodiffrands(min,max,n,[order]): Returns n different nonzero integers between min and max. Can set order to 'inc' or 'dec' to sort the values.
- nonzerodiffrrands(min,max,p,n,[order]): Returns n different nonzero real numbers between min and max in steps of p. Can set order to 'inc' or 'dec' to sort the values.
- jointshuffle(list/array1,list/array2,[n1,n2]): Shuffles two lists/arrays in a way that retains
respective order. In n1 is provided, n1 elements from each shuffled array will be returned (like
a joint version of diffrandsfrom). If n2 is also provided, n1 elements of list/array1 and n2
elements of list/array2 will be returned.
- singleshuffle(list/array,[n]): returns a shuffled version of a list/array. If n is provided,
it behaves identically to diffrandsfrom
- randnames(n),randmalenames(n),randfemalenames(n): Returns n random first names
- randcity([country]),randcities(n, [country]): Returns one or n random US or Canadian city names. Argument country can be set to "USA" or "Canada". The default is "USA".
- randstate([country]),randstates(n, [country]): Returns one or n random US state or Canadian province names. Argument country can be set to "USA" or "Canada". The default is "USA".
- randcountry(),randcountries(n): Returns one or n random country names
- randpythag([min,max]): Return a Pythagorean triple. min/max default to 1 to 100
Graph/Table Macros
The following macros create graphs or tables:
- showarrays(string,array,[string,array]...,[options]): Creates a tabular display of the data in the array(s) as column(s), with the strings
as column headers. Alternatively you can call this function with arguments
showarrays(array of column headers, array of data arrays, [options]). Options can be a string = "c", "l", or "r" to center, left-align, or right align data,
or can be an array with $opts["align"] for alignment, $opts["tablealign"]="center" to center the whole table,
and $opts["caption"] to add a caption to the table. To align each column differently, provide a
a string with a character for each column, like "rcc"
- showdataarray(array,[columns,options]): Creates a tabular display of the data in the array with no headers. Data is presented
in one column unless second argument is provided, in which case the data will be distributed over the specified number of columns.
Options can be a string = "c", "l", or "r" to center, left-align, or right align data,
or can be an array with $opts["align"] for alignment, $opts["tablealign"]="center" to center the whole table,
and $opts["caption"] to add a caption to the table.
- horizshowarrays(string,array,[string,array]...): Creates a tabular display of the data in the array(s) as row(s), with the strings
as row labels. Does not text wrap, so only use for small data sets.
- showrecttable(data array of arrays,columnlabels,rowlabels,[format]): Creates a tabular display of a 2x2 data table, where $data[0] is the first row of the table.
The rowlabels and columnlabels are arrays of labels. format = "c", "r", or "l" to center, left-align, or right align data.
- showplot(funcstrings,[xmin,xmax,ymin,ymax,labels,grid,width,height])
- funcstrings is a single string or an array of strings each having at least the first of the following list:
"function,color,min,max,startmarker,endmarker,width,dash"
- Function: a single function of x, like cos(x), or a parametric function of t, entered like [sin(t),cos(t)], or x=c for a vertical line, entered like x=1
- color: a color designator: black,red,orange,yellow,green,blue,purple
- min,max: the min and max values for the input variable for which you wish to see this graph. You can also exclude
point discontinuities; for example -5,5!0!2 for min,max would include all values from -5 to 5, excluding 0 and 2.
- startmarker,endmarker: can be "open" or "closed" (dots), "arrow", or anything else for none
- width: a pixel width for the line
- dash: enter "dash" if you want a dashed line, otherwise the line is solid
- Examples: "cos(x),red" or "x^2,,-2,2,open,closed" or "[t^2,t/3],blue,0,5,,,2,dash" or "1/x,black,-5,5!0" or "x=1,red,,,,,,dash"
- Dots and Labels: There are two alternate funcstrings formats:
- dots: For drawing dots. A string containing at least the first three of: "dot,x,y,style,color,label,labelloc"
- dot: the literal word dot
- x,y: the coordinates of the dot
- style: open or closed
- color: a color designator: black,red,orange,yellow,green,blue,purple
- label: a text string to put as a label on the dot
- labelloc: label location: above, left, right, below, aboveleft, etc.
- Examples:: "dot,3,4", "dot,1,1,open", "dot,3,3,,blue,A"
- text: For placing text labels. A string containing at least the
first four of: "text,x,y,label,color,location,angle"
- text: the literal word text
- x,y: the coordinates of the label
- label: the text string to display
- color: a color designator: black,red,orange,yellow,green,blue,purple
- location: label location: above, left, right, below, aboveleft, etc.
- angle: a rotation angle in degrees for the label (0,90,180,270)
- Examples:: "text,2,4,Cars", "text,4,0,Hours,below"
- xmin,xmax,ymin,ymax: Graphing window. Defaults to -5 to 5 for both. Use "0:-n" (for some value of n) for xmin or ymin to only
have gridlines and labels after 0, while still using -n to adjust spacing. This is an alternative to using addplotborder to create
first quadrant graphs.
- labels: spacing of axes labels. Defaults to 1. Set to "off" or 0 for none. Use "xlbl:ylbl" for different spacing on each axis. Use "xlbl:ylbl:xname:yname" to put a named label on the axes.
- grid: spacing of grid lines. Defaults to 1. Set to "off" or 0 for none. Use "xgrid:ygrid" for different spacing on each axis.
- width,height: The width and height (in pixels) of the graph. Defaults to 200x200
- mergeplots($plot1, $plot2, [$plot3, $plot4, ...]): Merges multiple plots into one. Usually
not necessary, since showplot can accept an array of funcstrings, but occasionally useful
when adding to a graph generated by another function. The grid and border from the first
graph is used. To avoid weird behavior, try to ensure all plots were drawn using the same
grid.
- addfractionaxislabels(plot,step,[axis]): Adds labels along the horizontal axis in steps of step to a plot created with showplot.
Step is a fraction like "1/4", or a pi multiple, like "pi/4" or "2pi". When using this, make sure to set the showplot x-axis label
spacing larger than the domain to prevent the default labels from showing. Set axis to "y" to add fraction axis labels on the y-axis.
- addlabel(plot,x,y,label,[color,loc,angle,size]): Adds a label to a plot created with showplot.
- plot: The plot created with showplot
- x,y: The coordinates for the label
- label: The string label itself. MathML cannot currently be displayed in labels
- color: Label color. Defaults to black.
- loc: By default, the label is centered at the x,y coordinates. Use "left" to display the string to the left of the
point, "right" to the right, "below" for below the point, "above" for above the point.
- angle: Angle to rotate text.
- size: font size for label.
- addlabelabs(plot,x,y,label,[color,loc,angle]): Adds a label to a plot created with showplot. Parameters are the same as with
addlabel, except x and y here are pixel values on the picture rather than values relative to the axes.
- addplotborder(plot,left,[bottom,right,top]): Changes the pixel width of border (default 5) around a plot. Labels
will show within the border. Typically used to add room for labels to show.
- adddrawcommand(plot,commands): Inserts arbitrary asciisvg drawing commands into an existing
plot created with showplot or other drawing tools.
- showasciisvg(string,[width,height,alttext]): If you know the ASCIIsvg language, this will set up an svg with "string" as the script.
optionally you can specify the width and height (in pixels) for the svg. For accessibility, you should always try to
include alttext, which is text that displays to people requesting non-visual alternatives.
- replacealttext(image or graph, alttext): Replaces the alt text (alt tag) in the image or graph with the specified text. This alt text
will replace the autogenerated textual description for graphs produced by showplot.
- changeimagesize(image or graph, width, [height]): Changes the display width for an image.
Note this doesn't resize the file itself, just changes the display size - it's always better to resize the original
image file.
- textonimage(img,text,left,top[text,left,top,left,...]): Overlays text over an image. Image can be a URL or the variable for an uploaded
image. Specify the text string, and offset in pixels from the top left corner. Can specify multiple strings to overlay.
textonimage is not screenreader-friendly, so it's recommended you provide an alt text on the image,
which will be read to the screenreader instead of the image and any layered text.
- addimageborder(image, [border width, margin]): Adds a border to an image uploaded in
the question editor. Border width (default 1) and whitespace margin (default 0) can be specified.
- arraystodoteqns(xarray,yarray,[color]): Converts an array of x-values and y-values into a form that can be used in
showplot.
- connectthedots(xarray,yarray,[color,thickness,startmarker,endmarker]): Converts an array of x-values and y-values into a form that
can be used in showplot to create a series of lines connecting the (x,y) pairs
- arraystodots(xarray,yarray): Converts an array of x-values and y-values into a form that can be used in the Drawing answer type
- gettwopointlinedata(stuans, [xmin, xmax, ymin, ymax, drawing width, drawing height]) or gettwopointlinedata(stuans, [grid, snaptogrid]): Takes a $stuanswers from a drawing
question and pulls out the two-point line data. Returns an array of lines, each of form array(x1,y1,x2,y2) giving the coordinates
of the two points used.
- gettwopointdata(stuans, type, [xmin, xmax, ymin, ymax, drawing width, drawing height]) or gettwopointdata(stuans, type, [grid, snaptogrid]): Takes a $stuanswers from a drawing question
and pulls out the two-point data for the given curve type. Type should be one of 'line', 'lineseg', 'ray', 'parab', 'halfparab', 'horizparab', 'sqrt', 'cubic', 'cuberoot',
'rational', 'exp', 'genexp', 'log', 'genlog', 'sin', 'cos', 'abs', 'vector', 'circle','ellipse'. Returns an array of curve data, each of form array(x1,y1,x2,y2) giving the coordinates of
the two points used. They are returned in the order clicked. For example, with 'parab' type, the first point is the vertex and the
second point is an arbitrary point. Using 'genexp' or 'genlog' will return a 5th entry which is the value of the asymptote. Can use type 'circlerad' to return array(x-center,y-center,radius) or 'ellipserad'
to return array(x-center,y-center,x-radius,y-radius).
- gettwopointformulas(stuans, type, [xmin, xmax, ymin, ymax, drawing width, drawing height]) or gettwopointformulas(stuans, type, [grid, snaptogrid]): Takes a $stuanswers from a drawing question
and returns formulas for curves drawn by the student. Type should be one of 'line', 'lineseg', 'ray', 'parab', 'halfparab', 'horizparab', 'sqrt', 'cubic', 'cuberoot',
'rational', 'exp', 'genexp', 'log', 'genlog', 'sin', 'cos', 'abs', 'circle','ellipse'. Returns an array of expressions, each a function of x, for the curves drawn. They are returned in the order clicked. For
'horizparab', output will be in terms of y. For 'circle' and 'ellipse', output will be expression in x and y equaling 1. Can give a final optional argument 'showequation,[xvar,yvar]' to output implicit equations with optional custom x
and y variables.
- getdotsdata(stuans, [xmin, xmax, ymin, ymax, drawing width, drawing height]) or getdotsdata(stuans, [grid, snaptogrid]): Takes a $stuanswers from a drawing
question and pulls out the closed dots data. Returns an array of dots, each of form array(x1,y1) giving the coordinates
of the dot.
- getopendotsdata(stuans, [xmin, xmax, ymin, ymax, drawing width, drawing height]) or getopendotsdata(stuans, [grid, snaptogrid]): Takes a $stuanswers from a drawing
question and pulls out the open dots data. Returns an array of dots, each of form array(x1,y1) giving the coordinates
of the dot.
- getlinesdata(stuans, [xmin, xmax, ymin, ymax, drawing width, drawing height]) or getlinesdata(stuans, [grid, snaptogrid]): Takes a $stuanswers from a drawing
question using the older non-twopoint line tool or the polygon tool, and pulls out the lines data. Returns an array, with an element for each line/curve draw. Each of those
elements will be an array of points on that line/curve. Each of those points is array (x,y).
- getineqdata(stuans, [type, xmin, xmax, ymin, ymax, drawing width, drawing height]) or getineqdata(stuans, [grid, snaptogrid]): Takes a $stuanswers from a drawing question
and pulls out the inequalities data for the given curve type. Type should be one of 'linear' or 'quadratic'.
Returns an array of curve data, each of form array(style,x1,y1,x2,y2,x3,y3) giving the coordinates of
the three points used. They are returned in the order clicked. style will be either 'ne' for strict inequality (dashed line),
or 'eq' for inequality with equality (solid line).
- getsnapwidthheight(xmin, xmax, ymin, ymax, drawing width, drawing height, snaptogrid): Takes drawing grid info and a snaptogrid
value or string, and returns an array(width,height) giving a closeby drawing width and height that will guarantee that the snaptogrid values
fall on exact drawing pixel locations.
The following macros help with formatting values for display:
- makepretty(string or array of strings): Changes double add/subtract signs to a single sign.
- makeprettydisp(string or array of strings): Does makepretty (see above) and backquotes the string for math display
- polymakepretty and polymakeprettydisp: Like makepretty, but for polynomials. Cleans up 0*, 1*, ^1, and ^0 to make the polynomial look nicer.
This function can do weird things for equations that are not simple polynomials, so test well
- makexpretty and makexprettydisp: (deprecated - use makexxpretty instead) Like makepretty, but the X-tra version - attempts to clean up things like 1*, 0*, etc. This function
will often cause weird things to happen, so test well
- makexxpretty and makexxprettydisp: Like makepretty, but the X-tra version - attempts to clean up things like 1*, 0*, x^1, x^0, etc. Can occasionally cause strange output, so
be sure to test. Handles things better than the older makexpretty, but does not always produce 100% identical output.
This function cannot handle |x| notation; use abs(x) instead.
- makepretynegative(string): Puts parens around negatives is certain cases.
Changes 3--4 to 3-(-4) and 3+-4 to 3+(-4), but note it will change 3-+4 to 3-4.
- numtowords(number,[addth, numwithTh, addcommas): Creates a string containing number written out in words.
numtowords(1203) returns "one thousand two hundred three"
numtowords(1203,true) returns "one thousand two hundred third"
numtowords(1203,false,true) returns "1023rd"
numtowords(1203,false,false,true) returns "one thousand, two hundred three"
- fractowords(numerator,denominator,[options]): Creates a string containing fraction numerator/denominator written out in words. By default, fractions will be reduced to integers if possible,
and pos/neg signs will be reduced. Options is a string that can include combinations of 'mixed' or 'literal', and 'over' or 'by'. Using 'over' or 'by' will connect numerator and denominator with that word.
Using 'mixed' will output a mixed number, and 'literal' overrides the default simplifications. Does not allow division by zero. If 'over' and 'by' both used, defaults to 'over'. If 'mixed' and 'literal' both used,
defaults to 'mixed'.
fractowords(5,-2) returns "negative five halves"
fractowords(6,3) returns "two"
fractowords(-7,4,'mixed') returns "negative one and three fourths"
fractowords(-7,4,'mixed over') returns "negative one and three over four"
fractowords(6,3,'literal') returns "six thirds"
fractowords(6,3,'literal over') returns "six over three"
- numtoroman(number,[uppercase]): Converts a number 0.5-3999.5 to a roman numeral string. Defaults to uppercase; set second parameter to false to
produce lowercase
- prettyint(number): Adds commas in thousands spaces of integers. Example: prettyint(1234) will return "1,234". The result is a string, which
can only be used for display, not in calculations
- prettyreal(number,decimals,[comma]): Adds commas in thousands spaces of number, and displays the value to a fixed number of decimals places (rounding if needed).
Example: prettyreal(1234.567,2) will return "1,234.57", and prettyreal(1.8,3) will return "1.800". The result is a string, which
can only be used for display, not in calculations. By default adds a comma as a thousands separator; set comma to "" to override.
- prettyreal_instring(string,decimals,[comma]): Formats any number in the string
using the same process as prettyreal.
- round_instring(string,[decimals]): Rounds any number in the string
to the specified number of decimal places (nearest whole number if decimal is left out)
- prettysmallnumber(number, [space]): Prevents very small numbers from being displayed as scientific notation.
Set space to true to add space in groups of 3, like 0.000 000 02
- prettysigfig(number,sigfigs,[comma,choptrailingzeros,scinot,sigfigbar]): Rounds number to sigfigs significant figures. By default it adds commas in thousands spaces; set comma to "" to override.
Set choptrailingzeros to true to chop trailing zeros from the decimal part, even if significant. Set scinot to true to display in scientific notation. Set sigfigbar to true to put line over last significant, non-terminating zero, such as 4200 having three sig figs (use only in math display).
This is for display; to round a number for calculations, use roundsigfig.
- prettysigfig_instring(string,sigfigs,[comma,choptrailingzeros,scinot,sigfigbar]):
Rounds any number in the string to sigfigs significant figures. The rest of the options are the same
as for prettysigfig.
- makescinot(number,[decimals,format]): Converts number to scientific notation. If provided, rounds mantissa to decimals places. Can specify format: "*" "E" as alternative to default cross.
- prettytime(value,informat,outformat): Creates a nice representation of a time. Informat can be 'h', 'm', or 's' designating whether
value is hours, minutes, or seconds. Outformat can be any combination of these to specify output. For example, 'hm' will return "__ hours and __ minutes". Outformat
can also be 'clock' which returns 3:42pm, or 'sclock' which returns 3:42:15pm
- dispreducedfraction(numerator,denominator,[doubleslash,variable in numerator]): Takes two numbers as numerator and denominator of a fraction, returning a display form of the fraction,
reduced to lowest terms. Suitable for $showanswer. Set doubleslash to true to produced "3//4" rather than "3/4". Set variable in numerator to put a variable
in the numerator, such as pi.
- makereducedfraction(numerator,denominator,[doubleslash,variable in numerator]): Same as dispreducefraction, but not already in display form.
An alternate input form of makereducedfraction(numerator,denominator,'parts') will return an array of the
reduced numerator and denominator.
- decimaltofraction(decimal,[format,maxden]): Converts a decimal to a fraction. Can use format="mixednumber" to get a mixed number rather than improper fraction.
Only works for denominators up to maxden (default 5000)
- htmldisp(string,[variables]): Uses HTML instead of the math typesetter to display simple exponents and subscripts, and to italicize variables
- formatcomplex(real,imag): Creates a string like "2+i" from the real and imaginary parts.
- rawurlencode(string): Encodes a string for use in a URL query string parameter.
String Macros
These macros help with working with strings:
- stringappend(value,string): Appends string to value. If value is an array, string is appended to each element of the array
- stringprepend(value,string): Same as stringappend, but prepends string to value
- today([string]): Returns today's date, like "July 3, 2008". Can change format using string (see https://www.php.net/manual/en/datetime.format.php for formats)
- stringpos(needle,haystack): Finds the position of the string needle in the string haystack. Returns -1 if needle is not found
- stringlen(string): returns the character count in the provided string
- stringclean(string,[mode]): mode 0 (default): trims leading and trailing whitespace. mode 1: removes all whitespace. mode 2: removes all non-alphanumeric characters.
- substr(string,start,[length]): grabs the part of the string from the start index with given length.
If start is negative, the returned string will start at the start'th character from the end of string.
If length is not specified, it cuts from the start index to the end of the string.
If length is given and is negative, then that many characters will be omitted from the end of string.
- strtoupper(string): make all characters in the string upper case
- ucfirst(string): makes the first character in the string upper case
- strtolower(string): make all characters in the string lower case
- lcfirst(string): makes the first character in the string lower case
- substr_count(haystack,needle): Find the number of occurrences of needle in the string haystack
- str_replace(search,replace,string): Replace all occurrences of search in the string with replace. Search and replace can be arrays.
- preg_match(pattern,subject,[matches]): Searches subject for a match using the regular expression in pattern. Returns true/false, and stores the match in matches.
- preg_match_all(pattern,subject,[matches, flags, offset]): Searches subject for multiple matches using the regular expression in pattern. Returns number of matches, and stores the matches in matches. See PHP help for optional flags.
- preg_replace(pattern,replacement,subject,[limit]): Searches subject for a match using the regular expression in pattern, and replaces any matches with the replacement.
Array Macros
These macros are for working with arrays:
- listtoarray(list, [tonum]): Converts a list, like "1,2,3,4" or "cat,dog,rabbit" to an array.
If the list is decimal or integer numbers, set tonum to true to ensure they're treated like numbers.
- explode(symbol, string): Converts a string to an array, breaking it apart on the given symbol.
- arraytolist(array): Converts an array to a list
- calclisttoarray(list): Converts a list of calculations, like "2^2,3^5,7/2" to an array, evaluating the calculations
along the way.
- stringtoarray(string, [tonum]): Converts a text string to an array of characters.
If the characters are all numbers, set tonum to true to ensure they're treated as numbers.
- fillarray(value,num,[start]): Creates an array with num entries, all of which are the same given value. Array indexing
starts at 0 unless specified. Alternatively, num can be an array of indices, in which case the array will
only be defined to the value at those indices.
- arraysetvalues(array,keyarray,value/valuearray):
Sets values on an existing array, at the keys specified in the keyarray. If value is a single value,
that value is set at all the keys. This is similar to fillarray with an array for num, but this function
modifies an existing array rather than creating a new one. If an array of values is provided, the corresponding value is set
for each key in the keyarray. Returns the array with new values.
- sortarray(list/array,[type, maxkey]): Sorts an array from lowest to highest value.
To sort in reverse order, give the option second parameter as "rev".
To sort by key, give the optional second parameter as "key".
To sort by key (numeric only) and fill in any missing numeric keys with empty string values,
give the optional second parameter as "keyfill". In this case you can optionally provide a third
argument for the max key to fill the array with.
- jointsort(array,array,[array,...]): Jointly reorders two or more arrays based on a lowest-to-highest sort of values in the first array
- consecutive(min,max,[step]): Creates an array of consecutive numbers, starting at min and ending at max, in increments of
step. Step is optional; it defaults to 1.
- calconarray(array,calculation): Returns an array, performing the given calculation on each element of the given array. Use
"x" as the variable to represent each element of the array. Example: $b = calconarray($a,"x^2") will create an array that is the
square each element of the array $a.
- multicalconarray(calculation,varslist,var1array,var2array,etc.) Returns an array, performing the given calculation on each set
of elements from the given arrays. Allows multivariable calculations. Example: $z= multicalconarray("x*y^2","x,y",$xs,$ys)
- calconarrayif(array,calculation,ifcondition): Like calconarray, but allows you to specify a condition for each element for whether to
do the calculation. Example: $b = calconarrayif($a,"x+.1","floor(x)==x") will add .1 to add whole numbers in the array, and leave the
other elements unchanged.
- keepif(array,condition) Filters an array, only keeping values that meet the
supplied condition. Example: keepif($a,"x%3==0").
- subarray(array,params): Creates a new array as a subset of the specified array. The params can take several forms:
- subarray($a,2,4,6): creates an array from $a[2], $a[4], and $a[6]
- subarray($a,"1:3","6:8"): create an array from $a[1] through $a[3], and $a[6] through $a[8]
- subarray($a,$b): creates an array from entries in $a with indexes specified in $b. So if $b = array(2,4,6), this
would return $a[2], $a[4], and $a[6]
- splicearray(array,offset,length,[replacement]): Removes the elements designated by offset and length from the given array, and replaces them with the elements of the replacement array, if supplied.
- joinarray(array,[symbol,ksort]): Convert an array to a string, joining elements with the given symbol (default comma). Set ksort to true to sort the array by key before joining, useful if elements were defined out of order.
- mergearrays(array,array,[array,...]): Combines two or more arrays into one long array
- unionarrays(array,array): Unions two arrays, preventing duplicates, into a new array
- intersectarrays(array,array): Finds the intersection of two arrays
- diffarrays(array1,array2): Returns all elements in array1 that are not also in array2
- array_unique(array): Returns the array, stripping duplicate values. Beware this doesn't re-index the array, so you may want to then use array_values if you need consecutive array keys.
- array_values(array): Returns the values of an array, reindexing with consecutive numeric indices.
- array_keys(array): Returns the keys of an associative array.
- count(array): Counts the number of entries in the array
- is_array(variable): Determines if the variable is an array
- sumarray(array): Adds the entries in an array
- in_array(needle,haystack): Checks if value needle is in array haystack. Returns true or false
- arrayfindindex(needle,haystack): Returns the index in the array haystack of the value needle. If there are multiple matches, it only returns the first.
- arrayfindindices(needle,haystack): Returns an array of indices in the array haystack of the value needle.
- array_flip(array): Reverses a one-to-one array, so indexes become values and values become indexes
General Macros
These macros are fairly general purpose:
- ifthen(condition,trueval,falseval): Takes a comparison condition, and returns the trueval if the condition is true and the falseval otherwise.
- cases(testvalue,comparearray,outputarray,[defaultoutput, tolerance]): Compares the
testvalue to each of the comparearray entries, and if a match is found, returns the corresponding
entry of outputarray. If there is no match, the defaultoutput is returned. Note that if both values
are numeric, the comparison is made with tolerance, otherwise the values are compared using string
matching (meaning 0.5 will not be considered equivalent to "1/2"). Tolerance defaults to 0.0015
relative error. Prefix with |, like "|0.1" for absolute tolerance. Example:
cases(3,[1,2,3,4],["a","b","c","d"]) would return "c".
- formhoverover(label,tip): Creates a hover-over definition or other tip
- formpopup(label,content,[width,height,style,scrollbars]): Creates a link or button leading to a popup window. Content can
be a web address, or HTML content to put directly into the popup. Style can be "link" or "button". Scrollbars defaults to false - set true for scrollbars.
- forminlinebutton(lable,content,[style,outputstyle]): Creates a link or button that when clicked will reveal hidden content.
Content can be any valid HTML. Style can be "link" or "button". Outputstyle can be "inline" or "block". Block will allow any HTML, but will
be displayed on a new line. Use "inline" to have text stay on the same line.
- makenumberrequiretimes(array/list): Takes an array or list of numbers and generates a string suitable for use as a $requiretimes. Writes
the string so that every number in the array must show up in the student answer. Automatically detects and adjusts for number overlaps
(like 2 appearing in 32).
- ABarray(start, num): Produces an array of strings of the form [AB#] which will get replaced with answerboxes if placed in the question text.
start is the first value used, and num indicates the number of entries to create.
ABarray(5,2) will output array("[AB5]","[AB6]").
This macro is often used in conjunction with the showarrays macro.
- getntupleparts(string, [expected number of components, checknumeric]):
If fed a string from $stuanswers or $stuanswersval of an N-tuple or Calculted N-tuple question,
this will extract the components of the n-tuple, returning them as an array. It is recommended to
provide a second argument of the number of components expected, and if the values are expected to
be numeric, put true as the third argument. This function will return false if the input is
not a valid ntuple. This function only works for a single n-tuple, not a list of them.
- scoremultiorder(stua, answer, swap, type, [weights, options]): In a multipart question, allows questions or groups
of questions to be scored in any order. Works for types 'number', 'string', 'calculated', 'numfunc', 'complex', 'calccomplex',
'ntuple', and 'calcntuple'. Note: Use of the "list" option for individual question types is strongly recommended over
using this function if you're just asking for multiple answers.
- Use like
$answer=scoremultiorder($stuanswers[$thisq],$answer,'0;1','number')
- stua: For numeric types,
$stuanswers[$thisq] should be the first argument. For calculated types,
$stuanswersval[$thisq] should be the first argument.
- answer: The second argument is always
$answer. This function must be used after $answer is already defined.
- swap: The third argument shows what entries should be swappable. It can be a string or array of strings. Examples:
'0;1' would say answers index 0 and 1 should be swappable
'0;1;2' would say answers index 0,1,and 2 should be swappable
['0;1','2;3'] would say answers index 0 and 1 should be swappable, and 2 and 3 should be swappable
'0,1,2;3,4,5' would say answers with indices 0,1,2 should be swappable as a group with
the answers with indices 3,4,5. Comparison is only made on the first entry to decide whether to swap the groups.
- type: should be the question part short name, like 'number' or 'calccomplex', for the entries that can be swapped.
- weights: optionally, you can include your answeights to have them swapped to. In that case, use the form
$answer,$answeights=scoremultiorder($stuanswers[$thisq],$answer,'0;1','number',$answeights)
- options: an array of other options. To use without enabling the weights, set weights to null.
- variables: to change the variables when type is numfunc. Example:
$answer = scoremultiorder($stuanswers[$thisq],$answer,'0;1','numfunc',null,['variables'=>$variables])
Math Macros
These macros are used for mathematical calculations:
- sin(t), cos(t), tan(t), sec(t), csc(t), cot(t): The usual trig functions
- arcsin(v), arccos(v), arctan(v), atan2(y,x): The inverse trig functions
- abs(v): Absolute value
- sqrt(t), root(n)(t): Square root and nth root
- gcd(a,b,[c,d,...]): Greatest common divisor of the inputs
- lcm(a,b,[c,d,...]): Least common multiple of the inputs
- sign(a,[option]): Returns the sign of a, as 1 or -1. If option is set to true, returns a string "+" or "-" instead. If option
is set to "onlyneg", it returns the string "-" if a is negative, or "" otherwise.
- sgn(a): Returns the sign of a, as -1, 0, or 1.
- v!: Factorial, like $a = $b!
- evalfunc(func,vars,val1,val2,...,[falseonerror]): Evaluates a function given the variables and values for each variable.
for example evalfunc("x^2*y","x,y",2,3) will evaluate x^2*y with x=2, y=3.
This function by default will return false on invalid parameters.
With numerical inputs, it will return an empty string if the function is unable
to be evaluated due to a syntax error. Set the optional falseonerror parameter to
true to return false instead of an empty string in this case.
For non-numerical inputs, setting the optional parameter to true will skip
some additional cleanup steps that sometimes cause problems.
- evalnumstr(expr, [complex]): Evaluates a string representation of a numerical expression, like "(2pi)/3", to a decimal.
Avoid using this in place of direct calculation in most cases, but it can be handy if you already have generated the string
for display but then need to do a calculation with it. Set complex to true if the calculation involves complex number expressions.
- See also: calconarray and multicalconarray in the Array Macros section
Conditional Test Macros
These macros are used to test various conditions. They typically return true or false, depending on whether the desired condition is met.
- getstuans($stuanswers, $thisq, [part number]): Pass this function the
$stuanswers or $sutanswersval arrays, $thisq for the question number, and a part number (omit
if it's a single part question) and this will return the corresponding value. Use of this
function is recommended over directly accessing the array, as this function accounts for
undefined values in a way that won't trigger errors.
- stuansready($stuanswers, $thisq, array of part numbers, [anstypes, answerformat]): Before using
student answers, you need to check to make sure the student has actually answered them.
Pass this function the $stuanswers or $sutanswersval arrays, $thisq for the question number,
and an array of part numbers, and it will check to make sure a non-blank answer has been
provided for all of the part numbers. A part number can also be given as "1 or 2" if answering
either part is sufficient. If it is a single part question, use null for the part number.
To allow a blank answer, prefix a part number with a tilde.
It is good to wrap any multipart or conditional code using student answers in an "if" block
using stuansready as the condition. It is advisable to pass $anstypes as a 4th input, which
allows the function to handle special cases like matrices better. $answerformat can be added
as an optional 5th input, which will check the student answer meets the answerformat (currently
only checks Calculated questions, and no lists). Or you can put 'checknumeric' for the answerformat
and it will check that "number" and "calculated" answers are numeric (must use $stuanswersval for calculated in this case).
Note this won't work for list answers, only single numbers, and that it won't recognize answers
with commas like "2,345" as numeric.
- comparenumbers(a,b,[tol]): Compares numbers or numerical expressions a and b to see if there are equivalent to the specified
tolerance. Set tol to specify the relative tolerance (defaults to .001), or prefix with | for an absolute tolerance.
- comparenumberswithunits(a,b,[tol]): Compares numbers-with-units a and b to see if they are equivalent to the specified tolerance. Set tol to
specify the relative tolerance (defaults to .001), or prefix with | for an absolute tolerance. Each of a and b must be of the form:
[decimal number]*[unit]^[power]*[unit]^[power].../[unit]^[power]*[unit]^[power]..., though 'per' may be used for division of units, and 'unit squared', 'square unit',
'unit cubed' and 'cubic unit' may be used. Examples: 4 cm, and 3.5E4 feet per second squared
- comparentuples(a,b,[tol],[option]): Compares ntuples or calcntuples a and b to see if they are equivalent to the specified
tolerance. Set a single tol to specify the relative tolerance for all entries in ntuple (defaults to .001), or prefix with | for an absolute tolerance,
such as "|0.5". Can make tol an array (or list) to apply by element to the ntuple. By default, function compares the parentheses/brackets containing the
ntuple. Can give option "ignoreparens" to only compare the entries in the ntuple, so (a,b) would be considered equivalent to [a,b].
- comparefunctions(a,b,[vars,tol,domain]): Compares functions a and b to see if they are algebraically equivalent. Set
vars to a list of variables (defaults to 'x'). Set tol to specify the relative tolerance (defaults to .001), or prefix with | for an absolute tolerance.
Set domain to "xmin,xmax" to specify a domain for comparison, or "xmin,xmax,integers" to restrict domain to integer values.
- comparesameform(a,b,[vars]): Compares expressions a and b to see if they are
in the "same form". This means exactly the same, except for commutation of addition and
multiplication, multiplication by 1, implicit multiplication, and extra parentheses. This is picky,
so use with caution. Set vars to a list of variables (defaults to 'x').
- comparelogic(a,b,vars): Compares two logical statements, written using
^^ for and, vv for or, ~ for not, -> or => for conditional, and <-> or <=> for biconditional.
vars should be a list or array of variables in the statements.
- isset($var): Checks to see if $var is defined
- is_numeric(str): Checks if the string represents an integer or decimal number.
- are_numeric(v1,v2,v3,...): Checks if all the arguments are or represent an integer or decimal number. You can also input a single array instead of individual values.
- is_nan(val): Checks if the value is NAN (not a number), which results from things like sqrt(-1). Only works on calculated values, not string expressions.
- scorestring($answer,$showanswer,words,$stuanswers,$thisq,[partn, highlight]): This function checks
to see if the words in the list/array "words" appear in the student's answer. If they all appear, it redefines
$answer so the student's answer is marked correct. $showanswer is also redefined to show the original $answer
with all the required words highlighted. You can turn off the highlighting by setting the optional highlight
parameters to false.
For multipart questions, include the part number as an
additional parameter. Usage for single part questions (where $words is predefined earlier in the code):
$answer,$showanswer = scorestring($answer,"",$words,$stuanswers,$thisq)
Usage for multipart questions (again where $words is predefined). This is example is for part 2:
$answer,$showanswer = scorestring($answer,$showanswer,$words,$stuanswers,$thisq,2)
- checkanswerformat(string, answerformat): Checks a single numerical expression
string, like "3/2" for whether it meets the answerformat listed.
- getsigfigs(value, [expected sigfigs]): returns the number of sigfigs in
value. Include the expected sigfigs to resolve ambiguity on numbers like 1200.
Feedback Macros
These macros are used to select and format feedback messages to students. They return a string which can be placed in the question text.
- getfeedbackbasic(correct msg, incorrect msg, $thisq, [partnum]): Generates a feedback string based solely on whether the
question was scored correct or not. Provide the correct and incorrect messages to display, and provide $thisq. Give a part number for
multipart questions to get part-based feedback. Can give an array of part-numbers, in which case the
correct message only shows if all parts are correct.
- getfeedbacktxt(stuans, feedbacktxt, ans): Gives feedback on multiple choice questions.
stuans should be the student answer, obtained from
$stuanswers[$thisq] for single part questions, or using the getstuans macro for multipart.
feedbacktxt is an array of feedback responses, corresponding in array order to the $questions, so feedbacktxt[1] is the feedback
if the student selections $questions[1] as their answer.
ans is the correct answer; you can usually pass $answer if it's been defined already.
- getfeedbacktxtessay(stuans, feedbacktxt): Gives feedback on essay questions. stuans should be the student answer, obtained from
$stuanswers[$thisq] for single part questions, or using the getstuans macro for multipart. It is not actually evaluated or compared - it is only
needed to see if the student has entered a response or not. Once the student has entered any response, feedbacktxt will be returned.
- getfeedbacktxtnumber(stuans, partialcredit, feedbacktxt, defaultfeedback, [tol]): Gives feedback on number questions.
stuans should be the student answer, obtained from $stuanswers[$thisq] for single part questions, or using the getstuans macro for multipart. For Calculated
type questions, be sure to use $stuanswersval.
partialcredit is an array or list of form array(number, score, number, score, ... ) where the scores are in the range [0,1].
feedbacktxt is an array of feedback messages, corresponding in array order to the order of the numbers in the partialcredit list.
defaultfeedback is the default incorrect response feedback
Set tol to specify the relative tolerance (defaults to .001), or prefix with | for an absolute tolerance.
- getfeedbacktxtcalculated(stuans, stuansval, partialcredit, feedbacktxt, defaultfeedback, [answerformat, requiretimes, tol]): Gives feedback on calculated number questions.
stuans should be the student answer, obtained from $stuanswers[$thisq] for single part questions, or using the getstuans macro for multipart.
stuansval should be the numerical value of the student answer, obtained from $stuanswersval[$thisq].
partialcredit is an array or list of form array(number, score, number, score, ... ) where the scores are in the range [0,1].
feedbacktxt is an array of feedback messages, corresponding in array order to the order of the numbers in the partialcredit list.
defaultfeedback is the default incorrect response feedback
answerformat can be a single answerformat to apply to all expressions, or an array with each element applied to the corresponding expression
requiretimes can be a single requiretimes to apply to all expressions, or an array with each element applied to the corresponding expression
Set tol to specify the relative tolerance (defaults to .001), or prefix with | for an absolute tolerance.
Example: getfeedbacktxtcalculated($stuanswers[$thisq], $stuanswersval[$thisq], array("1/2",1,"1/2",.5), array("Correct", "Right value, but give your answer as a fraction"), "Incorrect", array("fraction",""))
will check the students answer against the answer "1/2" twice, the first time applying the "fraction" answerformat, and the second time not.
- getfeedbacktxtnumfunc(stuans, partialcredit, feedbacktxt, defaultfeedback, [vars, requiretimes, tol, domain]): Gives feedback on numfunc (algebraic expression/equation) questions.
stuans should be the student answer, obtained from $stuanswers[$thisq] for single part questions, or using the getstuans macro for multipart.
partialcredit is an array or list of form array(expression, score, expression, score, ... ) where the scores are in the range [0,1].
feedbacktxt is an array of feedback messages, corresponding in array order to the order of the numbers in the partialcredit list.
defaultfeedback is the default incorrect response feedback
vars should be a list of variables used in the expression. Defaults to "x"
requiretimes can be a single requiretimes to apply to all expressions, or an array with each element applied to the corresponding expression
Set tol to specify the relative tolerance (defaults to .001), or prefix with | for an absolute tolerance.
Set domain to limit the test domain. Defaults to "-10,10"
Using Other Macros
If an XYZ Homework administrator has installed other Macro Libraries, you can load a macro library by entering the line
loadlibrary("list of library names") at the beginning of the Common Control section.
Examples: loadlibrary("stats") or loadlibrary("stats,misc")
Click on the "Macro Library Help" link in the question editor to get a list of installed macro libraries and the macros
available in each library
Math Entry
XYZ Homework uses ASCIIMath for math entry. In question text or inside strings that
will be displayed in the question text, wrap expressions to be rendered in the
backtick/grave symbol, like `x^2`. That key is usually located on the same keyboard button as the tilde.
For calculations, a limited subset is available:
| Symbol | Meaning |
| * / + - | Multiply, divide, add, subtract |
| ^ | Powers. 2^3 = 8. |
| e, pi | The standard constants |
| % | Modulus of integers (remainder after division. 5%2 = 1) |
| mod(p,n) | Modulus of integers. This version gives positive results for modulus of negative numbers. |
| fmod(p,n) | Modulus of decimal values. May give negative results from negative inputs. |
| ! | Factorial |
| sqrt | Square root |
| sin,cos,tan,cot,sinh,cosh | Standard trig function. Be sure to enter as sin(2), not sin 2 |
| arcsin,arccos,arctan,arcsinh,arccosh | Inverse trig functions. |
| sin^-1, cos^-1, tan^-1 | Alternative entry for inverse trig functions. Use like sin^-1(0.5) |
| ln | Natural Logarithm base e |
| log | Common Logarithm base 10 |
| abs | Absolute Value. Note that while abs() is used for calculations, you may prefer to use | brackets for display |
| round(n,d) | round number n to d decimal places |
| roundsigfig(n,s) | round number n to s significant digits. This is for calculations;
if you need a value for display and want to ensure trailing 0's display, use prettysigfig |
| floor,ceil | floor/ceiling: integer below/above given number |
| min,max | min or max of the passed values. Can be used as min($a,$b,$c) or min($arrayvariable). |
For display only, the full ASCIIMath language is available (which includes support
for a limited subset of LaTeX). For more info, see the
ASCIIMath syntax.
Solver
While writing a question, it can be handy to quickly solve a formula for a variable. For example, if you're writing a question that asks students to solve y=($a x + $b)/($b x - $a) for x, where $a and $b are randomized variables. You might need to calculate the correct answer. The Solver tool can help solve or check the solution.
Tips:
- Select your code from the Common Control box, then either drag-drop or copy-paste it to the box below, or
- Highlight an expression in Common Control and press Ctrl-M to update the Solver code, or
- Highlight an expression in your code before clicking Solver.
- Select an operation to perform: Solve, Differentiate, Integrate, Plot.
- You may need to change the colored Sage code below to solve for the correct variable or to adjust the plot window etc. See the help icon below for examples.
Solver: Sage Syntax
SageMath examples:
#create symbolic variables
x,y,a,b,c,d = var('x,y,a,b,c,d')
# solve the equation for x
solve( y==(a*x+b)/(c*x-d) , x )
x = var('x')
#Differentiate
diff( 3*x^4 , x )
x = var('x')
#Plot in a standard window
plot( -x^2+4 , (x,-10,10) )
x = var('x')
#Simplify
simplify( 5*x+7*(-3*x-4) )
Tips:
- Declare any variables using
var() as above. By default, x is a variable.
- Use two equal signs for math equations.
- With
solve() diff() integral() give the independent variable after a comma.
- With
plot() a range for the independent variable must be specified, e.g. (x, -10, 10).
- Select a new operation or click Go to calculate.
Solver Output
Tips:
- Drag the result above to the Common Control box where you define the $answer or any other location, or
- Click Insert in Common Control to append the result to the end of the Common Control, or
- Click Insert as $answer to append
$answer = result to the Common Control (not available if $answer is already defined).
- Note: Touchscreens might not be supported by the drag operation.
Accessible Alternative
The accessible alternative option, near the bottom of the question editor, allows you to specify an
alternative question ID to display if the student has accessibility settings enabled.
You most likely should not use this feature. It is intended for the rare
case where a question cannot be made accessible using the built-in accessibility features, like
some questions using jsxgraph, Geogebra, etc. If your question uses static
images, graphs generated using showplot, or is a standard Drawing type question,
you DO NOT NEED this feature, and will make things worse by using it.
The system automatically generates textual alternatives for graphs generated using showplot, histogram,
etc., and displays those when the student has the visual text alternatives setting enabled. If the default
text alternative is insufficient or inappropriate, use replacealttext to replace the
default with a custom-written alternative. If using a non-interactive jsxgraph visual, you can use the
description> option in jsxBoard to add alternative text.
To check what is generated and shown, you can test the question with
different accessibility settings in the question Preview. Note you may need to use the browser's
inspector to "see" alt-text added to static images.
Likewise, the system automatically provides a keyboard-based alternative for drawing questions when
the student has the keyboard based drawing setting enabled.
It is always preferable to make the original question accessible when possible rather than
specifying an alternative. But if your question cannot be reasonably made accessible, this option allows
you to specify a different question ID to show the student instead. Your goal should be to pick a question
that assesses equivalent concepts but in a different way.
For the "Use accessible alternative", you can select to have the alternative displayed:
- "visual alt": when the student has Graph Display set to text alternatives. This is the
appropriate option if your question relies on visual information but does not involve any
user interaction that requires a mouse (cannot be performed with a keyboard alone).
In this case, rather than provide an accessible alternative, it might be better to wrap the
visual in
<div aria-hidden=true></div> to hide it from a screenreader, and add
a <div class="sr-only"></div> after it containing a textual description
of the visual element, which will be visually hidden but available to a screenreader.
- "mouse alt": when the student has Drawing Entry set to Keyboard and text-based. If your question has an
element that requires a mouse to operate and cannot be operated with keyboard, but does not contain any
visual elements that don't have alt-text, then use this option.
- "visual or mouse alt": if the question has both visual elements and elements that require a mouse,
then select this option. The alternative will be used if the student has either accessibility setting
enabled.
Common options to all types
All question types can support these options:
Hints
For a single question (not multipart), to use hints, in the common control (or question control) section define the array $hints where:
$hints[attempt number] = "hint text"
For example:
$hints[0] = "This will show on first display"
$hints[1] = "This will show on second attempt (after 1 missed attempt)"
$hints[2] = "This will show on third and subsequent attempts, since no later values have been defined"
It is fine, for example, to not define $hints[0] if you want nothing to display initially.
Then in the question text, place the location of the hint using the variable $hintloc.
In multipart questions, you can follow the process above if you just want a single strand of hints for the entire problem. If you want per-part hints, define the $hints array as:
$hints[question part number][attempt number] = "hint text"
Then in question text, place each hint using $hintloc[question part number]
To have the hint to display based on a set of previous answers, you can use:
$hints[question part number][attempt number] = array("hint text", [part num1, part num 2])
This will display the hint after all the parts listed have had the required attempts or are correct.
To override the default Hint: text, set $hintlabel.
Help references
To provide help of some sort for a question (typically, links to videos, book references, etc), define $helptext
in the common control section. Any text assigned to this variable will show at the bottom of the question. The
display of this text is controlled by the same "show hints?" option that controls the display of hints described above.
Referencing Student Answers
To create multipart questions that are graded on consistency, or to create a set of lab-type problems that rely on student-provided data, you can reference
students' previous answers in your question code. You will only be able to reference the student answer to some question types
- $stuanswers[N] will refer to the student's answer on question N (not zero-indexed: N=1 is question 1)
- $stuanswers[N][P] will refer to the student's answer on question N, part P (if multipart)
- $stuanswers[$thisq][P] will refer to the student's answer on the current question, part P
- $stuanswers[$thisq-1] will refer to the student's answer on the previous question
- $stuanswersval[$thisq] or $stuanswersval[$thisq][P] will contain the numerical value of Calculated question types.
- $stulastentry or $stulastentry[P] will contain the student's entered answer on the current question.
While $stuanswers will only contain submitted answers, $stulastentry will also include autosaved entries.
Notes (important!):
1) If the student has not answered the question, then $stuanswers[N] === null, with the exception of drop-down select
questions, where $stuanswers[N] == "NA" if no selection is made.
If used in an equation, it will take on the value 0.
To prevent divide-by-zero errors and to prevent students from exploiting this, it is highly recommended that you do something like:
$a = $stuanswers[$thisq][0]
$a = rand(1,100) if ($a===null)
Perhaps also include:
$warning = "You MUST answer question 1 before this question" if ($a===null), then put $warning in the question text.
2) If you use $stuanswers in your $answer, $showanswer will generally not be defined. If you follow the advice in #1 above, then your
$showanswer will reflect the random number assigned to $a. For this reason, it is highly recommended that you custom define the $showanswer.
3) If using the $stuanswers array in a string or in the Question Text, you must enclose it with curly brackets:
Your answer was {$stuanswers[0][0]}. If using it directly in a calculation, enclose it in parentheses just to be safe.
4) $stuanswers[$thisq] is defined for question scoring, but may not be for question display.
5) You can use the function getstuans($stuanswers,N,P) to retrieve a student answer value. This method bypasses some strange things that happen
when there is a multipart question with only one part, so is recommended.
6) You can use the function stuansready($stuanswers,$thisq,[p1,p2,...]) to determine if the parts
have been answered, instead of checking for null.
Other Reference Variables
A few other special purpose variables can be referenced:
- $scorenonzero: This variable is only available on display, not during scoring. $scorenonzero[$thisq] (or $scorenonzero[$thisq][partindex] for multipart)
will be -1 if the question is unanswered, 0 if the score is zero, and 1 if the score is anything above 0.
- $scoreiscorrect: This variable is only available on display, not during scoring. $scoreiscorrect[$thisq] (or $scoreiscorrect[$thisq][partindex] for multipart)
will be -1 if the question is unanswered, 1 if the score (before any penalties) is perfect, and 0 otherwise.
- $attemptn: This variable holds the attempt number of the current attempt. 0 is the initial attempt, 1 is the next attempt, etc.
- $partattemptn[part number]: For multipart questions, this holds the attempt
number on each part.
- $requestclearla: If you set $requestclearla=true in your code, it will request the display to clear out the student's last answer.
This might be useful if your question branches based on attempt count. Example:
$requestclearla = true if ($attemptn==2 && !$scoreiscorrect[$thisq])
- $graphdispmode: This will be 0 if the student has text-based alternatives
for graph display enabled, and 1 or 2 if an image-based mode is enabled.
- $drawentrymode: This will be 0 if the student has keyboard-based
alternatives for drawing entry enabled, or 1 for mouse-based entry.
Reusing Code
You can import in the Common Control code from another question using
includecodefrom(questionid)
where questionid is the ID number of the question you want to import the code of. In the
source question, the variable $included will automatically be set to true when the question
has been included, so it can be used to determine if the question has been
imported into another question, or is running independently.
For example, in the master/source question, you might use the code:
if (!$included) {
$type = rand(0,4)
}
do stuff here
In a question using this code, you could limit to a specific type using:
$type = 0
includecodefrom(1234)
Question text can be also brought in from another question by using
includeqtextfrom(questionid)
somewhere in the Question Text portion of the question.
Teacher Notes
In the question text, you can add a note that will only be viewable by the teacher while grading.
Do this by wrapping the teacher note in the [teachernote] shortcode like this: [teachernote]This is the note[/teachernote]
Hiding/Toggling content
If you need to hide content from view, you can wrap it in <div class="hidden"></div>.
Be aware the content is still in the page, so a student can still view the hidden content
using the browser inspector, so don't use this to hide secret info, but it can be helpful
if you need to hide an answerbox that is being populated by some other means.
If you want to toggle a block of content, one option for shorter content is to use
forminlinebutton. For longer content, you can wrap the content in a block using
<div data-toggler="Title for button"></div>. That will
hide the wrapped content, and add a button with the specified title for toggling the
content. You can optionally add a data-toggler-hide attribute as well
if you want a different button label once the content is showing.
Question Types
The question types available are:
Number
The student is asked to enter a number (integer, decimal, or scientific notation).
The answer is compared to a given tolerance. Can also accept DNE, oo (Infinity), and
-oo (Negative Infinity) as answers.
Required Variables
- $answer = a number or calculation resulting in a number, like $answer = 5
- Defines the answer. Define multiple acceptable answers in a string separated by or: $answer = "3 or 5 or 7".
Alternatively, you can provide an interval notation range of
acceptable answers, like $answer = "(2,5]". Providing a range will override any tolerances set. If $answerformat is set
for list answers, then this should provide a list of correct answers, like $answer = "1,2,3".
Optional Variables
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $reqdecimals = a number
- Defines the minimum decimal accuracy required (ie 2 for two decimal places). This will put a message in the answer tips stating the
decimals required. If neither $abstolerance or $reltolerance is set, this will set the tolerance, otherwise the provided tolerance
will be used (even if it doesn't agree with the $reqdecimal setting).
$reqdecimals = "=2" can be used to require exactly 2 decimal places in the answer, regardless of how the value rounds (so 3.5 would get marked
wrong when the answer is 3.50 if "=2" is used). If you use the "=2" form, it will also round your $answer if needed for the $showanswer.
$reqdecimals = "r2" can be used to require rounding to 2 decimal places in the answer, not checking for trailing zeros (so 3.5 would get marked
correct when the answer is 3.50 if "r2" is used). If you use the "r2" form, it will also round your $answer if needed for the $showanswer.
When the "=2" or "r2" form is used, it overrides both $reltolerance and $abstolerance, and by default tests that the student answer exactly matches
the correct answer ($abstolerance=0).
To override the tolerance use +- in the setting, like this:
$reqdecimals = "=2+-.01" checks for exactly 2 decimals, but allows the answer to have an absolute error of .01
$reqdecimals = "=2+-1%" checks for exactly 2 decimals, but allows the answer to have an relative error of 1% (equivalent to $reltolerance = .01)
- $reqsigfigs = a number
- Defines the significant figure accuracy required. Use $reqsigfigs = 2 for at least 2 sig fig accuracy, or
$reqsigfigs = "=2" to require exactly 2 sig figs in the answer, or $reqsigfigs = "[2,4]" to require between 2 to 4 sigfigs. This will put also a message in the answer tips stating the
significant figures required. If you use the "=2" form, it will also round your $answer if needed for the $showanswer.
This setting overrides both $reltolerance and $abstolerance, and by default tests that the student answer rounded to the specified sigfigs matches
the correct answer. To override the tolerance use +- in the setting, like this:
$reqsigfigs = "=2+-.01" checks for exactly 2 sigfigs, but allows the answer to have an absolute error of .01
$reqsigfigs = "=2+-1%" checks for exactly 2 sigfigs, but allows the answer to have an relative error of 1% (equivalent to $reltolerance = .01)
- $answerformat = "list", "exactlist", "orderedlist", "set", "integer, "units", "nosoln", or "nosolninf"
-
- Answerformats can be combined, like $answerformat = "nosoln,list"
- $answerformat = "list", "exactlist", or "orderedlist" specifies that a list of answers is expected.
- If $answerformat="list", then duplicate values are ignored.
- If $answerformat="exactlist", then duplicate values are not ignored.
- If $answerformat="orderedlist", the list must be in the same order and contain identical counts of values.
- $answerformat = "set" behaves like "list", but expects the answer list to be wrapped in curly braces as a set.
- $answerformat = "integer" changes the entry hint to only indicate integers, and rejects answers that contain decimals (except it does allow 2.0 instead of 2)
- $answerformat = "units" adds unit checking. Supply the answer like
$answer = "3 kg/m^2".
The student's answer can be in other equivalent units, so "300 cm" is considered equivalent to "3 m".
The answer must be in the format [decimal number]*[unit]^[power]*[unit]^[power].../[unit]^[power]*[unit]^[power]...,
though multiplication can be implied. Also, 'per' may be used for division of units, and 'unit squared', 'square unit',
'unit cubed' and 'cubic unit' may be used. Note that the units do not require mathematically-proper parens around the denominator.
The decimal number can include basic scientific notation in 3E5 or 3*10^5 formats. Examples: 4 cm, and 3.5E4 feet per second squared
Note that tolerances are scaled to the unit, so $answer = "3m" with $abstolerance = .1 would mean
.1 meters, so "310cm" would still be within tolerance. If $reqsigfigs is set, the specified
number of sigfigs will need to be present in the student's answer, regardless of units.
- $answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions".
$ansprompt can override the default statements like this: $ansprompt = "One value, x=;No values;Many values"
- $requiretimes = a list, like "E,=0"
- Adds format checking to the student's answer. The list can include multiple checks, which come in pairs. The
first is the symbol to look for. The second describes what is acceptable. For example, in the string shown above,
the symbol "E" would be required to show up exactly 0 times.
Be aware that if you search for "5,=1", it will match both 5 and 15 and 2.5, since all three strings contain a 5. When
searching for numbers, you can avoid this by putting a "#" before the number, like "#5,=1", which would match the 5 but not 15 or 0.5.
Beware this type of search ignores signs.
You can use just "#" in the symbol location to match any number (including decimal values); 3.2^5 would match twice.
You can match either of two symbols by putting || between them, like ".5||1/2,>0"
You can use a regular expression by putting in the symbol location "regex:expression"
You can put "ignore_commas,true" at the beginning of the $requiretimes to ignore commas in the answer
- $requiretimeslistpart = a list, in the same format as $requiretimes
- Similar to $requiretimes, but this check is applied to each element of the answer list when a list $answerformat is used,
where $requiretimes would be applied to the entire list of answers.
- $partialcredit = array(number,score,[number,score,...])
- Allows you to specify partial credit for other answers. The array should be given in the form array(number,score,number,score,...), where
number is the value to compare to the student answer, and score is a proportion between 0 and 1 to award as partial credit. Note this
currently only works for single number answers; "or" and list answers are not supported.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $displayformat = "alignright"
- Aligns the text in the answer box to the right side
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to $answer. Use this to give a detailed answer,
or a rounded off answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Calculated
A student is asked to enter a number or a calculation, like 2/3, 5^2, or sin(2). Can also accept DNE, oo (Infinity), and
-oo (Negative Infinity) as answers.
Required Variables
- $answer = a number or calculation resulting in a number
- Defines the answer. Define multiple acceptable answers in a string separated by or: $answer = "3 or 5 or 7".
Alternatively, you can provide an interval notation range of
acceptable answers, like $answer = "(2,5]". Providing a range will override any tolerances set
To have the answer display as a rendered expression, provide the answer as a string. For example, if you want the answer to show as 24 then
you'd specify $answer = "2^4". If you specified $answer = 2^4, the answer would display as 16.
Optional Variables
- $answerformat = "fraction", or one of the other options below.
- Specifies answer format options. Some can be combined in a list, like this: $answerformat="nodecimal,notrig".
- Base format types: only use at most one of these at a time
- fraction: requires the answer to be a single fraction (like 10/6, 1/3, or 5)
- reducedfraction: a reduced fraction (like 5/3 or 5)
- mixednumber: a reduced mixed number (like 2 1/2 or 2_1/2, or 2/3 or 5)
- mixednumberorimproper: a reduced mixed number or improper fraction (like 2 1/2 or 5/2)
- sloppymixednumber: a mixed number (will take 5/2, 2 1/2, even 1 3/2)
- scinot: scientific notation (like 2.3*10^4)
- scinotordec: scientific notation (like 2.3*10^4) or decimal value
- fracordec: a single fraction or decimal value. Can be combined with "allowmixed" to also allow mixed numbers.
- decimal: requires the answer to be an integer or decimal value
- Mix-ins: You can add these as needed to modify what's allowed
- allowunreduced: can be combined with "mixednumber" or "mixednumberorimproper" to allow unreduced fractional parts
- allowxtimes: allows the use of x for multiplication (like 23x10^2 for 23*10^2), typically in combo with the "scinot" format
- allowplusminus: allow use of +- in the answer. Will enable the 'list' option if not already included.
- nodecimal: require an answer without decimals (also disallows 10^-2 and 3E-2)
- notrig: require an answer without trig functions (sin,cos,tan,sec,csc,cot)
- allowmixed: will enable support for mixed numbers (like 2 1/2) in answers
- allowdegrees: will enable the use of the degree symbol to designate degrees, so sin(30degree)=1/2.
- noval: tells the answer preview to not compute a decimal equivalent (deprecated - this option is now enabled by default)
- showval: tells the answer preview to display a decimal equivalent
- sameform: requires the student's answer be in the "same form" as the correct answer. This means
exactly the same, except for commutation of addition and multiplication, multiplication by 1,
implicit multiplication, and extra parentheses. Use with caution.
- List options: only use at most one of these at a time
- list: a list of answers is expected - ignores duplicate values (1,1,2 is equivalent to 1,2)
- exactlist: a list of answers is expected - does not ignore duplicates
- orderedlist: a list of answers is expected - order is important, and duplicates are not ignored
- Special options:
- nosoln: adds radio buttons for "no solutions". Use $answer="DNE" if the answer is no solutions.
- nosolninf: adds radio buttons for "no solutions" and "infinite solutions". Use $answer="DNE" or $answer="oo" respectively if needed.
- To override the default "no solutions" and "infinite solutions" wording, you can define $ansprompt as a list of semicolon-delimited strings
to override the default wording. For example,
$ansprompt = "One value, x=;No values;Many values"
- $formatfeedbackon = true
- Turns on "right answer, wrong format" feedback on the question
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $reqdecimals = a number
- Defines the decimal accuracy required (ie 2 for two decimal places). This will put a message in the answer tips stating the
decimals required. If neither $abstolerance or $reltolerance is set, this will set the tolerance, otherwise the provided tolerance
will be used (even if it doesn't agree with the $reqdecimal setting).
- $reqsigfigs = a number
- Defines the significant figure accuracy required. Only valid for "decimal", "scinot", and "scinotordec" $answerformat options.
Use $reqsigfigs = 2 for at least 2 sig fig accuracy, or
$reqsigfigs = "=2" to require exactly 2 sig figs in the answer, or $reqsigfigs = "[2,4]" to require 2 to 4 sigfigs. This will put also a message in the answer tips stating the
significant figures required. If you use the "=2" form, it will also round your $answer if needed for the $showanswer.
This setting overrides both $reltolerance and $abstolerance, and by default tests that the student answer rounded to the specified sigfigs matches
the correct answer. To override the tolerance use +- in the setting, like this:
$reqsigfigs = "=2+-.01" checks for exactly 2 sigfigs, but allows the answer to have an absolute error of .01
$reqsigfigs = "=2+-1%" checks for exactly 2 sigfigs, but allows the answer to have an relative error of 1% (equivalent to $reltolerance = .01)
- $requiretimes = a list, like "^,=3,cos,<2"
- Adds format checking to the student's answer. The list can include multiple checks, which come in pairs. The
first is the symbol to look for. The second describes what is acceptable. For example, in the string shown above,
the symbol "^" would be required to show up exactly 3 times, and "cos" would be required to show up less than 2 times.
Be aware that if you search for "5,=1", it will match both 5 and 15 and 2.5, since all three strings contain a 5. When
searching for numbers, you can avoid this by putting a "#" before the number, like "#5,=1", which would match the 5 but not 15 or 0.5.
Beware this type of search ignores signs.
You can use just "#" in the symbol location to match any number (including decimal values); 3.2^5 would match twice.
You can match either of two symbols by putting || between them, like ".5||1/2,>0"
You can use a regular expression by putting in the symbol location "regex:expression"
You can put "ignore_commas,true" at the beginning of the $requiretimes to ignore commas in the answer
You can put "ignore_spaces,true" at the beginning of the $requiretimes to ignore spaces in the answer
You can put "ignore_symbol,$" (or some symbol other than $) at the beginning of the $requiretimes to ignore that symbol in the answer
- $requiretimeslistpart = a list, in the same format as $requiretimes
- Similar to $requiretimes, but this check is applied to each element of the answer list when a list $answerformat is used,
where $requiretimes would be applied to the entire list of answers. To apply different $requiretimes to each element of the $answer list, separate
them with semicolons, like "pi,=1;/,=1;;"
- $partialcredit = array(answer,score,[answer,score,...])
- Allows you to specify partial credit for other answers. The array should be given in the form
array(answer,score,answer,score,...), where answer is the numerical or string expression to compare to the student answer,
and score is a proportion between 0 and 1 to award as partial credit. Note this
currently only works for single answers; "or" answers and lists are not supported. If needed,
you can make $requiretimes and/or $answerformat an array, with the first entry to be applied to the $answer,
and subsequent entries to apply to the $partialcredit answers.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20.
- $hidepreview = true
- Hides the Preview button. Could be useful in multipart questions, or if you're only asking for a simple
response, like a fraction
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to $answer. Use this to give a detailed answer,
or a rounded off answer.
- $previewloc (In Question Text)
- Where you want the preview button to be located. Defaults to after the entry box if not placed in question text.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Multiple-Choice
A student is asked to select the correct answer from those given. The order
of choices is automatically randomized.
Required Variables
- $questions (or $choices) = an array of choices
- Defines the choices. If you use $choices, don't define $questions
- $answer = the index into $questions that contains the correct answer
- Defines the answer. Remember that arrays are zero-indexed, so if $questions = array("correct","wrong","wrong"),
then $answer=0. Define multiple acceptable answer indices in a string separated by or: $answer = "0 or 1".
Optional Variables
- $displayformat = "horiz", "select", "2column, "3column", or "inline"
- Will lay out the choices horizontally, as a select box, in multiple columns, or inline with text rather than using the default vertical layout
- $noshuffle = "all" or "last" or "last2"
- If $noshuffle="all", then the $questions array will not be randomized (shuffled). If $noshuffle = "last", then the $questions
array will be randomized, except for the last element. This is for options like "None of the above".
You can use "last2" or "last3" to randomize all but the last 2 or 3 elements.
- $partialcredit = array(index,score,[index,score,...])
- Allows you to specify partial credit for other answers. The array should be given in the form array(index,score,index,score,...), where
index is the index in $questions, and score is a proportion between 0 and 1 to award as partial credit. For example, if $answer = 0
and $partialcredit = array(2,.3), then the student would get full credit for selecting the item corresponding with $questions[0], and 30% credit
for selecting the item corresponding with $questions[2]. All other answers would receive 0 credit.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $ansprompt = string
- When $displayformat = "select" is used, this allows you to override the default "Select an answer" text
that displays. Do not use this unless there's a really strong reason to.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the choice list in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Multiple-Answer
A student is asked to select all the choices given that are correct. The order
of choices is automatically randomized.
Required Variables
- $questions (or $choices)= an array of questions
- Defines the choices. If you use $choices, don't define $questions
- $answers = a list of the indexes into $questions that contain the correct answer
- Defines the answers. Remember that arrays are zero-indexed, if $questions = array("correct","correct","wrong"),
then $answers="0,1". Or there are more than one correct combination, separate with or, like
$answers = "0,1 or 0,3"
Optional Variables
- $scoremethod = "answers" or "allornothing" or "takeanything"
- By default, the total points possible are divided by the number of questions, and partial credit is lost for each
correct answer missed and each wrong answer selected. If $scoremethod="answers" is set, then the total points
possible are divided by the number of answers (tougher grading scheme). If $scoremethod="allornothing", then the
student will only get credit if every piece is correct (no partial credit).
if $scoremethod="takeanything", full credit will be given for any response.
- $displayformat = "horiz", "2column, "3column", or "inline"
- Will lay out the choices horizontally, in multiple columns, or inline with text rather than using the default vertical layout
- $noshuffle = "all" or "last"
- If $noshuffle="all", then the $questions array will not be randomized (shuffled).
If $noshuffle="last", then the last element of $questions will not be randomized (shuffled) but the others will.
- $answerformat = "addnone"
- Adds "None of these" to the options. This is added automatically if
$answers="", and you can
add "None of these" yourselv to $questions, but this provides another way to always include the
"None of these" option.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the choice list in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answers.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Matching
A student is asked to match answers with questions
Required Variables
- $questions = an array of questions
- Defines the questions - these will be on the left with entry boxes
- $answers = an array of answers
- Defines the answers - these will be on the right and lettered
Optional Variables
- $matchlist = a list of the indexes into $answers that contain the match to each question.
- Defines correct matches. By default, it is assumed that each element of $questions is matched one-to-one with the
corresponding element of $answers (in other words, that $answers[0] is the answer to $questions[0]).
$matchlist allows
you to define one-to-many matches. Example: if $questions=array("cat","dog","quartz") and
$answers=array("animal","mineral"), then $matchlist = "0,0,1"
- $questiontitle = string
- Displays a title above the list of questions. For example, if $questions was a list of
states, then $questiontitle="States" would be appropriate
- $answertitle = string
- Displays a title above the list of answers
- $noshuffle = "questions" or "answers"
- Retains original order of questions or answers, and only shuffles the other. By default, both lists are shuffled
- $displayformat = "select" or "2columnselect"
- Only displays the $questions, with select boxes next to each containing the $answers. This should only be used with
pure text $answers.
- $scoremethod = "allornothing"
- Setting "allornothing" will mean no partial credit is given, and the student must match all parts
correctly to get credit.
- $ansprompt = string
- This allows you to override the default "-" that displays in the dropdowns when no selection
has been made, for example to replace it with "?".
It's recommended to not use this unless there's a really strong reason to.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place matching questions and answers in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the list of correct matches.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Function
A student is asked to enter a function
Required Variables
- $answer = string
- Defines the answer function, entered as a string. For example, $answer="2sin(x)". You can
specify multiple acceptable answers by separating with "or", like $answer="x^2 or x^4"
Note: The system will accept any algebraically equivalent answer. To only allow answers of a
specific format, you'll also need to define $requiretimes (see below).
Optional Variables
- $variables = string
- A list of all variables in the function (including letters representing constants). Defaults to "x". Can use
"f()" to indicate a symbol represents a function.
- $domain = "inputmin,inputmax"
- Defines the domain on which to compare the given answer and correct answer functions. The same domain
applies to all variables. An option third list element "integers" can be given, which limits the domain to integer
values. The domain defaults to real numbers from -10 to 10. If using multiple variables, can extend domain to
define domain for each variable separately. Example: $variables = "x,y"; $domain = "0,5,20,25"
- $requiretimes = a list, like "^,=3,cos,<2"
- Adds format checking to the student's answer. The list can include multiple checks, which come in pairs. The
first is the symbol to look for. The second describes what is acceptable. For example, in the string shown above,
the symbol "^" would be required to show up exactly 3 times, and "cos" would be required to show up less than 2 times. You can
use "#" in the symbol location to match any number (including decimal values); 3.2x+42y would match twice.
You can use a regular expression by putting in the symbol location "regex:expression"
You can match either of two symbols by putting || between them, like "x^-3||/x^3,>0"
Include "ignore_case,false" to make the search case sensitive.
You can put "ignore_spaces,true" at the beginning of the $requiretimes to ignore spaces in the answer
Include "ignore_symbol,$" (or some symbol other than $) at the beginning of the $requiretimes to ignore that symbol in the answer
Note that commas are ignored by default with Function type, and a basic exponent like x^(-3) is converted to x^-3 before the check.
- $answerformat = "equation" or "inequality" or "generalcomplex" or "toconst" or "scalarmult" or "nosoln" or "nosolninf" or "sameform" or "list" or "casesensitivevars" (can combine, like "equation,nosoln")
- By default, the student answer is expected to be an expression, and be equivalent (at points) to the specified answer. This option changes
this behavior.
"equation": Specifies that the answer expected is an equation rather than an expression. The given
answer should also be an equation. Be sure to specify all variables in the equation in $variables. This may fail
on equations that are near zero for most values of the input; this can often be overcome by changing the $domain
"inequality": Specifies that the answer is expected to be an inequality rather than an expression.
The given answers should also be an inequality. Be sure to specify all variables in the equation in $variables. This may fail
on equations that are near zero for most values of the input; this can often be overcome by changing the $domain
"generalcomplex": Specifies the answer is a complex function, involving i.
"list": Allow a list of expressions or equations to be entered. Does not ignore duplicates. You cannot
use this in combination with $partialcredit. $requiretimes will apply to each element of the list.
"toconst": Specifies that the answer provided by the student is allowed to differ from the specified answer by a constant
for all inputs. Appropriate for comparing antiderivatives. This may fail on expressions that evaluate to very large
values or raise numbers to very large powers.
"scalarmult": Specifies that the answer provided by the student is allowed to differ from the specified answer by a
scalar multiple.
"allowplusminus": allow use of +- in the answer. Will enable the 'list' option if not already included.
"nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions".
$ansprompt can override the default statements like this:
$ansprompt = "One function, f(x)=;No such function exists"
"sameform": requires the student's answer be in the "same form" as the correct answer. This means
exactly the same, except for commutation of addition and multiplication, multiplication by 1,
implicit multiplication, and extra parentheses. (2x-3)(5-x) would be "sameform" as (-1x+5)(2*x-3),
but 2/4x and 1/2x and 0.5x would not be "sameform". Use with caution.
"casesensitivevars": By default answers with incorrect case variables (like X instead of x) will be accepted.
Add this option to not ignore case on variables.
- $partialcredit = array(string,score,[string,score,...])
- Allows you to specify partial credit for other answers. The array should be given in the form
array(string,score,string,score,...), where string is the expression to compare to the student answer,
and score is a proportion between 0 and 1 to award as partial credit. Note this
currently only works for single expression answers; "or" answers are not supported.
- $formatfeedbackon = true
- Turns on "right answer, wrong format" feedback on the question
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20.
- $hidepreview = true
- Hides the Preview button. Could be useful in multipart questions, but generally not recommended
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to makeprettydisp($answer).
- $previewloc (In Question Text)
- Where you want the preview button to be located. Defaults to after the entry box if not placed in question text.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
String
A student is asked to enter a string (a word or list of letters).
Required Variables
- $answer = a string
- Defines the answer. Multiple acceptable answers can be entered using "or". Example: $answer = "dog or cat"
Optional Variables
- $strflags = string of flags, like "ignore_case=1,trim_whitespace=0"
- Determines how the string will be compared. Set to 1 to turn on, 0 for off. Flags are:
- ignore_case: ignores capitol/lowercase differences
- trim_whitespace: trims leading and ending whitespace (spaces)
- compress_whitespace: compresses multiple spaces to one space and trims
- remove_whitespace: removes all whitespace (spaces)
- ignore_order: treats ABC and CBA as equivalent
- ignore_commas: removes commas
- partial_credit: awards partial credit based on Levenshtein distance between strings
- allow_diff=n: gives full credit for answers with Levenshtein distance between strings ≤ n
- in_answer: gives credit if $answer is contained anywhere in the student answer
- regex: interprets $answer as a regular expression (pattern) to evaluate the student's answer. For example, $answer="cost.*increas" will give credit if the word cost appears before increas in the student's answer. $answer="increas|ris" will accept any of the following: increasing, increases, rising, or risen etc.
- special_or: use *or* for separating answers rather than or.
- ignore_symbol=sym: Unlike the other flags, this is not an on/off flag. Set this equal to a symbol to ignore that
symbol in student answers. This flag can be used multiple times with different symbols.
By default, compress_whitespace and ignore_case are On. Only one of
partial_credit, allow_diff, in_answer or regex may be used at a time.
- $scoremethod = "takeanything" or "takeanythingorblank" or "submitblank"
- "takeanything" or "takeanythingorblank" sets the problem to give full credit
for any answer. "takeanythingorblank" also counts blank answers as correct.
"submitblank" will cause blank answers to get submitted for scoring (new system only).
- $answerformat = "list" or "logic" or "setexp"
- "list" specifies that a list of answers is expected. Renders ignore_commas unnecessary. Cannot be used with
partial_credit flag. Duplicates are not ignored.
"logic" enables a separate grading algorithm for logic statements, ignoring $strflags. The $answer
should be given using vv for or, ^^ for and, neg for not, xor for exclusive or, => for conditional, and <=> for biconditional.
Parens are supported, but no other symbols. The variables used in the logic expression must be declared by
defining $variables.
"setexp" enables a separate grading algorithm for set expression statements, ignoring $strflags. The $answer should be given using
'nn' for intersection, 'uu' for union, '-' for set difference, '^c' for set complement, and 'oplus' for symmetric difference.
- $displayformat = "usepreview" or "typeahead" or "usepreviewnomq"
- "usepreview" enables mathquill entry for mathematical answers.
"usepreviewnomq" adds a preview button for previewing mathematical answers in asciimath.
"typeahead" will enable an auto-suggest list of options once the student has typed at least
two letters of the word. Provide the auto-suggest list in the variable $questions.
- $variables
- When $answerformat="logic" or "setexp" is used, define the $variables in the logic statement, like "p,q"
- $requiretimes = a list, like "^,=3,cos,<2"
- Adds format checking to the student's answer. Usually not needed for string questions, but can
be useful when the "logic" or "setexp" answerformat is used. The list can include multiple checks,
which come in pairs. The first is the symbol to look for. The second describes what is
acceptable. For example, in the string shown above, the symbol "^" would be required to show
up exactly 3 times, and "cos" would be required to show up less than 2 times.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="type: "
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the answer entry box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Essay
A student is asked to enter a free-response answer.
The essay type is not automatically graded.
Required Variables
None - the essay type is not computer graded.
Optional Variables
- $answerboxsize = "rows" or $answerboxsize = "rows,columns"
- Determines size of space provided for entry of an answer. Defaults to 5 rows, 50 columns.
- $displayformat = "editor" or "editornopaste" or "pre"
- "editor" to use the rich text editor for the essay answer box, or "editornopaste" for the rich text editor with paste disabled.
"pre" to use standard text entry, and to display in gradebook as preformatted text.
- $scoremethod = "takeanything" or "takeanythingorblank" or "nomanual"
- The first two sets the problem to give full credit for any answer. The second also counts
blank answers as correct. The "nomanual" option will give no credit for any answer, but doesn't
mark the question as needing manual grading.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the essay box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Drawing
Drawing questions require the student to draw one or more lines/curves or dots.
Dots are graded right/wrong. Lines/curves are graded based on the deviation of the
drawn line from the correct line.
Required Variables
- $answers = a string or array of strings describing the points or curves to be drawn
- Curves: "f(x)" like "x^2+3".
Line segments or rays: "f(x),xmin,xmax", like "x+1,-3,2" or "x+1,-oo,3"
Dots: "x,y" for closed dots, "x,y,open" for open dots, like "2,3"
See below for additional entry formats for other curves when using "twopoint" drawing.
When using twopoint drawing, you can preface an answer with "optional", like "optional,2,3", to
indicate that drawing element is not required, but shouldn't mark down the score if present.
Recommended Variables
- $answerformat = "twopoint", "polygon", "inequality", "numberline", "freehand", or (for the older tools), "line,lineseg,dot,opendot"
- Limits the drawing tools available to students. Defaults to the older drawing tools "line,dot,opendot".
$answerformat="twopoint" will use a different set of drawing tools for specific shapes that all use two
control points to define the shape. It is strongly recommended you use these instead of the older tools.
- $answerformat="twopoint" will use a default tool set of line, parabola, absolute value, circle, and dot tools
- You can limit or expand the tools by specifying them: e.g. $answerformat = "twopoint,line,parab". Valid values are:
- line (lines)
- dashedline (dashed lines)
- lineseg (line segment)
- ray (rays)
- parab (vertical parabolas)
- horizparab (horizontal parabolas)
- halfparab (half a vertical parabola)
- 3pointparab (parabola given 3 points)
- cubic (a(x-h)^3+k style cubics)
- abs (absolute value)
- circle (circles)
- dot (closed dots)
- opendot (open dots)
- sqrt (square root)
- cuberoot (cube root)
- trig (sin and cos)
- tan (tan and cot function)
- vector (position or displacement vectors)
- exp (exponential with horizontal asymptote at y=0)
- genexp (exponential with any horizontal asymptote)
- log (logarithm with vertical asymptote at x=0)
- genlog (logarithm with any vertical asymptote)
- rational (linear/linear rational)
- ellipse (ellipses)
- hyperbola (vertical or horizontal hyperbolas)
- For lines, vertical parabolas, absolute values, square roots, cubics, cuberoots, sines, cosines, exponentials, logs, and rationals (linear/linear only) give $answers as a function of x, like "2(x-1)^2+3"
- For line segments and rays, given $answers as a function with domain, like "2x+4,-oo,3", or for vertical line segments use x= and give the range, like "x=4,-2,3"
- For dashed lines, give $answers as "dashedline,function" like "dashedline,2/3x+4"
- For dots give $answers as "x,y", or "x,y,open" for open dots
- For circles, give $answers as "circle,x,y,radius", like "circle,2,-1,3".
- For ellipses, give $answers as "ellipse,x,y,x_radius,y_radius", like "ellipse,1,2,4,2"
- For hyperbolas of form (x-h)^2/a^2-(y-k)^2/b^2=1, give $answers as "horizhyperbola,h,k,a,b"
- For hyperbolas of form (y-k)^2/a^2-(x-h)^2/b^2=1, give $answers as "verthyperbola,h,k,a,b"
- For horizontal parabolas give $answers as "x=equation", like "x=2(y-1)^2-3".
- For half parabolas give $answers as "equation,>xvertex", like "(x-1)^2-3,>1". Note only half parabolas are supported, not
arbitrary segments.
- For vertical lines give $answers as "x=number", like "x=3".
- For vectors, give $answers as "vector, x_start, y_start, x_end, y_end" for position vectors, or "vector, dx, dy" for displacement vectors.
Note you can use $scoremethod to change how vectors are scored.
$answerformat = "polygon" can be used for drawing a single polygon; give $answer as array of points in order joined with edges.
$answerformat = "closedpolygon" can be used for drawing a single polygon that is closed; the enclosed area will be shaded and the drawing terminate when the shape is
closed. The format is the same as "polygon", except make sure the first and last entry of your $answers array are identical.
$answerformat="inequality" will use a set of drawing tools for graphing linear inequalities in two variables. Give $answers for non-vertical lines in form
like ">=3x+4", "<5x+4", and "x<=3" for vertical lines.
$answerformat="inequality,parab" will use a set of drawing tools for graphing quadratic inequalities in two variables. Give $answers in form
like ">=x^2-4", "<x^2+1". Use $answerformat="inequality,both" to turn on lines and parabolas.
$answerformat="inequality,abs" will use a set of drawing tools for graphing absolute value inequalities in two variables. Give $answers in form
like ">=abs(x-3)+4", "<3abs(x)". Use $answerformat="inequality,line,abs,parab" or some combo to turn on multiple tools.
$answerformat="numberline" will use a set of drawing tools for graphing inequalities or points in one variable on a number line. Give $answers as dots and
line segments, or use the intervalstodraw function from the interval macro library to form the $answers array.
$answerformat="freehand" will allow freehand drawing without any drawing tools. This mode can NOT be autograded, and should
only be used for manually graded answers.
$answerformat can also be used to limit the older tools: $answerformat = "line", or $answerformat = "line,dot"
- $snaptogrid = spacing
- Turns on snapping, where points will jump to a grid. $snaptogrid = 1 will jump to the nearest
integer. $snaptogrid = 0.5 will jump to the nearest .5. $snaptogrid = "2:4" will jump to the nearest
2 in the x and 4 in the y. Does not have to match the actual grid line spacing. Be aware that due to pixelation, the snapping
may not land on exact values correctly. This is usually corrected for automatically, but it sometimes fails if the correction would be
too large. In that case, use the getsnapwidthheight macro to compute an imagewidth and imageheight that will be pixel accurate.
Optional Variables
- $grid = "xmin,xmax,ymin,ymax,xscl,yscl,imagewidth,imageheight"
- Defines the grid to be drawn on. Defaults to "-5,5,-5,5,1,1,300,300". You can set all or just some of the
values. For example, to just set the window, you could use "0,10,0,10"
If using $answerformat="numberline", set ymin and ymax to 0.
If desired, you can set separate label and grid
spacing using "xmin,xmax,ymin,ymax,xlabelspacing:xgridspacing,ylabelspacing:ygridspacing,imagewidth,imageheight". You can specify axis labels using
"xmin,xmax,ymin,ymax,xlabelspacing:xgridspacing:xaxislabel,ylabelspacing:ygridspacing:yaxislabel,imagewidth,imageheight".
To create first quadrant graphs, use "0:-n" (for some value of n) for xmin and/or ymin to only have gridlines and labels
after 0, while still using -n to adjust spacing.
- $background = equation or array of equations, using the showplot macro format
- Define a graph to display in the background, to be drawn on top of. Example: $background = "x^2,red".
You can also set $background a string of asciisvg commands prefaced with "draw:", like "draw:line([1,1],[3,3]);".
Note that initPicture and axes will already have been called, so do not include them.
You can also set $background to "none" to remove axes and the grid.
To specify alt-text for the background, add an element to the background array, like
$background = ["x^2,red","alt:a parabola"]. For a background using draw, add the alt at the
end of your commands, like: "draw:line([1,1],[3,3]);alt:a line segment". Note that this
provided alt will replace everything, including the basic window information.
- $partweights = array or list of weights
- Defines grading weight for each line or dot in $answers. Example: $partweights = ".5,.25,.25". Defaults
to equal weights on each line or dot.
- $reltolerance = tolerance scaling factor
- Scales the grading tolerance. Defaults to 1. Set $reltolerance = 2 to make the grading twice as tolerant;
$reltolerance = 0.5 to make grading half as forgiving
- $abstolerance = grading cutoff
- Sets all-or-nothing grading. If score < $abstolerance, the student receives 0 for the question (note: score is
between 0 and 1). Otherwise
the student will receive full credit. Not set by default.
- $scoremethod = "takeanything", "direction", "relativelength", "ignoreoverlap", "ignoreextradots"
- When "takeanything" is used, this will give full credit for any non-blank answer. This might be of use with the freehand drawing option.
"direction" and "relativelength" are only used for vectors.
"direction" will score the initial point and direction for position vectors, but not length, and
will only score direction for displacement vectors.
"relativelength" will score like "direction", but will also check that the drawn vectors have
correct lengths relative to each other.
"ignoreoverlap" only works with $answerformat="line", and will not deduct for overlapped lines.
"ignoreextradots" only works with $answerformat="polgon" and "closedpolygon", and will ignore any
extra dots drawn along a side of the polygon.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
N-Tuple
N-Tuple questions require the student to enter an n-tuple or list of n-tuples.
This can be used for coordinate points, vectors, or any other n-tuple of numbers.
Required Variables
- $answer = a string containing an n-tuple or list of n-tuples
- Defines the answer n-tuple or list of n-tuples. N-tuples can be any dimension,
but must be surrounded by any of: (), [], {}, <>. Examples: $answer = "(1,2)",
$answer = "<2,3,4>,<1,5,7>", $answer = "(1,2) or (1,3)"
Optional Variables
- $displayformat = "point", "pointlist", "vector", "vectorlist", "list", "set", "setlist"
- Changes the answer entry tips (does NOT change how the question is graded). For points,
entry like (2,3) is specified. For vectors, entry like <2,3> is specified.
- $answerformat = "scalarmult", "anyorder", "nosoln", "nosolninf"
- "scalarmult" will accept any answer that is a scalar multiple of the correct answer.
"anyorder" will accept elements in any order, so (2,1) would be treated equivalent to (1,2)
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this:
$ansprompt = "One value, x=;No values;Many values"
- $scoremethod = "byelement"
- By default, the whole n-tuple must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the n-tuple are correct.
- $partweights = ".2,.8"
- Can be used with $scoremethod = "byelement" to change the value of each part of the ntuple
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Calculated N-Tuple
Calculated N-Tuple questions require the student to enter an n-tuple or list of n-tuples.
This can be used for coordinate points, vectors, or any other n-tuple of numbers.
This is identical the the N-tuple answer type, but allows students to enter mathematical expressions
rather than just numbers, such as (5/3, 2/3).
Required Variables
- $answer = a string containing an n-tuple or list of n-tuples
- Defines the answer n-tuple or list of n-tuples. N-tuples can be any dimension,
but must be surrounded by any of: (), [], {}, <>. Examples: $answer = "(1/3,2)",
$answer = "<2,3,4>,<1,5,7>", $answer = "(1,2) or (1,3)"
Optional Variables
- $displayformat = "point", "pointlist", "vector", "vectorlist", "list", "set", "setlist"
- Changes the answer entry tips (does NOT change how the question is graded). For points,
entry like (2,3) is specified. For vectors, entry like <2,3> is specified.
- $answerformat = "scalarmult", "anyorder", "fraction", "reducedfraction", "mixednumber", "scinot", "fracordec", "nodecimal", "notrig", "nosoln", "nosolninf", "sameform"
- "scalarmult" will accept any answer that is a scalar multiple of the correct answer.
"anyorder" will accept elements in any order, so (2,1) would be treated equivalent to (1,2)
The other options require each component of the answer to be a single fraction (like 10/6), a reduced fraction (like 5/3), a reduced mixed number (like 2_1/2), scientific notation (like 2.3*10^4), a single fraction or decimal, an answer
without decimals (also disallows 10^-2 and 3E-2), or
an answer without trig functions (sin,cos,tan,sec,csc,cot). Multiple options can be specified like $answerformat="nodecimal,notrig".
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this:
$ansprompt = "One value, x=;No values;Many values"
- $scoremethod = "byelement"
- By default, the whole n-tuple must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the n-tuple are correct.
- $partweights = ".2,.8"
- Can be used with $scoremethod = "byelement" to change the value of each part of the ntuple
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Complex N-Tuple
Complex N-Tuple questions require the student to enter an n-tuple or list of n-tuples of complex numbers.
This can be used for coordinate points, vectors, or any other n-tuple of complex numbers.
This will require the student to enter each complex number in a+bi form.
Required Variables
- $answer = a string containing an n-tuple or list of n-tuples of complex numbers in a+bi form.
- Defines the answer n-tuple or list of n-tuples. N-tuples can be any dimension,
but must be surrounded by any of: (), [], {}, <>. Examples: $answer = "(1,2+i)",
$answer = "<i,3+i,4>,<1+i,5-i,7>", $answer = "(1,2i) or (1+i,3)"
Optional Variables
- $displayformat = "point", "pointlist", "vector", "vectorlist", "list", "set", "setlist"
- Changes the answer entry tips (does NOT change how the question is graded). For points,
entry like (2,3) is specified. For vectors, entry like <2,3> is specified.
- $answerformat = "allowjcomplex", "nosoln", "nosolninf"
- "allowjcomplex" allows 2+3j instead of 2+3i
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this:
$ansprompt = "One value, x=;No values;Many values"
- $scoremethod = "byelement"
- By default, the whole n-tuple must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the n-tuple are correct.
- $partweights = ".2,.8"
- Can be used with $scoremethod = "byelement" to change the value of each part of the ntuple
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Calculated Complex N-Tuple
Calculated Complex N-Tuple questions require the student to enter an n-tuple or list of n-tuples of complex numbers.
This can be used for coordinate points, vectors, or any other n-tuple of complex numbers.
This is identical the the Complex N-tuple answer type, but allows students to enter mathematical expressions
rather than just numbers, such as (5/3+sqrt(2)i, 2/3+1/4i).
Required Variables
- $answer = a string containing an n-tuple or list of n-tuples
- Defines the answer n-tuple or list of n-tuples. N-tuples can be any dimension,
but must be surrounded by any of: (), [], {}, <>. Examples: $answer = "(1/3+i,2)",
$answer = "<2i,3,i>,<1+i,5,7>", $answer = "(1,2i) or (i,3)".
Each complex number must be in a+bi format unless $answerformat="sloppycomplex" or "generalcomplex" is used.
Optional Variables
- $displayformat = "point", "pointlist", "vector", "vectorlist", "list", "set", "setlist"
- Changes the answer entry tips (does NOT change how the question is graded). For points,
entry like (2,3) is specified. For vectors, entry like <2,3> is specified.
- $answerformat = "sloppycomplex", "generalcomplex", "allowjcomplex", "fraction", "reducedfraction", "mixednumber", "scinot", "fracordec", "nodecimal", "notrig", "nosoln", "nosolninf", "sameform"
- Use "sloppycomplex" to allow the student to enter complex numbers in forms other than a+bi
(allows (4+sqrt(3)i)/5 for example). Student answer must still only contain one i.
Use "generalcomplex" to allow students to enter complex expressions that may involve calculations, like (e^(3i),4).
"allowjcomplex" allows for use of j instead of i as the imaginary unit.
The other options require each component of the answer to be a single fraction (like 10/6), a reduced fraction (like 5/3), a reduced mixed number (like 2_1/2), scientific notation (like 2.3*10^4), a single fraction or decimal, an answer
without decimals (also disallows 10^-2 and 3E-2), or
an answer without trig functions (sin,cos,tan,sec,csc,cot). Multiple options can be specified like $answerformat="nodecimal,notrig".
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this:
$ansprompt = "One value, x=;No values;Many values"
- $scoremethod = "byelement"
- By default, the whole n-tuple must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the n-tuple are correct.
- $partweights = ".2,.8"
- Can be used with $scoremethod = "byelement" to change the value of each part of the ntuple
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Algebraic N-Tuple
Algebraic N-Tuple questions require the student to enter an n-tuple or list of n-tuples of algebraic expressions.
This can be used for parameterized points or vectors, or any other n-tuple of algebraic expressions.
This is similar to the other N-tuple answer types, but allows students to enter algebraic expressions
rather than just numbers, such as (x, x^2, 4-x).
Required Variables
- $answer = a string containing an n-tuple or list of n-tuples
- Defines the answer n-tuple or list of n-tuples. N-tuples can be any dimension,
but must be surrounded by any of: (), [], {}, <>. Examples: $answer = "(x,x^2)",
$answer = "<t,4-t,2+3t>,<t,3t,8t>", $answer = "(x,x^2) or (sqrt(x),x)". .
Optional Variables
- $displayformat = "point", "pointlist", "vector", "vectorlist", "list", "set", "setlist"
- Changes the answer entry tips (does NOT change how the question is graded). For points,
entry like (2,3) is specified. For vectors, entry like <2,3> is specified.
- $variables = string
- A list of all variables in the function (including letters representing constants). Defaults to "x". Can use
"f()" to indicate a symbol represents a function.
- $domain = "inputmin,inputmax"
- Defines the domain on which to compare the given answer and correct answer functions. The same domain
applies to all variables. An option third list element "integers" can be given, which limits the domain to integer
values. The domain defaults to real numbers from -10 to 10. If using multiple variables, can extend domain to
define domain for each variable separately. Example: $variables = "x,y"; $domain = "0,5,20,25"
- $answerformat = "generalcomplex", "nosoln", "nosolninf", "sameform"
- Use "generalcomplex" to allow students to enter complex functions involving i.
"sameform" requires the student's answer be in the "same form" as the correct answer. This means exactly the same, except for commutation of addition and multiplication, multiplication by 1, implicit multiplication, and extra parentheses. (2x-3)(5-x) would be "sameform" as (-1x+5)(2*x-3), but 2/4x and 1/2x and 0.5x would not be "sameform". Use with caution.
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this:
$ansprompt = "One value, x=;No values;Many values"
- $requiretimes = a list, like "^,=3,cos,<2"
- Adds format checking to the student's answer. The list can include multiple checks, which come in pairs. The first is the symbol to look for. The second describes what is acceptable.
See the Function question type for more details. Note the $requiretimes applies to the student's entire answer.
- $requiretimeslistpart = a list, in the same format as $requiretimes
- Similar to $requiretimes, but this check is applied to each ntuple when the answer is a list of ntuples.
- $scoremethod = "byelement"
- By default, the whole n-tuple must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the n-tuple are correct.
- $partweights = ".2,.8"
- Can be used with $scoremethod = "byelement" to change the value of each part of the ntuple
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Complex
Complex questions require the student to enter a complex number in a+bi form.
Required Variables
- $answer = a string containing a complex number or list of complex numbers
- Defines the answer. Example: $answer="3+2i"
Optional Variables
- $answerformat = "list" or "allowjcomplex"
- "list" Specifies that the answer will be a list of complex numbers.
"allowjcomplex" allows 2+3j instead of 2+3i
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Calculated Complex
Calculated Complex questions require the student to enter a complex number in a+bi form.
This is identical to the Complex answer type, but allows students to enter mathematical expressions
rather than just numbers, such as 1/3+sqrt(2)i.
Required Variables
- $answer = a string containing a complex number or list of complex numbers
- Defines the answer. Example: $answer="3+2i", $answer="2/3+1/3i". The answer must be given in
a + bi format (so 2+3isqrt(2) or 5/2+i/3 will not work) unless $answerformat="sloppycomplex" is used.
Optional Variables
- $answerformat = "sloppycomplex", "generalcomplex", "allowjcomplex" "fraction", "reducedfraction", "mixednumber", "scinot", "fracordec", "nodecimal", "notrig", or "sameform"
- Use "sloppycomplex" to allow the student to enter complex numbers in forms other than a+bi (allows 2+3isqrt(2) for example). Student answer
must still only contain one i.
Use "generalcomplex" to allow students to enter complex expressions that may involve calculations.
"allowjcomplex" allows for use of j instead of i as the imaginary unit.
The other options requires the real and imaginary parts of the answer to be a single fraction (like 10/6), a reduced fraction (like 5/3), a reduced mixed number (like 2_1/2), scientific notation (like 2.3*10^4), a single fraction or decimal, an answer
without decimals (also disallows 10^-2 and 3E-2), or
an answer without trig functions (sin,cos,tan,sec,csc,cot). Multiple options can be specified like $answerformat="nodecimal,notrig".
$answerformat = "list" specifies that the answer will be a list of complex numbers.
allowplusminus allow use of +- in the answer. Will enable the 'list' option if not already included.
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this:
$ansprompt = "One value, x=;No values;Many values"
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input drawing tool in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Numerical Matrix
The student is asked to enter a matrix of numbers (integer, decimal, or scientific notation).
The entries are compared to a given tolerance.
Required Variables
- $answer = string describing a matrix of numbers, or calculations leading to numbers
- Defines the answer. Example: $answer = "[(1,2,3),(8/2,5,6)]" is a 2x3 matrix with first row: 1,2,3
Optional Variables
- $answersize = "rows,cols"
- Defines the size of the answer matrix. If this is supplied, the student will be provided with a grid of
entry boxes in which to input the matrix. If this is not supplied, they will be required to enter the matrix
using the ASCIIMath notation, like "[(1,2,3),(4,5,6)]"
- $answerformat = "scalarmult" or "ref" or "rowequiv" or "anyroworder"
- If "scalarmult" used, any scalar multiple of the correct matrix will be accepted.
If "ref" is used, any row echelon form matrix that is row equivalent will be accepted.
If "rowequiv" is used, any matrix that is row equivalent will be accepted.
If "anyroworder" is used, any matrix equivalent up to row interchanges will be accepted.
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $scoremethod = "byelement"
- By default, the whole matrix must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the matrix are correct.
- $displayformat = "det" or "inline" or "augmented"
- When $answersize is used, by default square brackets are used around the
entry array. Set $displayformat = "det" to use vertical bars instead.
Normally matrices with $answersize set are displayed on their own line. Set
$displayformat = "inline" to display it inline with text. Note that if the text is in a <p>, you
may need to change that to a <div> wrapper for the matrix to stay inline.
Use $displayformat = "augmented" to display the usual augment bar before the last column.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20. Will only be
used if $answersize is not supplied.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to $answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Calculated Matrix
The student is asked to enter a matrix of numbers or calculations, like 2/3 or 5^2.
The entries are compared to a given tolerance.
Required Variables
- $answer = string describing a matrix of numbers, or calculations leading to numbers
- Defines the answer. Example: $answer = "[(1,2,3),(8/2,5,6)]" is a 2x3 matrix with first row: 1,2,3
Optional Variables
- $answersize = "rows,cols"
- Defines the size of the answer matrix. If this is supplied, the student will be provided with a grid of
entry boxes in which to input the matrix. If this is not supplied, they will be required to enter the matrix
using the ASCIIMath notation, like "[(1,2,3),(4,5,6)]"
- $answerformat = "scalarmult","ref","rowequiv","anyroworder",fraction", "reducedfraction", "mixednumber", "scinot", "fracordec", "nodecimal", or "notrig"
- Requires the entries of the answer to be a single fraction (like 10/6), a reduced fraction (like 5/3), a reduced mixed number (like 2_1/2), scientific notation (like 2.3*10^4), a single fraction or decimal, an answer
without decimals (also disallows 10^-2 and 3E-2), or
an answer without trig functions (sin,cos,tan,sec,csc,cot). Multiple options can be specified like $answerformat="nodecimal,notrig".
If "scalarmult" used, any scalar multiple of the correct matrix will be accepted.
If "ref" is used, any row echelon form matrix that is row equivalent will be accepted.
If "rowequiv" is used, any matrix that is row equivalent will be accepted.
If "anyroworder" is used, any matrix equivalent up to row interchanges will be accepted.
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $scoremethod = "byelement"
- By default, the whole matrix must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the matrix are correct.
- $displayformat = "det" or "inline" or "augmented"
- When $answersize is used, by default square brackets are used around the
entry array. Set $displayformat = "det" to use vertical bars instead.
Normally matrices with $answersize set are displayed on their own line. Set
$displayformat = "inline" to display it inline with text. Note that if the text is in a <p>, you
`may need to change that to a <div> wrapper for the matrix to stay inline.
Use $displayformat = "augmented" to display the usual augment bar before the last column.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20. Will only be
used if $answersize is not supplied.
- $hidepreview = true
- Hides the Preview button. Could be useful in multipart questions, but generally not recommended
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to $answer.
Use this to substitute a detailed answer.
- $previewloc (In Question Text)
- Where you want the preview button to be located. Defaults to after the entry box if not placed in question text.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Complex Numerical Matrix
The student is asked to enter a matrix of complex numbers in a+bi form with decimal or integer coefficients.
Required Variables
- $answer = string describing a matrix of complex numbers
- Defines the answer. Example: $answer = "[(1+i,2,3i),(8,5+i,6)]" is a 2x3 matrix with first row: 1+i,2,3i
Optional Variables
- $answersize = "rows,cols"
- Defines the size of the answer matrix. If this is supplied, the student will be provided with a grid of
entry boxes in which to input the matrix. If this is not supplied, they will be required to enter the matrix
using the ASCIIMath notation, like "[(1+i,2,3i),(8,5+i,6)]" or using the equation editor palette.
- $answerformat = "nosoln", "nosolninf"
- $answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this: $ansprompt = "One value, x=;No values;Many values"
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $scoremethod = "byelement"
- By default, the whole matrix must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the matrix are correct.
- $displayformat = "det" or "inline" or "augmented"
- When $answersize is used, by default square brackets are used around the
entry array. Set $displayformat = "det" to use vertical bars instead.
Normally matrices with $answersize set are displayed on their own line. Set
$displayformat = "inline" to display it inline with text.
Use $displayformat = "augmented" to display the usual augment bar before the last column.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20. Will only be
used if $answersize is not supplied.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to $answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Calculated Complex Matrix
The student is asked to enter a matrix of complex numbers or calculations, like 2/3+1/3i or 5^2.
Required Variables
- $answer = string describing a matrix of complex numbers, or calculations leading to numbers
- Defines the answer. Example: $answer = "[(1+i,2,3i),(3/2+i,3sqrt(2)i,6)]" is a 2x3 matrix with first row: 1+i,2,3i
Optional Variables
- $answersize = "rows,cols"
- Defines the size of the answer matrix. If this is supplied, the student will be provided with a grid of
entry boxes in which to input the matrix. If this is not supplied, they will be required to enter the matrix
using the ASCIIMath notation, like "[(1+i,2,3i),(3/2+i,3sqrt(2)i,6)]" or use the equation editor palette
- $answerformat = "sloppycomplex", "generalcomplex", "allowjcomplex", "fraction", "reducedfraction", "mixednumber", "scinot", "fracordec", "nodecimal", or "notrig", "nosoln","nosolninf"
-
Use "sloppycomplex" to allow the student to enter complex numbers in forms other than a+bi
(allows (4+sqrt(3)i)/5 for example). Student answer must still only contain one i.
Use "generalcomplex" to allow students to enter complex expressions that may involve calculations, like e^(3i).
"allowjcomplex" allows for use of j instead of i as the imaginary unit.
The other options require each of the coefficients of the entries of the answer to be a single fraction (like 10/6), a reduced fraction (like 5/3), a reduced mixed number (like 2_1/2), scientific notation (like 2.3*10^4), a single fraction or decimal, an answer
without decimals (also disallows 10^-2 and 3E-2), or
an answer without trig functions (sin,cos,tan,sec,csc,cot). Multiple options can be specified like $answerformat="nodecimal,notrig".
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this: $ansprompt = "One value, x=;No values;Many values"
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $scoremethod = "byelement"
- By default, the whole matrix must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the matrix are correct.
- $displayformat = "det" or "inline" or "augmented"
- When $answersize is used, by default square brackets are used around the
entry array. Set $displayformat = "det" to use vertical bars instead.
Normally matrices with $answersize set are displayed on their own line. Set
$displayformat = "inline" to display it inline with text.
Use $displayformat = "augmented" to display the usual augment bar before the last column.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20. Will only be
used if $answersize is not supplied.
- $hidepreview = true
- Hides the Preview button. Could be useful in multipart questions, but generally not recommended
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to $answer.
Use this to substitute a detailed answer.
- $previewloc (In Question Text)
- Where you want the preview button to be located. Defaults to after the entry box if not placed in question text.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Algebraic Matrix
The student is asked to enter a matrix of algebraic expressions, like x^2 or 3t+1.
Required Variables
- $answer = string describing a matrix of algebraic expressions
- Defines the answer. Example: $answer = "[(x,x^2,3),(4,5+x,2)]" is a 2x3 matrix with first row: x,x^2,3
Optional Variables
- $answersize = "rows,cols"
- Defines the size of the answer matrix. If this is supplied, the student will be provided with a grid of
entry boxes in which to input the matrix. If this is not supplied, they will be required to enter the matrix
using the ASCIIMath notation, like "[(x,x^2,3),(4,5+x,2)]" or use the equation editor palette
- $variables = string
- A list of all variables in the function (including letters representing constants). Defaults to "x". Can use
"f()" to indicate a symbol represents a function.
- $domain = "inputmin,inputmax"
- Defines the domain on which to compare the given answer and correct answer functions. The same domain
applies to all variables. An option third list element "integers" can be given, which limits the domain to integer
values. The domain defaults to real numbers from -10 to 10. If using multiple variables, can extend domain to
define domain for each variable separately. Example: $variables = "x,y"; $domain = "0,5,20,25"
- $answerformat = "generalcomplex", "nosoln", "nosolninf", "sameform"
- Use "generalcomplex" to allow students to enter complex functions involving i.
"sameform" requires the student's answer be in the "same form" as the correct answer. This means exactly the same, except for commutation of addition and multiplication, multiplication by 1, implicit multiplication, and extra parentheses. (2x-3)(5-x) would be "sameform" as (-1x+5)(2*x-3), but 2/4x and 1/2x and 0.5x would not be "sameform". Use with caution.
$answerformat = "nosoln" or "nosolninf" adds a list radio buttons for "no solutions" and optionally "infinite solutions". $ansprompt can override the default statements like this:
$ansprompt = "One value, x=;No values;Many values"
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $scoremethod = "byelement"
- By default, the whole matrix must be correct to receive any credit.
Set $scoremethod = "byelement" to give partial credit if only some elements of
the matrix are correct.
- $displayformat = "det" or "inline" or "augmented"
- When $answersize is used, by default square brackets are used around the
entry array. Set $displayformat = "det" to use vertical bars instead.
Normally matrices with $answersize set are displayed on their own line. Set
$displayformat = "inline" to display it inline with text.
Use $displayformat = "augmented" to display the usual augment bar before the last column.
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="y="
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20. Will only be
used if $answersize is not supplied.
- $hidepreview = true
- Hides the Preview button. Could be useful in multipart questions, but generally not recommended
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the question input box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to $answer.
Use this to substitute a detailed answer.
- $previewloc (In Question Text)
- Where you want the preview button to be located. Defaults to after the entry box if not placed in question text.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Interval
A student is asked to enter an interval notation answer. Example: (2,5]U(7,oo)
Required Variables
- $answer = a string with the answer in interval notation
- Defines the answer. Join multiple intervals with U for union. Example: $answer = "(-oo,4]U(3,oo)". Use
DNE for empty set. Multiple acceptable answers can be entered using "or". Example: $answer = "(3,3) or [3,3]"
Optional Variables
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $reqdecimals = a number
- Defines the decimal accuracy required (ie 2 for two decimal places). This will put a message in the answer tips stating the
decimals required. If neither $abstolerance or $reltolerance is set, this will set the tolerance, otherwise the provided tolerance
will be used (even if it doesn't agree with the $reqdecimal setting).
- $answerformat = "normalcurve" or "list" or "allowsloppyintervals"
- "normalcurve" Changes the question to use a "shade the area under the normal curve" widget. Define $answer using the open interval that should be
shaded. Note that the shading tool only allows selection of z-values to 1 decimal place.
"list" will accept a list of comma-separated intervals like $answer="[2,3),(5,7)"
"allowsloppyintervals" will accept unsimplified unions, so will count [2,5)U(3,7) as equivalent to [2,7)
- $scoremethod = "partialcredit"
- By default, interval answers will be marked all right or all wrong. Setting $scoremethod = "partialcredit"
will changing the scoring mode to give partial credit. (new assessment system only).
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="`x in`"
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the entry box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Calculated Interval
A student is asked to enter an interval notation answer. Example: (2,5]U(7,oo). Values can be entered as calculations
rather than numbers, like [2/5,sqrt(8)]. Can use $answerformat="inequality" to require the student to use inequalities rather than
interval notation.
Required Variables
- $answer = a string with the answer in interval notation
- Defines the answer. Join multiple intervals with U for union, and oo for infinity. Example: $answer = "(-oo,4]U(9/2,oo)". Use
DNE for empty set. Multiple acceptable answers can be entered using "or". Example: $answer = "(3,3) or [3,3]".
Optional Variables
- $answerformat = "fraction", "reducedfraction", "mixednumber", "scinot", "fracordec", "nodecimal", "notrig", "list", "allowsloppyintervals", or "inequality"
- Requires the each value in the answer to be a single fraction (like 10/6), a reduced fraction (like 5/3), a reduced mixed number (like 2_1/2), scientific notation (like 2.3*10^4), a single fraction or decimal, an answer
without decimals (also disallows 10^-2 and 3E-2), or
an answer without trig functions (sin,cos,tan,sec,csc,cot). Multiple options can be specified like $answerformat="nodecimal,notrig".
$answerformat = "inequality" will require the student to enter an inequality rather than an interval. The instructor answer must still be given in
interval notation (it will be reformatted to an inequality automatically for the Show Answer). Use $variables="y" to change the variable of the inequality.
"list" will accept a list of comma-separated intervals like $answer="[2,3),(5,7)". Does not work with "inequality".
"allowsloppyintervals" will accept unsimplified unions, so will count [2,5)U(3,7) as equivalent to [2,7)
- $reltolerance = a decimal value
- Defines the largest relative error that will be accepted. If this is not set, a relative error of .001 (.1%) is
used by default.
- $abstolerance = a number
- Defines the largest absolute error that will be accepted. This will override the use of $reltolerance
- $reqdecimals = a number
- Defines the decimal accuracy required (ie 2 for two decimal places). This will put a message in the answer tips stating the
decimals required. If neither $abstolerance or $reltolerance is set, this will set the tolerance, otherwise the provided tolerance
will be used (even if it doesn't agree with the $reqdecimal setting).
- $scoremethod = "partialcredit"
- By default, interval answers will be marked all right or all wrong. Setting $scoremethod = "partialcredit"
will changing the scoring mode to give partial credit. Note that answers
not meeting $answerformat requirements will have deductions in addition to
correctness checks. (new assessment system only).
- $ansprompt = string
- A string that will be displayed in front of the input box. Example: $ansprompt="`x in`"
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the entry box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
- $previewloc (In Question Text)
- Where you want the preview button to be located. Defaults to after the entry box if not placed in question text.
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Chemical Equation
A student is asked to enter a chemical formula, or use $answerformat="reaction"
to ask for a reaction equation.
Required Variables
- $answer = a string with the answer
- Defines the answer, like "H_2O". Spaces are ignored.
For reactions, use
-> for a right arrow,
and <-> for an equilibrium arrow, like "2H+O->H_2O".
Optional Variables
- $answerformat = "reaction"
- Use "reaction" if you're asking for a reaction equation.
- $variables = a list of atoms
- Define this to populate the equation editor with the specified atoms.
- $answerboxsize = number
- Determines the number of characters space provided for entry of an answer. Defaults to 20.
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the entry box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to the text of the correct answer.
Use this to substitute a detailed answer.
Chemical Molecule Drawing
A student is asked to enter a sketch a molecule, using the Kekule drawing tool.
If the student has enabled the keyboard-based drawing accessibility option, they will be
presented with a textbox for them to write out a description instead.
Required Variables
- $answer = "SMILES~~~CML"
- Defines the answer, which includes the SMILES representation of the molecule,
as well as the CML representation used for displaying the answer key.
Use our answer generator to
draw the answer and generate the $answer string. You can specify multiple
acceptable answers separated by or, like "SMILES~~~CML or SMILES~~~CML"
Optional Variables
- $displayformat (In Common Control)
- Set to "condensed" to display the atom labels on the drawing.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the entry box in that location
- $showanswer
- The answer to show to students (if option if available). Defaults to a drawing of the correct answer.
Use this to substitute a detailed answer.
File Upload
A student is asked to upload a file. The file upload type is not automatically graded.
Required Variables
None - the file upload type is not computer graded.
Optional Variables
- $scoremethod = "takeanything" or "takeanythingorblank"
- Sets the problem to give full credit for any answer. The latter also counts
blank answers as correct.
- $answerformat = "images", "canpreview", or a list of file extensions
- Set a list of preferred file formats for the file selector. "images" is
a shorthand for .jpg,.gif,.png,.jpeg. "canpreview" is a shorthand for image
files, office files, and pdfs, which can be previewed inline. If listing
file extensions, provide a comma separated list with leading periods, like
".pdf,.docx,.doc"
- $readerlabel = string
- A string that will be used as a visually hidden label on the input box for screenreaders.
- $answerbox (In Question Text)
- Using the variable $answerbox in the Question Text will place the file upload box in that location
- $showanswer
- The answer to show to students (if option if available).
- $hidetips = true
- Hides the question entry tips that display by default.
This should only be used when a question type is being used in an unintentional way,
or if the question type gives away critical info to the student.
Multipart
This type of question can contain multiple parts, where each part is one of the previous question types.
Required Variables
- $anstypes = an array or list of answer types
- Defines the answer type for each part. Example:
$anstypes = array("number","number","choices")
Refer to this list for the short names of each question type:
- Number: "number"
- Calculated: "calculated"
- Multiple Choice: "choices"
- Multiple Answer: "multans"
- Matching: "matching"
- Function/expression: "numfunc"
- Drawing: "draw"
- N-tuple: "ntuple"
- Calculated N-tuple: "calcntuple"
- Complex N-tuple: "complexntuple"
- Calculated Complex N-tuple: "calccomplexntuple"
- Algebraic N-tuple: "algntuple"
- Matrix: "matrix"
- Calculated Matrix: "calcmatrix"
- Complex Matrix: "complexmatrix"
- Calculated Complex Matrix: "calccomplexmatrix"
- Algebraic Matrix: "algmatrix"
- Complex: "complex"
- Calculated Complex: "calccomplex"
- Interval: "interval"
- Calculated Interval: "calcinterval"
- Chemical Equation: "chemeqn"
- Chemical Molecule Drawing: "molecule"
- Essay: "essay"
- File Upload: "file"
- String: "string"
- Question part variables
- For each question part, you will need to define the variables (like $answer, $questions, etc.) you would normally
need to define. However, you will need to suffix the variable with a part designator. For example, based on $anstypes
above, the first answer is a number. Instead of $answer = 5, enter $answer[0] = 5. This designates that this answer belongs
to the first element of $anstypes. Likewise, to set the variables for the "numfunc" type, you'd set $variables[5] = "x".
Note that if you do not index the variable, it will apply to all parts. See $defaults below for more info and other
options.
- $answerbox[partnum] (In Question Text)
- The array $answerbox will contain the entry boxes for each answer type. In the question text, you will need to position
these boxes within the question. For example: "Enter a number: $answerbox[0]. Now a function: $answerbox[1]". Alternatively, you
can use [AB#]: "Enter a number: [AB0]. Now a function: [AB1]"
Optional Variables
- $answeights = an array or list of weights for each question
- By default the points for a problem are divided evenly over the parts. Use this option if you wish to weight parts
differently. Example: $answeights = array(.2,.3,.5). Best practice is to use percents, but if other values are used, they will
be converted to percents.
- $scoremethod = "singlescore" or "allornothing"
- Instead of recording individual scores for each question part, these will cause a single score to be
recorded for the question. "singlescore" totals the individual part scores, while "allornothing"
will only give full credit or no credit. If you need to specify per-part indexed
scoremethod values as well, you can define this as the array value
$scoremethod['whole'] instead.
- Question part options
- You can define any optional variable for each question part. Like above, suffix the variable with the part designator.
- $defaults
- To set an optional variable to the same value for every question part, you can simply specify
it without index, like
$reqdecimals=1, and it will apply to all parts.
But if you do this, you can't set an indexed value for one one/some parts.
If you want to change the default value for most parts but have a different value for some, set
$defaults['variable'] = value, like $defaults['answerboxsize'] = 5,
and that will change the default value for that variable, and you can still override that
default for specific parts, like $answerboxsize[2]=3. Be aware that using
$defaults will generally apply the variable for ALL parts, which may cause some unexpected behavior.
Note that defaults for abstolerance or reltolerance will not be applied to Drawing question parts, since
those variables have special meaning in that context.
- $showanswer
- You can either define $showanswer for individual question parts (ie, $showanswer[1]="`x^2`"), or you can set one
$showanswer, which will be the only answer shown for the problem (ie, $showanswer = "x=$answer[0], y=$answer[1]")
- $showanswerloc (In Question Text)
- Optionally, you can use $showanswerloc to place a single $showanswer "Show Answer" button,
or $showanswerloc[part] to place "Show Answer" buttons for each part. You can also use short tags
of the form [SAB] or [SABn] (like [SAB2]). Note that if you use this to place one
Show Answer button, you must place all of them, or else the remainder will not show. Use $showanswerstyle = 'inline' to
allow Show Answer to be placed inline with text rather than on its own line.
- [SAB#] (In Detailed Solution)
- To include the generated "show answer" values in the detailed solution, you can use short
tags like [SAB2]. Note that this will place the "show answer" directly, not wrapped in a
button like in question text.
Scaffolding
Scaffolded questions, also know as Sequential Multipart questions, allow you
to break a question up into chunks, where the second chunk only shows after the
first chunk is correctly answered or the student runs out of tries. This
allows you to use the answer to the first chunk in the second without
"giving away" the answer, and allows a student who gets stuck on the first
chunk to move on to the rest of the question.
Note: scaffolding is only available in the new assessment interface.
If you are using the old interface, the question will behave like a
regular multipart question.
Scaffolded questions are an extension of Multipart questions. To turn a multipart
question into a scaffolded question, just add an isolated line with three or more slashes
in the Question Text where you want the chunks broken apart.
An example: (in the Question Text)
To simplify $a(x+$b) + $c, first we need to distribute:
$a(x+$b) = $answerbox[0]
///
Next, combine like terms:
$a x + $ab + $c = $answerbox[1]
Conditional
A variation on multipart questions, a conditional question can include multiple answer boxes, but assigns
a single score. The score is based on applying some comparison or conditional test to the student answers, referenced through
the
$stuanswers array. This allows the question writer to essentially create their
own question type.
Required Variables
- $anstypes = an array or list of answer types
- Defines the answer type for each part. Example: $anstypes = "number,number". See the Multipart help above
for the list of short names
- $answer = any of these:
-
- A boolean (true/false) expression: Something that evaluates to true or false.
Example: $answer = ($a>3)
Example: $answer = comparefunctions($f,'x^2') && ($a!=0)
- A single numerical value in the interval [0,1]: will award that percentage of the total possible points.
- array('function',$a,$b): Will compare the functions $a and $b and mark the question correct if they
are equivalent. Can set $variables, $reltolerance, $abstolerance, and $domain as needed, like with Function type
questions
- array('number',$a,$b): Will compare the numbers or numerical expressions $a and $b and mark the question correct if they
are equivalent. Can set $reltolerance or $abstolerance as needed, like with Number/Calculated type
questions
- Multiple comparisons: You can mix the two types above by creating an array of comparisons. All must be true
for the question to be marked correct.
Example: $answer = array($a>3, array('function',$b,c), array('number',evalfunc($b,$a),5))
- Question part variables
- For each question part, you will need to define the variables (like $questions, etc.) you would normally
need to define, except you should not define an $answer. However, you will need to suffix the variable with
a part designator. For example, based on $anstypes
above, the first answer is a number. Instead of $displayformat = "select", enter $displayformat[0] = "select".
This designates that this setting belongs
to the first element of $anstypes.
- $answerbox[partnum] (In Question Text)
- The array $answerbox will contain the entry boxes for each answer type. In the question text, you will need to position
these boxes within the question. For example: "Enter a number: $answerbox[0]. Now a function: $answerbox[5]"
Optional Variables
- Question part options
- You can define any optional variable for each question part. Like above, suffix the variable with the part designator.
Note that $variables, $domain, $reltolerance, and $abstolerance may be used for the comparison, and should not be set for
individual parts.
- $showanswer
- By default the $showanswer for conditional types is "Answers may vary". Set $showanswer to override this.
Scaffolding
While not as simple as scaffolding multipart questions,
you can add scaffolding to a Conditional question. As with multipart,
put an isolated line with three slashes in the question text to indicate
where the breaks occur. Then you will need to set $seqPartDone[pn]
to true for each part index once that part should be considered
completed. The scaffolding will move onto the next chunk when
all parts in the previous chunk have $seqPartDone
set to true.