summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-05-10 22:31:13 +0000
committerKarl Berry <karl@freefriends.org>2024-05-10 22:31:13 +0000
commit7ddb3773785cf4edc07a789e7de5379f50c2c47a (patch)
treec59b016deec204478c98a4d6424b55c1ffb7f64a
parentd6f9d4fa306a12d02ed079390ada9b5e4164b1c6 (diff)
ximera (9may24)
git-svn-id: svn://tug.org/texlive/trunk@71226 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/ximera/LICENSE339
-rw-r--r--Master/texmf-dist/doc/latex/ximera/README.md62
-rw-r--r--Master/texmf-dist/doc/latex/ximera/installingLocally.md91
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/abstract.dtx14
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/activity.dtx158
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/answer.dtx111
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/banner.dtx21
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/choice.dtx226
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/clearEnv.dtx18
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/dialogue.dtx28
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/ending.dtx20
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/enumerate.dtx10
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/feedback.dtx72
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/foldable.dtx76
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/footnotes.dtx63
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/freeresponse.dtx60
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/graded.dtx20
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/hideEnv.dtx36
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/hints.dtx53
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/html.dtx20
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/hyperref.dtx12
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/image.dtx60
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/instructornotes.dtx101
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/desmos.dtx14
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/geogebra.dtx27
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/google.dtx26
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/graph.dtx14
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/include.dtx22
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/javascript.dtx31
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/sagemath.dtx43
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/interactives/video.dtx21
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/jax.dtx115
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/labels.dtx15
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/leash.dtx18
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/link.dtx31
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/logo.dtx30
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/macros.dtx14
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/makeCounter.dtx37
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/metadata.dtx32
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/only.dtx38
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/options.dtx123
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/optionsxourse.dtx27
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/outcomes.dtx34
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/packages.dtx54
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/pagesetup.dtx55
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/problem.dtx197
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/proof.dtx10
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/sectioning.dtx49
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/solution.dtx30
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/suppress.dtx33
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/textcolor.dtx20
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/theorems.dtx174
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/tikzexport.dtx42
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/title.dtx122
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/ungraded.dtx22
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/utilitymacros.dtx45
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/verbatim.dtx36
-rw-r--r--Master/texmf-dist/doc/latex/ximera/src/xkcd.dtx13
-rw-r--r--Master/texmf-dist/doc/latex/ximera/ximera.pdfbin0 -> 321122 bytes
-rw-r--r--Master/texmf-dist/source/latex/ximera/Makefile50
-rw-r--r--Master/texmf-dist/source/latex/ximera/ximera.dtx362
-rw-r--r--Master/texmf-dist/source/latex/ximera/ximera.ins211
-rw-r--r--Master/texmf-dist/tex/latex/ximera/pgfsys-ximera.def62
-rw-r--r--Master/texmf-dist/tex/latex/ximera/ximera.4ht360
-rw-r--r--Master/texmf-dist/tex/latex/ximera/ximera.cfg183
-rw-r--r--Master/texmf-dist/tex/latex/ximera/ximera.cls1112
-rw-r--r--Master/texmf-dist/tex/latex/ximera/xourse.4ht100
-rw-r--r--Master/texmf-dist/tex/latex/ximera/xourse.cls154
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check3
-rw-r--r--Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/ximera.tlpsrc0
71 files changed, 5882 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/ximera/LICENSE b/Master/texmf-dist/doc/latex/ximera/LICENSE
new file mode 100644
index 00000000000..d7f10513978
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/LICENSE
@@ -0,0 +1,339 @@
+GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {description}
+ Copyright (C) {year} {fullname}
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ {signature of Ty Coon}, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/Master/texmf-dist/doc/latex/ximera/README.md b/Master/texmf-dist/doc/latex/ximera/README.md
new file mode 100644
index 00000000000..73dddcbcfca
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/README.md
@@ -0,0 +1,62 @@
+Greetings! [![Build Status](https://travis-ci.org/XimeraProject/ximeraLatex.svg?branch=master)](https://travis-ci.org/XimeraProject/ximeraLatex)
+==========
+
+In this repository, we hope to supply potential authors of Ximera
+activities with the LaTeX document classes they need to write Ximera
+documents.
+
+To install the XimeraLaTeX package, see:
+
+[Installing Locally](./installingLocally.md)
+
+For a list of different Ximera commands, see:
+
+[Examples of Ximera Envrionments](https://ximera.osu.edu/tester/exampleActivityCollection)
+
+
+Since Ximera is built on LaTeX source, we want to use LaTeX as a
+method of validating the code authors write. Hence, if you want to
+write a Ximera online activity, the first step is constructing LaTeX
+documents.
+
+Once you have the LaTeX documents, and you have checked them for
+typos, accuracy, etc, the fact that they compile should be reasonable
+evidence that they will display correctly in Ximera.
+
+
+
+Contents of the repository
+---------------------------
+
+* This README.md file.
+
+* The GNU license.
+
+* The Ximera document class, ximera.cls
+
+* The Xourse document class, xourse.cls
+
+* Documentation for the document classes above, ximeraLaTeX.pdf
+
+* The Ximera documented LaTeX file type, ximera.dtx. This file
+ generates ximera.cls, xourse.cls, and ximeraLaTeX.pdf, as well as a
+ few other files.
+
+
+Staying up-to-date
+------------------
+
+While we hope to solidify the ximera.cls file, at this point we are
+still in development stages.
+
+To keep your file up-to-date, you may need to periodically sync or
+pull the the ximera.cls within the ximeraLatex directory.
+
+`ximeraLatex$ git fetch --all`
+
+`ximeraLatex$ git reset --hard origin/master`
+
+will reset your ximeraLatex directory. Note it will also overwrite
+*any* modifications you have made in this directory. You should not be
+building your activities in this directory.
+
diff --git a/Master/texmf-dist/doc/latex/ximera/installingLocally.md b/Master/texmf-dist/doc/latex/ximera/installingLocally.md
new file mode 100644
index 00000000000..7c1005e108b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/installingLocally.md
@@ -0,0 +1,91 @@
+# Installing Locally
+
+To get started as an author in Ximera, all you need is the XimeraLaTeX
+LaTeX Package. Unfortunately, at this point, this package is not part
+of CTAN. However, you can install it manually with the instructions
+below. Please feel free to contact Bart Snapp with questions
+(snapp.14@osu.edu).
+
+1. Get a GitHub account
+2. Go to: [XimeraLaTeX on GitHub](https://github.com/XimeraProject/ximeraLatex)
+3. Click on the green code button: ![Click on the green code button.](https://github.com/XimeraProject/.github/blob/main/profile/codeButton.png "Click on the green code button.") and copy the code, (or just copy: `git@github.com:XimeraProject/ximeraLatex.git`)
+4. Clone the repository.
+
+At this point the installation becomes operating-system specific.
+
+## Linux
+
+If you are running linux, create the local directory structure `~/texmf/tex/latex`
+
+├── texmf
+
+├───└── tex
+
+└───────└── latex
+
+Now move the `ximeraLatex` folder (cloned in step 4. above) into the latex folder. At this point you have installed XimeraLaTeX! You can test your installation by compiling:
+```
+\documentclass{ximera}
+\begin{document}
+\begin{problem}
+Hello $\answer[format=string]{World}$
+\end{problem}
+\end{document}
+```
+
+## MacOS
+
+If you are running MacOS, create the local directory structure `~/Library/texmf/tex/latex`. To do this, you'll need to make your Library folder visible, see [How to make your Library folder visible in the Finder](http://kb.mit.edu/confluence/display/istcontrib/How+to+make+your+Library+folder+visible+in+the+Finder+in+OS+X+10.9+%28Mavericks%29+or+later).
+
+├── Library
+
+├───└── texmf
+
+├───────└── tex
+
+└───────────└── latex
+
+Now move the `ximeraLatex` folder (cloned in step 4. above) into the latex folder. At this point you have installed XimeraLaTeX! You can test your installation by compiling:
+```
+\documentclass{ximera}
+\begin{document}
+\begin{problem}
+Hello $\answer[format=string]{World}$
+\end{problem}
+\end{document}
+```
+
+
+## Windows
+
+If you are running Windows, create the local directory structure `C:\localtexmf\tex\latex\`
+
+├── C:
+
+├───└── localtexmf
+
+├───────└── tex
+
+└───────────└── latex
+
+Now move the `ximeraLatex` folder (cloned in step 4. above) into the latex folder.
+
+For MiKteX to notice this directory, go to:
+
+* Start → All programs → MiKTeX Folder → Maintenance (Admin) Folder → Settings (Admin).
+* Now select the tab “Roots.”
+* Click “Add” because you are going to add a path.
+* Find `C:\localtexmf\` and click “OK.”
+* Click “apply” then “OK.”
+* Reopen Miktex Settings (Admin). Click **Refresh FNDB.**
+
+The steps above will vary between systems. However, the key steps are **adding the path** and **Refreshing FNDB.**
+At this point you have installed XimeraLaTeX! You can test your installation by compiling:
+```
+\documentclass{ximera}
+\begin{document}
+\begin{problem}
+Hello $\answer[format=string]{World}$
+\end{problem}
+\end{document}
+```
diff --git a/Master/texmf-dist/doc/latex/ximera/src/abstract.dtx b/Master/texmf-dist/doc/latex/ximera/src/abstract.dtx
new file mode 100644
index 00000000000..2a895568d34
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/abstract.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Abstract}
+% \DescribeEnv{abstract}{Every activity should include a short abstract.}
+% \begin{macrocode}
+%<*classXimera>
+\let\abstract\relax
+\let\endabstract\relax
+% Use of environ package, may want to find a better way.
+\NewEnviron{abstract}{\protected@xdef\theabstract{\BODY}}
+%</classXimera>
+% \end{macrocode}
+% The abstract has been stored in |\theabstract| and should be emitted
+% as a div, but confusingly I guess |<div class="abstract">| is
+% defined somewhere deeper inside tex4ht, so the code below is
+% probably unnecessary. \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/ximera/src/activity.dtx b/Master/texmf-dist/doc/latex/ximera/src/activity.dtx
new file mode 100644
index 00000000000..647be0565d8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/activity.dtx
@@ -0,0 +1,158 @@
+% \subsection{Activities}
+% The core of the |xourse| system. It works by redefining the
+% |document| environment, thus making the |\begin| and
+% |\end{document}| of the subfile `transparent' to the
+% inclusion. The redefinition of |\documentclass| is analogous, just
+% having a required and an optional arguments which mean nothing to
+% |\subfile|.
+% \begin{macrocode}
+%<*classXourse>
+\newcommand{\skip@preamble}{%
+ \let\document\relax\let\enddocument\relax%
+ \newenvironment{document}{\let\input\otherinput}{}%
+ \renewcommand{\documentclass}[2][subfiles]{}}
+% \end{macrocode}
+% Note that the new command |\subfile| calls for |\skip@preamble| \emph{within a group}. The changes to |document| and |\documentclass| are undone after the inclusion of the subfile.
+%
+% Numbering starts a page too soon without this:
+% \begin{macrocode}
+\let\otherinput\input
+% \end{macrocode}
+% Store usual |\maketitle| as |\othermaketitle|
+% \begin{macrocode}
+\let\othermaketitle\maketitle
+% \end{macrocode}
+% \DescribeMacro{\maketitle}{In a \textsf{xourse} file, |\maketitle| is redefined to give course packet title page and toc.}
+% \begin{macrocode}
+\renewcommand{\maketitle}{ %
+\pagestyle{empty}
+\begin{center}
+~\\ %puts space at top of page to move title down.
+\vskip .25\textheight
+\hrulefill\\
+\vskip 1em
+\bfseries{\Huge \@title} \\
+\hrulefill\\
+\vskip 3em
+{\Large \@author}
+\vskip 2em
+{\large \@date}
+\end{center}
+\clearpage
+% \end{macrocode}
+% When |notoc| option is used, we do not include a table of contents.
+% Otherwise we include a table of contents in every course packet.
+% \begin{macrocode}
+\ifnotoc
+\else
+ \tableofcontents\clearpage
+ \clearpage
+\fi
+% \end{macrocode}
+% Switch to main pagestyle, just like a document with documentclass \textsf{ximera}.
+% \begin{macrocode}
+\pagestyle{main}
+% \end{macrocode}
+% Renew maketitle to usual definition.
+% \begin{macrocode}
+\let\maketitle\othermaketitle
+% \end{macrocode}
+% And we finish with our redefinition of |\maketitle|.
+% \begin{macrocode}
+}
+\relax
+%</classXourse>
+% \end{macrocode}
+
+% \subsubsection{Regular activities}
+% \DescribeMacro{\activity}{Documents included with |\activity| will
+% be included in the body of the xourse document. Any |\input|
+% commands within included \textsf{ximera} documents will be ignored.
+% Any |\usepackage| commands within included ximera documents will
+% cause an error. Overlapping |\newcommand| definitions within
+% multiple ximera documents included simultaneously will cause an
+% error.} The |\activity| command inputs the file name provided
+% without |\documentclass|, without
+% |\begin{document}|/|\end{document}| and without any inputs in the
+% preamble of the included file.
+% \begin{macrocode}
+%<*classXourse>
+\ifnonewpage
+\newcommand{\activity}[2][]{%
+ \setkeys{activity}{#1}
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup\par\vspace{\topsep}
+ \let\input\otherinput}
+\else
+\newcommand{\activity}[2][]{%
+ \setkeys{activity}{#1}
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup\clearpage
+ \let\input\otherinput}
+\fi
+\relax
+%</classXourse>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXourse>
+\renewcommand\activity[2][]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<a class="activity card \activitystyle" href="#2" data-options="#1">#2</a>}\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
+
+% When running xake, we can just ignore activities
+% \begin{macrocode}
+%<*classXourse>
+\ifxake
+\renewcommand\activity[2][]{}
+\fi
+%</classXourse>
+% \end{macrocode}
+
+
+% \subsubsection{Practice activities}
+% \DescribeMacro{\practice}{Like |\activity| but not expecting a title.}
+% \begin{macrocode}
+%<*classXourse>
+\ifhandout
+\newcommand{\practice}[2][]{
+ \setkeys{practice}{#1}%!!!!!
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup
+ \let\input\otherinput}
+\else
+\newcommand{\practice}[2][]{\texttt{\detokenize{#2}}%% gives file name for practice
+ \setkeys{practice}{#1}%!!!!!
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup
+ \let\input\otherinput}
+\fi
+\relax
+%</classXourse>
+% \end{macrocode}
+
+% The practice environment does nothing, but will eventually produce
+% exercises at the end of an activity
+% \begin{macrocode}
+%<*classXourse>
+\ifxake
+\renewcommand\practice[2][]{}
+\fi
+%</classXourse>
+% \end{macrocode}
+
+% I suppose it is reasonable for practice cards to NOT have an activitystyle, since the activitystyle is basically PRACTICE.
+% \begin{macrocode}
+%<*htXourse>
+\renewcommand\practice[2][]{%
+ \ifvmode\IgnorePar\fi\EndP%
+ \HCode{<a class="activity card practice" href="#2" data-options="#1">#2</a>}%
+ \IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
+
+
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/answer.dtx b/Master/texmf-dist/doc/latex/ximera/src/answer.dtx
new file mode 100644
index 00000000000..c6f5460d054
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/answer.dtx
@@ -0,0 +1,111 @@
+% \subsubsection{Answers}
+% \DescribeMacro{\answer}{A math answer}
+% \begin{macrocode}
+%<*classXimera>
+
+\ifdefined\HCode
+\newcommand{\recordvariable}[1]{}
+\else
+\newwrite\idfile
+\immediate\openout\idfile=\jobname.ids
+\newcommand{\recordvariable}[1]{\ifthenelse{\equal{#1}{}}{}{\immediate\write\idfile{var #1;}}}
+\fi
+% \end{macrocode}
+% Determines if answer is shown in handout mode. when |given=true|,
+% show answer in handout mode, show answer in ``given box'' outside
+% handout mode. When |given=false|, do not show answer in handout
+% mode, show answer outside handout mode
+% \begin{macrocode}
+\define@key{answer}{given}[true]{\def\ans@given{#1}}
+% \end{macrocode}
+% Used for setting numeric answer tolerance for online student input.
+% \begin{macrocode}
+\define@key{answer}{tolerance}{\def\ans@tol{#1}}
+% \end{macrocode}
+% Used to run dynamic js code on student provided answers. Note:
+% currently pdf outputs the validator code itself.
+% \begin{macrocode}
+\define@key{answer}{validator}{}
+% \end{macrocode}
+% Used for assigning a js ID to answer for dynamic code (eg validators).
+% \begin{macrocode}
+\define@key{answer}{id}{\def\ans@id{#1}}
+% \end{macrocode}
+% Used to set anticipated input format; eg "string".
+% \begin{macrocode}
+\define@key{answer}{format}{}
+% \end{macrocode}
+% Used to hide the answer input box on the web.
+% \begin{macrocode}
+\define@key{answer}{onlinenoinput}[false]{}
+% \end{macrocode}
+% Used to add a `show answer' button to the answer blank.
+% \begin{macrocode}
+\define@key{answer}{onlineshowanswerbutton}[false]{}
+% \end{macrocode}
+% Set default values for |\answer| command |key=value| pairs.
+% Default values are |given = false|.
+% \begin{macrocode}
+\setkeys{answer}{id=,given=false,onlinenoinput=false,onlineshowanswerbutton=false}
+% \end{macrocode}
+% Basic code for |\answer|.
+% \begin{macrocode}
+
+% Options for handout
+\newcommand{\answerFormatLength}{2cm}
+
+\newcommand{\answerFormatDots}[1]{\ldots\ldots}
+\newcommand{\answerFormatLine}[1]{\protect\rule{\answerFormatLength}{0.4pt}}
+\newcommand{\answerFormatFlexibleLine}[1]{\protect\rule{\widthof{$#1$}*2}{0.4pt}}
+\newcommand{\answerFormatFlexibleBox}[1]{\fbox{\scalebox{2}{\phantom{$#1$}}}}
+
+% options for default (i.e with answers filled in)
+\newcommand{\answerFormatPlain}[1]{\ensuremath{#1}}
+\newcommand{\answerFormatBlue}[1]{\color{blue}\ensuremath{#1}}
+\newcommand{\answerFormatBoxed}[1]{\fbox{\ensuremath{#1}}}
+\newcommand{\answerFormatBoxedGiven}[1]{\underset{\scriptstyle\mathrm{given}}{\fbox{\ensuremath{#1}}}}
+
+% defaults for handout and default mode, and for \answer[given]
+\let\handoutAnswerFormat\answerFormatDots
+\let\defaultAnswerFormat\answerFormatBlue
+\let\givenAnswerFormat\answerFormatBoxedGiven
+
+\newcommand{\answer}[2][]{%
+ \ifmmode%
+ \setkeys{answer}{#1}%
+ \recordvariable{\ans@id}
+ \ifthenelse{\boolean{\ans@given}}
+ {% Start then statement
+ \ifhandout
+ #2
+ \else
+ \givenAnswerFormat{#2} %% in case the argument helps formatting
+ \fi
+ }% End then statement
+ {% Start else statement
+ \ifhandout
+ \handoutAnswerFormat{#2} %% in case the argument helps formatting
+ \else% show answer in box outside handout mode
+ \defaultAnswerFormat{#2} %% in case the argument helps formatting
+ \fi
+ }% End else statement
+ \else%
+ \GenericError{\space\space\space\space}% Throw an error based on... something? -- Jason
+ {Attempt to use \@backslashchar answer outside of math mode}
+ {See https://github.com/ximeraProject/ximeraLatex for explanation.}
+ {Need to use either inline or display math.}%
+ \fi
+}
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, |\answer| emits spans---but it is usually just
+% handled directly by MathJax.
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\answer}[2][false]{\HCode{<span class="answer respondable">}#2\HCode{</span>}}
+
+\def\validator[#1]{\stepcounter{identification}\HCode{<div class="validator" id="validator\arabic{identification}"><script type="text/javascript">function validator\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script>}}
+\def\endvalidator{\HCode{</div>}}
+
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/banner.dtx b/Master/texmf-dist/doc/latex/ximera/src/banner.dtx
new file mode 100644
index 00000000000..ec5d62b2835
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/banner.dtx
@@ -0,0 +1,21 @@
+% \begin{macrocode}
+%<*classXimera>
+\let\m\message
+\def\w{\m{::}}\def\t{\m{:::}}\def\s{\m{ }}\def\n{\m{^^J}}\def\u{::'}\def\d{'::}\def\v{:::::}
+\n
+\m{\d.}\s\m{.\u}\w\m{}\m{\v}\s\s\m{\v}\m{}\m{.\v\v\v::::.}\s\m{}\t\n
+\s\m{\d.\u}\s\w\t\t\s\t\t\w\m{}\s\s\s\s\s\s\s\t\s\m{\u::}\n
+\s\s\t\s\s\w\t\m{}\t\t\m{}\t\m{ ::::\v}\m{.\v:\u}\m{}\m{\u}\m{\d}\n
+\s\m{.\u::.}\s\w\t\m{}\t\t\m{}\t\w\s\s\s\s\w\m{}\m{\d.}\s\m{\u}\s\m{\d}\n
+\m{.\u}\s\m{\d.}\w\t\s\m{':\u}\s\t\m{\d\v::}\w\s\m{}\m{\d.\u}\s\s\m{\d}\n
+\n
+\let\w\undefined
+\let\t\undefined
+\let\s\undefined
+\let\n\undefined
+\let\u\undefined
+\let\d\undefined
+\let\v\undefined
+\let\m\undefined
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/choice.dtx b/Master/texmf-dist/doc/latex/ximera/src/choice.dtx
new file mode 100644
index 00000000000..70770cd24e7
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/choice.dtx
@@ -0,0 +1,226 @@
+% \subsubsection{Multiple choice and the like}
+% \DescribeEnv{multipleChoice}{Multiple choice}
+% \begin{macrocode}
+%<*classXimera>
+% Jim: Originally this was \renewcommand{\theenumi}{$(\mathrm{\alph{enumi}})$}
+% but that breaks tex4ht because mathmode can only be processed by mathjax.
+% so now I made this just italicized.
+% \end{macrocode}
+% \subsubsection{Options}
+% \begin{macrocode}
+\define@key{choice}{value}[]{\def\choice@value{#1}}
+% \end{macrocode}
+% This flags the answer as the correct answer
+% \begin{macrocode}
+\define@boolkey{choice}{correct}[true]{\def\choice@correct{#1}}
+% \end{macrocode}
+% Use an ID to refer to the choice.
+% \begin{macrocode}
+\define@key{multipleChoice}{id}{\def\mc@id{#1}}
+% \end{macrocode}
+% |\otherchoice| outputs the item if correct and nothing if incorrect.
+% \begin{macrocode}
+\define@key{otherchoice}{value}[]{\def\otherchoice@value{#1}}
+\define@boolkey{otherchoice}{correct}[true]{\def\otherchoice@correct{#1}}
+% \end{macrocode}
+% Default key choices for multiple choice options.
+% Default for choice pairs.
+% Default: answers without the option "correct=true" is "incorrect".
+% \begin{macrocode}
+\setkeys{choice}{correct=false,value=}
+% \end{macrocode}
+% Defaults for multipleChoice pairs.
+% Default to no id? -- Jason
+% \begin{macrocode}
+\setkeys{multipleChoice}{id=}
+% \end{macrocode}
+% Defaults for otherchoice pairs.
+% Default "otherchoice" to behave like "choice" for error checking.
+% \begin{macrocode}
+\setkeys{otherchoice}{correct=false,value=}
+%</classXimera>
+% \end{macrocode}
+%
+% \subsubsection{Choices}
+% \DescribeMacro{\choice}{Like |\item| but for choice environments.}
+% choice command denotes a possible answer choice for the multiple choice question.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\choice}[2][]{%
+\setkeys{choice}{#1}%
+\item{#2}
+\ifthenelse{\boolean{\choice@correct}}
+ {% Begin then result
+ \ifhandout% if it's a handout do nothing.
+ \else% otherwise place a checkmark when you select the "correct choice"... maybe? -- Jason
+ \,\checkmark\,\setkeys{choice}{correct=false}
+ \fi
+ }% End then result
+ {}% Begin/End else result.
+}
+
+%Define an expandable version of choice Not really meant to be used outside this package (used in wordChoice)
+% Is there a reason we can't just always use this as default? -- Jason
+\newcommand{\choiceEXP}[2][]{%
+ \expandafter\setkeys\expandafter{choice}{#1}%
+ \item{#2}
+ \ifthenelse{\boolean{\choice@correct}}
+ {% Begin then result
+ \ifhandout
+ \else
+ \,\checkmark\,\setkeys{choice}{correct=false}
+ \fi
+ }% End then result
+ {}% Begin/End else result.
+ } %% note all the {} are needed in case the choice has [] in it.
+
+% \otherchoice is the \choice used in wordChoice command.
+\newcommand{\otherchoice}[2][]{%
+\ignorespaces%
+\setkeys{otherchoice}{#1}%
+\ifthenelse{\boolean{\otherchoice@correct}}%
+{% Start then result
+#2\ignorespaces\setkeys{otherchoice}{correct=false}\ignorespaces%
+}% End then result
+{}% Start/End else result
+\ignorespaces%
+}%
+\newcommand{\inlinechoice}[2][]{%
+\setkeys{choice}{#1}%
+\iffirstinlinechoice
+(\hspace{-.25em}
+\firstinlinechoicefalse
+\else
+/
+\fi
+#2
+\ifthenelse{\boolean{\choice@correct}}%
+{% Start then result
+\ifhandout\else\checkmark\ignorespaces\setkeys{choice}{correct=false}\ignorespaces\fi%
+}% End then result
+{}% Start/End else result
+\hspace{-.25em}\ignorespaces%
+}
+
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, |\choice| emits |<span>|s.
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{choiceId}
+\renewcommand{\choice}[2][]{%
+\setkeys{choice}{correct=false}%
+\setkeys{choice}{#1}%
+\stepcounter{choiceId}\IgnorePar%
+\HCode{<span class="choice }%
+\ifthenelse{\boolean{\choice@correct}}{\HCode{correct}}{}
+\HCode{" }
+\ifthenelse{\equal{\choice@value}{}}{}{\HCode{data-value="\choice@value" }}
+\HCode{id="choice\arabic{choiceId}">}%
+#2\HCode{</span>}}
+\let\inlinechoice\choice
+%</htXimera>
+% \end{macrocode}
+
+% \subsubsection{Environment(s)}
+% The environment |multipleChoice@| is for internal use only.
+% \DescribeEnv{multipleChoice}{Wrap |\choice|s in a |multipleChoice| environment to make a multiple choice question.}
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{multipleChoice}[1][]
+ {% Environment Start Code
+ \setkeys{multipleChoice}{#1}%
+ \recordvariable{\mc@id}%
+ \begin{trivlist}
+ \item[\hskip \labelsep\small\bfseries Multiple Choice:]\hfil
+ \begin{enumerate}
+ }% Note this means that \item has to be the first line after \begin{multipleChoice}.
+ {% Environment End Code
+ \end{enumerate}
+ \end{trivlist}
+ }
+
+%multipleChoice@ is for internal use only! (used in wordChoice)
+%this is simply a wrapper for the sole showing (other)choice.
+\newenvironment{multipleChoice@}[1][]{}{)}
+%</classXimera>
+% \end{macrocode}
+
+
+
+% On the web, you might also expect these to be "problem environments"
+% but they aren't -- they're respondables. You might expect a
+% |\setcounter{choiceId}{0}| here --- that would be wrong, because then
+% the generated IDs would no longer be unique.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{multipleChoice}[1][]
+{\setkeys{multipleChoice}{#1}%
+\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="multiple-choice" }%
+\ifthenelse{\equal{\mc@id}{}}{}{\HCode{data-id="\mc@id" }}%
+\HCode{id="problem\arabic{identification}">}%
+}{\HCode{</div>}\IgnoreIndent}
+\ConfigureEnv{multipleChoice}{}{}{}{}
+%</htXimera>
+% \end{macrocode}
+
+% \subsection{Word choice}
+% \DescribeMacro{\wordChoice}{An in-line version of multipleChoice:
+% uses enumitem package note, it is coded as a single line to avoid
+% unwanted spaces in ``given'' mode.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\wordChoice}[1]{%
+\let\choicetemp\choice% Assign a "choicetemp" command to duplicate choice.
+\ifwordchoicegiven% If wordchoice option is on, we need to juggle around some definitions.
+\let\choice\otherchoice%
+%\begin{multipleChoice@}% -unnecessary (REMOVE THIS LINE IF THE YEAR IS 2019 or Beyond)
+#1
+%\end{multipleChoice@}% -unnecessary (REMOVE THIS LINE IF THE YEAR IS 2019 or Beyond)
+\else% If it isn't the regular "choice" command should work.
+\let\choice\inlinechoice%
+\begin{multipleChoice@}%
+#1%
+\end{multipleChoice@}%
+\fi%
+\let\choice\choicetemp% Now that choicetmp has been manipulated to what we want, replace choice with it.
+}%
+
+
+%</classXimera>
+% \end{macrocode}
+% This is actually just word choice
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{multipleChoice@}{\refstepcounter{problem}}{}%
+\ConfigureEnv{multipleChoice@}{\stepcounter{identification}\IgnorePar\HCode{<span class="word-choice" id="word-choice\arabic{identification}">}}{\HCode{</span>}\IgnoreIndent}{}{}
+%</htXimera>
+% \end{macrocode}
+
+% \subsection{Select all}
+% \DescribeEnv{selectAll}{A multiple-multiple choice question}
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{selectAll}[1][]
+{\begin{trivlist}\item[\hskip \labelsep\small\bfseries Select All Correct Answers:]\hfil\begin{enumerate}}
+ {\end{enumerate}\end{trivlist}}
+%</classXimera>
+% \end{macrocode}
+
+% In the future we need this to (optionally) be displayed in the
+% problem, while the actual code lives in the solution. Here is how
+% this could be implemented: Like the title/maketitle commands, the
+% multiple-choice could be stored in |\themultiplechoice|, flip a
+% boolean, and execute |\makemultiplechoice| at the |\end| of the
+% problem. We should also make a command called |\showchoices| that
+% will show choices in the handout.
+
+% On the web, |selectAll| is handled just like |multipleChoice|.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{selectAll}{\refstepcounter{problem}}{}%
+\ConfigureEnv{selectAll}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="select-all" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}
+%</htXimera>
+% \end{macrocode}
+
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/clearEnv.dtx b/Master/texmf-dist/doc/latex/ximera/src/clearEnv.dtx
new file mode 100644
index 00000000000..af906995d98
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/clearEnv.dtx
@@ -0,0 +1,18 @@
+% \subsubsection{clearEnv}
+% \DescribeMacro{clearEnv}{envName}
+% This macro allows you to delete an environment by redefining it as null. This also deletes any corresponding internal counter - such as those generated by "\newtheorem" command.
+% #1 is envName is the name of the environment you want to clear. This will (re)define the
+% begin and end environments, as well as the internal counter from \newtheoremenv to \relax.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\clearEnv}[1]{
+ %% Syntax: \clearEnv{envName}
+ % #1 is envName is the name of the environment you want to clear. This will (re)define the
+ % begin and end environments, as well as the internal counter from \newtheoremenv to \relax.
+ \expandafter\let\csname #1\endcsname\relax
+ \expandafter\let\csname end#1\endcsname\relax
+ \expandafter\let\csname c@#1\endcsname\relax
+ }
+%</classXimera>
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/dialogue.dtx b/Master/texmf-dist/doc/latex/ximera/src/dialogue.dtx
new file mode 100644
index 00000000000..b4b31580df3
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/dialogue.dtx
@@ -0,0 +1,28 @@
+% \subsubsection{Dialogues}
+% \DescribeEnv{dialogue}{A dialogue between people.}
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{dialogue}{%
+ \renewcommand\descriptionlabel[1]{\hspace{\labelsep}\textbf{##1:}}
+ \begin{description}%
+}{%
+ \end{description}%
+}
+%</classXimera>
+% \end{macrocode}
+% On the web, the resulting |<dl>| should have an appropriate |class| set.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{dialogue}{\begin{description}}{\end{description}}
+
+\ConfigureList{dialogue}%
+ {\EndP\HCode{<dl \a:LRdir class="dialogue">}%
+ \PushMacro\end:itm
+\global\let\end:itm=\empty}
+ {\PopMacro\end:itm \global\let\end:itm \end:itm
+\EndP\HCode{</dd></dl>}\ShowPar}
+ {\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
+ class="actor">}\bgroup \bf}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="speech">}}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/ending.dtx b/Master/texmf-dist/doc/latex/ximera/src/ending.dtx
new file mode 100644
index 00000000000..8f53a0fd276
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/ending.dtx
@@ -0,0 +1,20 @@
+% \subsubsection{The End}
+% It seems that some of the files need to conclude with something or another.
+% \begin{macrocode}
+%<*htXimera>
+\Hinput{ximera}
+%</htXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXourse>
+\Hinput{xourse}
+%</htXourse>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*cfgXimera>
+\begin{document}
+\EndPreamble
+%</cfgXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/enumerate.dtx b/Master/texmf-dist/doc/latex/ximera/src/enumerate.dtx
new file mode 100644
index 00000000000..7c37e9743e8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/enumerate.dtx
@@ -0,0 +1,10 @@
+% \subsubsection{Enumerate fixes}
+% Make enumerate use a letter
+% \begin{macrocode}
+%<*classXimera>
+\renewcommand{\theenumi}{\textup{(\alph{enumi})}}
+\renewcommand{\labelenumi}{\theenumi}
+\renewcommand{\theenumii}{\textup{(\roman{enumii})}}
+\renewcommand{\labelenumii}{\theenumii}
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/feedback.dtx b/Master/texmf-dist/doc/latex/ximera/src/feedback.dtx
new file mode 100644
index 00000000000..03d09770b86
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/feedback.dtx
@@ -0,0 +1,72 @@
+% \subsubsection{Feedback}
+% \DescribeEnv{feedback}{An initially hidden environment that uncovers itself at an appropriate time.}
+% New Validator rewrite code added by Jason Nowell. Original code
+% orovided by Jim Fowler Validator is an environment designed to run a
+% custom check on answers (usually) using javascript code.
+%
+% Define a placeholder command for validator and feedback.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\PH@Command}{}
+% \end{macrocode}
+% Validator should take an argument and detokenize it and display it
+% at the start of the environment. The original Validator environment
+% had everything framed in an mbox; presumably to make the text look
+% a bit nicer, although this seems redundant with |texttt|. It
+% shouldn't cause any harm so I have left it in for now.
+% \begin{macrocode}
+\newenvironment{validator}[1][]{
+ \def\PH@Command{#1}% Use PH@Command to hold the content and be a target for "\expandafter" to expand once.
+ \mbox{\texttt{\detokenize\expandafter{\PH@Command}}}% Now expand PH@Command once and then detokenize.
+ }{}
+% \end{macrocode}
+% First, if it's a handout, we want feedback to eat everything and
+% then disappear entirely. So we do this:
+% \begin{macrocode}
+\ifhandout%
+\newenvironment{feedback}
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+% \end{macrocode}
+% If this isn't a handout, then we want to display the Feedback by
+% using a label, positioned and formated as a |\item| in a
+% trivlist. It is important that we also detokenize the content of
+% the optional argument, as it is likely to contain javascript or
+% other code that latex won't be able to make sense of.
+% \begin{macrocode}
+\else
+% \end{macrocode}
+% \begin{macrocode}
+\newenvironment{feedback}[1][attempt]{
+
+ \def\PH@Command{#1}% Use PH@Command to hold the content and be a target for "\expandafter" to expand once.
+
+ \begin{trivlist}% Begin the trivlist to use formating of the "Feedback" label.
+ \item[\hskip \labelsep\small\slshape\bfseries Feedback% Format the "Feedback" label. Don't forget the space.
+ (\texttt{\detokenize\expandafter{\PH@Command}}):% Format (and detokenize) the condition for feedback to trigger
+ \hspace{2ex}]\small\slshape% Insert some space before the actual feedback given.
+ }{
+ \end{trivlist}
+ }
+
+\fi
+%</classXimera>
+% \end{macrocode}
+% Feedback environments take an optional parameter (which describes
+% when the feedback is to be provided)
+% \begin{macrocode}
+%<*htXimera>
+\def\feedback{\@ifnextchar[{\@feedbackcode}{\@feedbackattempt}}
+\def\@feedbackattempt{\@feedbackcode[attempt]}
+\def\@feedbackcode[#1]{\stepcounter{identification}%
+\ifvmode \IgnorePar\fi \EndP%
+\ifthenelse{\equal{#1}{attempt}}{\HCode{<div class="feedback" data-feedback="attempt" id="feedback\arabic{identification}">}}%
+{\ifthenelse{\equal{#1}{correct}}{\HCode{<div class="feedback" data-feedback="correct" id="feedback\arabic{identification}">}}%
+{\HCode{<div class="feedback" data-feedback="script" id="feedback\arabic{identification}"><script type="text/javascript">function feedback\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script>}}}}
+\def\endfeedback{\HCode{</div>}\IgnoreIndent}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/foldable.dtx b/Master/texmf-dist/doc/latex/ximera/src/foldable.dtx
new file mode 100644
index 00000000000..94c5eb36cb0
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/foldable.dtx
@@ -0,0 +1,76 @@
+% \subsubsection{Foldable}
+% The package \verb|mdframed| is used to make pretty foldable, but the
+% amsthm/mdframed conflict also messes up the .jax file so we don't
+% load mdframed when performing the xake step. But even the below
+% isn't enough to fix this.
+% \begin{macrocode}
+%\iftikzexport\else\RequirePackage[framemethod=TikZ]{mdframed}\fi
+% \end{macrocode}
+% \DescribeEnv{foldable}{Does it fold?}
+% \begin{macrocode}
+%<*classXimera>
+
+\colorlet{textColor}{black} % since textColor is referenced below
+\colorlet{background}{white} % since background is referenced below
+
+% The core environments. Find results in 4ht file.
+%% pretty-foldable
+%\iftikzexport
+\newenvironment{foldable}{%
+}{%
+}
+%\else
+%\renewmdenv[
+% font=\upshape,
+% outerlinewidth=3,
+% topline=false,
+% bottomline=false,
+% leftline=true,
+% rightline=false,
+% leftmargin=0,
+% innertopmargin=0pt,
+% innerbottommargin=0pt,
+% skipbelow=\baselineskip,
+% linecolor=textColor!20!white,
+% fontcolor=textColor,
+% backgroundcolor=background
+%]{foldable}%
+%\fi
+
+%% pretty-expandable
+%\iftikzexport
+\newenvironment{expandable}{%
+}{%
+}
+%\else
+%\newmdenv[
+% font=\upshape,
+% outerlinewidth=3,
+% topline=false,
+% bottomline=false,
+% leftline=true,
+% rightline=false,
+% leftmargin=0,
+% innertopmargin=0pt,
+% innerbottommargin=0pt,
+% skipbelow=\baselineskip,
+% linecolor=black,
+%]{expandable}%
+%\fi
+
+\newcommand{\unfoldable}[1]{#1}
+
+%</classXimera>
+% \end{macrocode}
+% On the web, these foldable elements could be HTML5 details and summary.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{foldable}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div id="foldable\arabic{identification}" class="foldable">}}{\HCode{</div>}\IgnoreIndent}
+
+\renewenvironment{expandable}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div data-original="expandable" id="foldable\arabic{identification}" class="foldable">}
+
+}{\HCode{</div>}\IgnoreIndent}
+
+\renewcommand{\unfoldable}[1]{\HCode{<span class="unfoldable">}#1\HCode{</span>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/footnotes.dtx b/Master/texmf-dist/doc/latex/ximera/src/footnotes.dtx
new file mode 100644
index 00000000000..cd37a086e4f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/footnotes.dtx
@@ -0,0 +1,63 @@
+% \subsection{How to handle footnotes in this setting.}
+% \DescribeMacro{\footnote}{% Written by Jason Nowell Standard Footnotes in pdf, but expandable parenthetical online. Supports different coloring by using |\colorlet{fncolor}{COLOR}| and setting COLOR to whatever color you want (Default is blue).}%
+%
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{footnoteNum}% This will track footnote numbering for the superscript and for the ID.
+\colorlet{fncolor}{red!30!blue}% This is the footnote text coloring. This will allow users to renew this coloring to their own preference if they want to. The default here is a blue coloring. NOTE: Currently; trying to use `footnotecolor' (as a more descriptive color name) breaks everything on my system pretty spectacularly for some reason. This may be just mine or a clash somewhere in the ximera package, so for now I'm leaving it as `fncolor'.
+\renewcommand{\footnote}[1]{\ifvmode\ShowPar\fi
+ \stepcounter{footnoteNum}% Step the counter to make a new footnote
+ %% The following HCode should setup the javascript function that shows or hides the footnote. If you want to change the footnote location, you may want to change the 'inline' part of x.style.display = 'inline'; to another CSS display type, like 'block' or 'inherit'. Current the `x.display.color' seems to not be working.
+ \HCode{
+ <script type="text/javascript">
+ function footnotefunction(ID) {
+ var x = document.getElementById(ID);
+ if (x.style.display === "none") {
+ x.style.color = "blue";
+ x.style.display = "inline";
+ } else {
+ x.style.display = "none";
+ }
+ }
+ </script>
+ }
+ %% The next command needs \expandafter in order to expand the counter footnoteNum into a roman character for the footnote ID. These seem to work better than arabic numerals in some cases, although why is not clear.
+ %% The next HCode controls the formatting for the actual footnote reference number (ie the superscript), but not the footnote itself.
+ \expandafter\HCode{
+ <span style=
+ "position=relative;
+ vertical-align=baseline;"
+ >
+ <button onclick="footnotefunction('footnote\roman{footnoteNum}')"
+ style=
+ "background:none!important;
+ color:inherit;
+ border:none;
+ padding:0!important;
+ font: inherit;
+ cursor: pointer;"
+ >
+ <sup>}[\arabic{footnoteNum}]\HCode{</sup></button>
+ }
+ %% The next command needs \expandafter in order to expand the counter footnoteNum into a roman character for the footnote ID. These seem to work better than arabic numerals in some cases, although why is not clear. Note that the ID counter style choice (roman vs arabic etc) needs to match the previous HCode choice.
+ %% Currently most of the formatting doesn't seem to work as intended, so that still needs to be figured out and fixed. Ideally we would have the footnote appear as a bubble above the footnote superscript when the footnote superscript is clicked.
+ \expandafter\HCode{
+ <span id="footnote\roman{footnoteNum}"
+ style=
+ "display:none;
+ min-width:20em;
+ position:relative;
+ left:2px;
+ padding:5px;
+ color:blue;
+ word-wrap:break-word;
+ z-index=9999;
+ overflow=auto;"
+ >
+ }
+ \textcolor{fncolor}{(#1)}% Display the actual footnote here with color `fncolor' and within ()'s.
+ \HCode{</span></span>}
+ }% End of footnote definition.
+%</htXimera>
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/freeresponse.dtx b/Master/texmf-dist/doc/latex/ximera/src/freeresponse.dtx
new file mode 100644
index 00000000000..2fe03c52872
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/freeresponse.dtx
@@ -0,0 +1,60 @@
+% \subsubsection{Free response}
+% \DescribeEnv{freeResponse}{A freeform input box.}
+% \begin{macrocode}
+%<*classXimera>
+\newboolean{given} %% required for freeResponse
+\setboolean{given}{true} %% could be replaced by a key=value pair later if needed
+
+\ifhandout
+ \newenvironment{freeResponse}[1][false]%
+ {%
+ \def\givenatend{\boolean{#1}}
+ \ifthenelse{\boolean{#1}}
+ {% Begin then result
+ \begin{trivlist}
+ \item
+ }% End then result
+ {% Begin else result
+ \setbox0\vbox\bgroup
+ }% End else result
+% {}% Don't think this is doing anything? -- Jason
+ }
+ {%
+ \ifthenelse{\givenatend}
+ {% Begin then result
+ \end{trivlist}
+ }% End then result
+ {% Begin else result
+ \egroup
+ }% End else result
+% {}% Don't think this is doing anything? -- Jason
+ }
+\else
+ \newenvironment{freeResponse}[1][false]%
+ {% Environment Beginning Code
+ \ifthenelse{\boolean{#1}}%% Could probably change this with just putting the (given) in the boolean?-- Jason
+ {% Begin then result
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Free Response (Given):\hspace{2ex}]
+ }% End then result
+ {% Begin else result
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Free Response:\hspace{2ex}]
+ }% End else result
+ }
+ {% Environment Ending Code
+ \end{trivlist}
+ }
+\fi
+
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+
+\renewenvironment{freeResponse}{\refstepcounter{problem}}{}%
+\ConfigureEnv{freeResponse}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="free-response" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}%
+
+%</htXimera>
+% \end{macrocode} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/ximera/src/graded.dtx b/Master/texmf-dist/doc/latex/ximera/src/graded.dtx
new file mode 100644
index 00000000000..24ec67052d4
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/graded.dtx
@@ -0,0 +1,20 @@
+% \subsection{Grading by points}
+% \DescribeEnv{graded}{The |graded| environment does nothing in latex,
+% but in html, it wraps the activities in a div in order to assign
+% some weight to them for grading.}
+% \begin{macrocode}
+%<*classXourse>
+\newenvironment{graded}[1]{}{}
+%</classXourse>
+% \end{macrocode}
+% So indeed this environment in html wraps the activities in a div in
+% order to assign some number of points to them.
+% \begin{macrocode}
+%<*htXourse>
+\renewenvironment{graded}[1]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<div class="graded" data-weight="#1">}\IgnoreIndent%
+}{
+\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/hideEnv.dtx b/Master/texmf-dist/doc/latex/ximera/src/hideEnv.dtx
new file mode 100644
index 00000000000..5abcdfb0c09
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/hideEnv.dtx
@@ -0,0 +1,36 @@
+% \subsubsection{hideEnv}
+% \DescribeMacro{hideEnv}[replacementCode]{environmentName}
+% This macro allows you to hide an environment by name, ensuring it - and all its contents - are no longer visible on the pdf output. It also allows you an optional input to replace the block of content with new (uniform) content if desired.
+% #1 is replacementCode and is optional. This will be code that is executed when the env is executed,
+% even though the content of the environment is hidden.
+% #2 is the name of the environment which gets hidden.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\hideEnv}[2][]{
+ %% Syntax: \hideEnv[NewCode]{environmentName}
+
+ \expandafter\def\csname temp@#2\endcsname\csname #2\endcsname
+ \expandafter\def\csname temp@end#2\endcsname\csname end#2\endcsname
+ \expandafter\def\csname#2\endcsname{
+ \ifnum\value{depth@Check}<1
+ Suppress Should start here.
+ \suppress
+ \fi
+ \stepcounter{depth@Check}
+
+% Current Depth reported as: \arabic{depth@Check}
+ }
+ \expandafter\def\csname end#2\endcsname{
+ \addtocounter{depth@Check}{-1}
+ \ifnum\value{depth@Check}<1
+ Suppress Should End Here.
+ \endsuppress
+ \fi
+
+% Current Depth reported as: \arabic{depth@Check}
+ \noexpand{#1}
+ }
+ }
+%</classXimera>
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/hints.dtx b/Master/texmf-dist/doc/latex/ximera/src/hints.dtx
new file mode 100644
index 00000000000..b777bd8235e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/hints.dtx
@@ -0,0 +1,53 @@
+% \subsubsection{Hints}
+% \DescribeEnv{hint}{Hint environments can be embedded inside problems.}
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% Create a counter that will track how deeply nested the current hint is
+% \begin{macrocode}
+\newcounter{hintLevel}
+\setcounter{hintLevel}{0}
+% \end{macrocode}
+% Create an empty shell to renew
+% \begin{macrocode}
+\newenvironment{hint}{}{}
+% \end{macrocode}
+% Now we renew the environment as needed, this should allow support
+% for any transition code that treats some parts as a "handout" and
+% some parts as non-handout. renewing the environment on the fly is a
+% bit hacky.
+% \begin{macrocode}
+\renewenvironment{hint}
+ {
+ \ifhandout
+ \setbox0\vbox\bgroup
+ \else
+ \begin{trivlist}\item[\hskip \labelsep\small\slshape\bfseries Hint:\hspace{2ex}]
+ \small\slshape
+ \fi
+% \end{macrocode}
+% Step up hint level to track the nested level of the hint. This will be used for problem numbering.
+% \begin{macrocode}
+ \stepcounter{hintLevel}
+ }
+ {
+ \ifhandout
+ \egroup\ignorespacesafterend
+ \else
+ \end{trivlist}
+ \fi
+% \end{macrocode}
+% Detract from hint level counter to track hint nested level
+% \begin{macrocode}
+ \addtocounter{hintLevel}{-1}
+ }
+
+\ifhints
+ \renewenvironment{hint}{
+ \begin{trivlist}\item[\hskip \labelsep\small\slshape\bfseries Hint:\hspace{2ex}]
+ \small\slshape}
+ {\end{trivlist}}
+\fi
+
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/html.dtx b/Master/texmf-dist/doc/latex/ximera/src/html.dtx
new file mode 100644
index 00000000000..8c0b458bf15
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/html.dtx
@@ -0,0 +1,20 @@
+% \subsubsection{Semantic HTML}
+% \DescribeMacro{\textbf}{Using \verb|\textbf| emits a \verb|<strong>| tag.}
+% \begin{macrocode}
+%<*cfgXimera>
+\Configure{textbf}{\ifvmode\ShowPar\fi\HCode{<strong>}}{\HCode{</strong>}}
+%</cfgXimera>
+% \end{macrocode}
+% \DescribeMacro{\textit}{Using \verb|\textit| or similar emits an \verb|<em>| tag.}
+% \begin{macrocode}
+%<*cfgXimera>
+\Configure{textit}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
+\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
+%</cfgXimera>
+% \end{macrocode}
+% \DescribeMacro{\texttt}{Using \verb|\texttt| emits a \verb|<code>| tag.}
+% \begin{macrocode}
+%<*cfgXimera>
+\Configure{texttt}{\ifvmode\ShowPar\fi\HCode{<code>}}{\HCode{</code>}}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/hyperref.dtx b/Master/texmf-dist/doc/latex/ximera/src/hyperref.dtx
new file mode 100644
index 00000000000..d035b4d9760
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/hyperref.dtx
@@ -0,0 +1,12 @@
+% We put hyperref after all other packages becuase that is better.
+% \begin{macrocode}
+%<*classXimera>
+% Don't use hyperref when using Tex4ht
+\ifdefined\HCode
+\RequirePackage{hyperref}
+\else
+\RequirePackage[pdfpagelabels,colorlinks=true,allcolors=blue!30!black]{hyperref}
+\pdfstringdefDisableCommands{\def\hskip{}}%% quiets warning
+\fi
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/image.dtx b/Master/texmf-dist/doc/latex/ximera/src/image.dtx
new file mode 100644
index 00000000000..e8e0a96e5ad
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/image.dtx
@@ -0,0 +1,60 @@
+% \subsubsection{Images}
+% \DescribeEnv{image}{Place images inside an |image| environment. On paper, this centers the image. On the web, this provides additional benefits.}
+% \begin{macrocode}
+%<*classXimera>
+%\newenvironment{image}[1][]{\begin{center}}{\end{center}}
+\NewEnviron{image}[1][3in]{%
+ \begin{center}\resizebox{#1}{!}{\BODY}\end{center}% resize and center
+}
+%</classXimera>
+% \end{macrocode}
+% \DescribeMacro{\alt}{Inside an |image| environment, |\alt| provides alt-text for assistive technology like screenreaders.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\alt}[1]{}
+%</classXimera>
+% \end{macrocode}
+% The |image| environment doesn't actually work in tex4ht as defined
+% with NewEnviron; so this renewenvironment is needed.
+% image-environment also gets formatted in a well, and when the user
+% clicks on the image, it zooms in.
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{imagealt}
+\setcounter{imagealt}{0}
+\renewenvironment{image}[1][]{\stepcounter{imagealt}%
+ \ifvmode \IgnorePar\fi \EndP%
+ \HCode{<div class="image-environment" role="img" aria-labelledby="image-alt-\arabic{imagealt}">}%
+}{\HCode{</div>}}
+\renewcommand{\alt}[1]{\HCode{<div style="display: none;" id="image-alt-\arabic{imagealt}">}#1\HCode{</div>}}
+%</htXimera>
+% \end{macrocode}
+% Although we accept many formats, SVG is preferred on the web.
+% Since we have a different mechanism for producing |alt| text, we
+% want to ignore tex4ht's own method fo producing alt text.
+% \begin{macrocode}
+%<*cfgXimera>
+\DeclareGraphicsExtensions{.jpg,.png,.gif,.svg}
+\Configure{graphics*}
+{svg}{
+ {\Configure{Needs}{File: \Gin@base.svg}\Needs{}}
+ \Picture[]{\csname Gin@base\endcsname.svg \csname a:Gin-dim\endcsname}%
+}
+%</cfgXimera>
+% \end{macrocode}
+% This is a hack to kill |includegraphics| commands in
+% |\documentclass{standalone}| files
+% \begin{macrocode}
+%<*cfgXimera>
+\ifcsname ifstandalone\endcsname
+ \ifstandalone
+ \renewcommand\includegraphics[2][]{}
+ \fi
+%</cfgXimera>
+% \end{macrocode}
+% PGF sometimes causes trouble, but we simply don't care in tex4ht mode.
+% \begin{macrocode}
+%<*htXimera>
+\newcommand{\pgfsyspdfmark}[3]{}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/instructornotes.dtx b/Master/texmf-dist/doc/latex/ximera/src/instructornotes.dtx
new file mode 100644
index 00000000000..c175319f69d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/instructornotes.dtx
@@ -0,0 +1,101 @@
+% \subsubsection{Instructor notes}
+% \begin{macrocode}
+%<*classXimera>
+
+%% instructor intro/instructor notes
+%%
+\ifhandout % what follows is handout behavior
+ \ifinstructornotes
+ \newenvironment{instructorIntro}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Introduction:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \else
+ \newenvironment{instructorIntro}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%If this mysteriously starts breaking
+ % remove \ignorespacesafterend
+ \egroup\ignorespacesafterend
+ }
+ \fi
+\else% for handout, so what follows is default
+\ifinstructornotes
+ \newenvironment{instructorIntro}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+ \else
+ \newenvironment{instructorIntro}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Introduction:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \fi
+\fi
+
+
+
+
+%% instructorNotes environment
+\ifhandout % what follows is handout behavior
+\ifinstructornotes
+\newenvironment{instructorNotes}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Notes:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \else
+ \newenvironment{instructorNotes}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+ \fi
+\else% for handout, so what follows is default
+\ifinstructornotes
+\newenvironment{instructorNotes}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+ \else
+ \newenvironment{instructorNotes}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Notes:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \fi
+ \fi
+
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/desmos.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/desmos.dtx
new file mode 100644
index 00000000000..9a55db8f433
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/desmos.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Desmos}
+% \DescribeMacro{\desmos}{Desmos command. Requires id, width, and height as arguments.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\desmos}[3]{Desmos link: \url{https://www.desmos.com/calculator/#1}}
+\newcommand{\desmosThreeD}[3]{Desmos3D link: \url{https://www.desmos.com/3d/#1}}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\desmos}[3]{\HCode{<iframe src="https://www.desmos.com/calculator/#1" width="100\%" height="#3px" style="border: 1px solid \#ccc" frameborder=0>This browser does not support embedded elements.</iframe>}}
+\renewcommand{\desmosThreeD}[3]{\HCode{<iframe src="https://www.desmos.com/3d/#1" width="#2px" height="#3px" style="border: 1px solid \#ccc" frameborder=0>This browser does not support embedded elements.</iframe>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/geogebra.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/geogebra.dtx
new file mode 100644
index 00000000000..696ac32236f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/geogebra.dtx
@@ -0,0 +1,27 @@
+% \subsubsection{Geogebra}
+% \DescribeMacro{\geogebra}{Geogebra command. Requires id, width, and
+% height as arguments.}
+% \begin{macrocode}
+%<*classXimera>
+%Geogebra link
+\newcommand{\geogebra}[3]{Geogebra link: \url{https://www.geogebra.org/m/#1}}
+%</classXimera>
+% \end{macrocode}
+% Define keys for answer geogebra key=value pairs.
+% \begin{macrocode}
+%<*htXimera>
+\define@key{geogebra}{rc}[true]{\def\geo@rc{#1}}
+\define@key{geogebra}{sdz}[true]{\def\geo@sdz{#1}}
+\define@key{geogebra}{smb}[true]{\def\geo@smb{#1}}
+\define@key{geogebra}{stb}[true]{\def\geo@stb{#1}}
+\define@key{geogebra}{stbh}[true]{\def\geo@stbh{#1}}
+\define@key{geogebra}{ld}[true]{\def\geo@ld{#1}}
+\define@key{geogebra}{sri}[true]{\def\geo@sri{#1}}
+%set default key values
+\setkeys{geogebra}{rc=false,sdz=false,smb=false,stb=false,stbh=false,ld=false,sri=false}
+%command definition
+\renewcommand{\geogebra}[4][]{%
+ \setkeys{geogebra}{#1}% Set new keys
+ \HCode{<iframe scrolling="no" src="https://www.geogebra.org/material/iframe/id/#2/width/#3/height/#4/border/888888/rc/\geo@rc/ai/false/sdz/\geo@sdz/smb/\geo@smb/stb/\geo@stb/stbh/\geo@stbh/ld/\geo@ld/sri/\geo@sri/at/auto" width="#3px" height="#4px" style="border:0px; max-width: fit-content"> </iframe>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/google.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/google.dtx
new file mode 100644
index 00000000000..cbe75498f12
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/google.dtx
@@ -0,0 +1,26 @@
+% \subsubsection{Google Sheet}
+% \DescribeMacro{\googleSheet}{googleSheet command. Requires id,
+% width, and height as arguments. optional arguments are gid for
+% sheet ID and range for cell range. command definition}
+% \begin{macrocode}
+%<*classXimera>
+% Google Spreadsheet link (read only)
+\newcommand{\googleSheet}[5]{%
+ Google Spreadsheet link: \url{https://docs.google.com/spreadsheets/d/#1}%
+}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\googleSheet}[5]{%
+ \ifthenelse{\equal{#4}{}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?widget=true">This browser does not support embedded elements.</iframe>}}%
+ {\ifthenelse{\equal{#5}{}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?single=true&amp;gid=#4&amp;widget=false">This browser does not support embedded elements.</iframe>}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?single=true&amp;gid=#4&amp;range=#5&amp;widget=false">This browser does not support embedded elements.</iframe>}}%
+ }%
+ }%
+%</htXimera>
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/graph.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/graph.dtx
new file mode 100644
index 00000000000..154c2803afc
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/graph.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Graphs}
+% \DescribeMacro{\graph}{An embedded graph (in math mode).}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\graph}[2][]{\text{Graph of $#2$}}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\graph}[2][]{\HCode{<div class="graph" data-options="#1">}#2\HCode{</div>}}
+%</htXimera>
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/include.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/include.dtx
new file mode 100644
index 00000000000..76eaa0dd6f6
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/include.dtx
@@ -0,0 +1,22 @@
+% \subsubsection{Including widgets}
+% \DescribeMacro{\includeinteractive}{Cognate to |includegraphics| but
+% instead of a graphics file, accepts a |.js| file which will be
+% loaded as an interactive widget.}
+% \begin{macrocode}
+%<*classXimera>
+\define@key{interactive}{id}{\def\interactive@id{#1}}
+\setkeys{interactive}{id=}
+\newcommand{\includeinteractive}[2][]{
+\setkeys*{interactive}{#1}%
+\ifthenelse{\equal{\interactive@id}{}}{}{\recordvariable{\interactive@id}}
+Interactive
+}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\includeinteractive}[2][]{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div id="interactive\arabic{identification}" class="interactive"> </div>}\HCode{<script src="#2" data-argument="#1" data-target="interactive\arabic{identification}"> </script>}\IgnoreIndent}
+%</htXimera>
+% \end{macrocode}
+
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/javascript.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/javascript.dtx
new file mode 100644
index 00000000000..c67a7e52354
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/javascript.dtx
@@ -0,0 +1,31 @@
+% \subsubsection{JavaScript}
+
+% \DescribeEnv{javascript}{Code inside a javascript environment is printed on paper, but executed on the web.}
+
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{javascript}{Verbatim}{numbers=left,frame=lines,label=JavaScript,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+% for programming javascript
+\renewenvironment{javascript}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{javascript}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="javascript" id="javascript\arabic{identification}"><script type="text/javascript">}\HtmlParOff}{\HtmlParOn\HCode{</script></div>}}
+%</htXimera>
+% \end{macrocode}
+
+% \DescribeMacro{\js}{Code inside a |\js| macro is evaluated and replaced with its value.}
+% \begin{macrocode}
+%<*classXimera>
+\def\js#1{\mbox{\texttt{\detokenize{#1}}}}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\def\js#1{\stepcounter{identification}\HCode{<span class="inline-javascript" id="javascript\arabic{identification}"><script type="text/javascript"> function javascript\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script></span>}}
+%</htXimera>
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/sagemath.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/sagemath.dtx
new file mode 100644
index 00000000000..95d378afdea
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/sagemath.dtx
@@ -0,0 +1,43 @@
+% \subsection{SageMath support}
+% Load Sage\TeX\ if it exists.
+% \begin{macrocode}
+%<*classXimera>
+\IfFileExists{sagetex.sty}{\RequirePackage{sagetex}}{}
+%</classXimera>
+% \end{macrocode}
+
+% \DescribeEnv{sageCell}{Create an interactive SageMath widget.}
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{sageCell}{Verbatim}{numbers=left,frame=lines,label=SAGE,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{sageCell}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sageCell}{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="sage"><script type="text/x-sage">}\HtmlParOff}{\HtmlParOn\HCode{\Hnewline</script></div>}}
+%</htXimera>
+% \end{macrocode}
+
+% \DescribeEnv{sageOutput}{Execute SageMath code and output the result.}
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{sageOutput}{Verbatim}{numbers=left,frame=lines,label=SAGE-Output,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{sageOutput}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sageOutput}{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="sageOutput"><script type="text/x-sage">}}{\HCode{\Hnewline</script></div>}}
+%</htXimera>
+% \end{macrocode}
+
+% \DescribeEnv{sageSilent}{Execute SageMath code without outputing the result.}
+% \begin{macrocode}
+%<*htXimera>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\renewenvironment{sagesilent}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sagesilent}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="text/sagemath">}\HtmlParOff}{\HtmlParOn\HCode{</script></div>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/interactives/video.dtx b/Master/texmf-dist/doc/latex/ximera/src/interactives/video.dtx
new file mode 100644
index 00000000000..7f7979db3fe
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/interactives/video.dtx
@@ -0,0 +1,21 @@
+% \subsubsection{Video}
+% \DescribeMacro{\youtube}{Youtube command. Requires id.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\youtube}[1]{YouTube link: \url{https://www.youtube.com/watch?v=#1}}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\youtube}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="video youtube-player" data-youtube="#1">_</div>}}
+%</htXimera>
+% \end{macrocode}
+% Video commands are also emitted, slightly differently, when placed
+% at top-level in a xourse file.
+% \begin{macrocode}
+%<*htXourse>
+\renewcommand\youtube[1]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<a class="youtube" href="https://www.youtube.com/watch?v=#1">#1</a>}\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/jax.dtx b/Master/texmf-dist/doc/latex/ximera/src/jax.dtx
new file mode 100644
index 00000000000..5441a139e13
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/jax.dtx
@@ -0,0 +1,115 @@
+% \subsubsection{MathJax support}
+% When using mathjax, dump all the |\newcommand|s to a |.jax| file.
+%
+% First, create the |.jax| file.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \else
+ \newwrite\myfile
+ \immediate\openout\myfile=\jobname.jax
+\fi
+%</classXimera>
+% \end{macrocode}
+% From |only.dtx| we must also create |prompt| on the MathJax side.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \else
+ \immediate\write\myfile{\unexpanded{\newenvironment}{prompt}{}{}}
+\fi
+%</classXimera>
+% \end{macrocode}
+% Redefine newcommand appropriately.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \else
+\let\@oldargdef\@argdef
+\long\def\@argdef#1[#2]#3{%
+\immediate\write\myfile{\unexpanded{\newcommand}{\unexpanded{#1}}[\unexpanded{#2}]{\unexpanded{#3}}}%
+\@oldargdef#1[#2]{#3}%
+}
+
+\let\@OldDeclareMathOperator\DeclareMathOperator
+\renewcommand{\DeclareMathOperator}[2]{\@OldDeclareMathOperator{#1}{#2}\immediate\write\myfile{\unexpanded{\DeclareMathOperator}{\unexpanded{#1}}{\unexpanded{#2}}}}
+
+\fi
+%</classXimera>
+% \end{macrocode}
+% Include the jax'ed newcommands
+% \begin{macrocode}
+%<*cfgXimera>
+% Remove commands that use @
+\immediate\write18{sed -i "/@/d" \jobname.jax}
+% Replace ##1 with #1 and so forth
+\immediate\write18{sed -i "s/\string#\string#\string\\([0-9]\string\\)/\string#\string\\1/g" \jobname.jax}
+
+\Configure{BVerbatimInput}{}{}{}{}
+
+\Configure{verbatiminput}{}{}{}{}
+
+% Instead of a nonbreaking space, use a standard space
+\makeatletter
+\def\FV@Space{\space}
+\makeatother
+
+% Include the mathjax newcommands in a math/tex script right at the beginning of the body
+\Configure{BODY}{%
+\HCode{<body>\Hnewline}%
+\Tg<div class="preamble">%
+\Tg<script type="math/tex">%
+\BVerbatimInput{\jobname.jax}%
+\Tg</script>%
+\IfFileExists{\jobname.ids}{\HCode{<script type="text/javascript">\Hnewline}%
+\BVerbatimInput{\jobname.ids}%
+\HCode{</script>\Hnewline}%
+\Tg</div>%
+}{}
+}{%
+\HCode{</body>\Hnewline}%
+}
+% \end{macrocode}
+% Now I just need to add a newcommand command which outputs the
+% appropriate newcommands to MathJax; then this should be "good
+% enough" for our purposes.
+% \begin{macrocode}
+\newtoks\eqtoks
+\def\AltMath#1${\eqtoks{#1}%
+ \HCode{<script type="math/tex">\the\eqtoks</script>}$}
+\Configure{$}{}{}{\expandafter\AltMath}
+
+\def\AltlMathI#1\){\eqtoks{#1}%
+ \HCode{<script type="math/tex">\the\eqtoks</script>}\)}
+\Configure{()}{\AltlMathI}{}
+
+\def\AltlDisplay#1\]{\eqtoks{#1}%
+ \HCode{<script type="math/tex; mode=display">\the\eqtoks</script>}\]}
+\Configure{[]}{\AltlDisplay}{}
+
+\def\AltlDisplayI#1$${\eqtoks{#1}%
+ \HCode{<script type="math/tex; mode=display">\the\eqtoks</script>}$$}
+\Configure{$$}{}{}{\expandafter\AltlDisplayI}
+% \end{macrocode}
+% Need to turn off htmlpar too, as expained in http://tex.stackexchange.com/questions/204930/vertical-spaces-in-htlatex-scriptenv
+% \begin{macrocode}
+\newcommand\VerbMath[1]{%
+\renewenvironment{#1}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{#1}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="math/tex; mode=display"> \string\begin{#1}\Hnewline}\HtmlParOff}{\HtmlParOn\HCode{\string\end{#1}</script>}}
+}
+% \end{macrocode}
+% This is a fix for the LAODE book, which uses matlabEquation as if it were an equation
+% \begin{macrocode}
+\ScriptEnv{matlabEquation}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="math/tex; mode=display"> \string\begin{equation}\Hnewline}\HtmlParOff}{\HtmlParOn\HCode{\string\end{equation}</script>}}
+
+\VerbMath{equation}
+\VerbMath{equation*}
+\VerbMath{align}
+\VerbMath{align*}
+\VerbMath{alignat}
+\VerbMath{alignat*}
+\VerbMath{eqnarray}
+\VerbMath{eqnarray*}
+
+%</cfgXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/labels.dtx b/Master/texmf-dist/doc/latex/ximera/src/labels.dtx
new file mode 100644
index 00000000000..05ecf31fc94
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/labels.dtx
@@ -0,0 +1,15 @@
+% \subsubsection{Labels and references}
+% Labels and refs both generate anchors.
+% \DescribeMacro{\label}{A |\label| can be referenced from any file in the xourse.}
+% \begin{macrocode}
+%<*htXimera>
+\let\oldlabel\label
+\renewcommand{\label}[1]{\oldlabel{#1}\HCode{<a class="ximera-label" id="#1"></a>}}
+%</htXimera>
+% \end{macrocode}
+% \DescribeMacro{\ref}{A |\ref| can connect one \TeX\ file to another if they are in the same xourse.}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\ref}[1]{\HCode{<a class="reference" href="\##1">#1</a>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/leash.dtx b/Master/texmf-dist/doc/latex/ximera/src/leash.dtx
new file mode 100644
index 00000000000..b52b5e2bf0c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/leash.dtx
@@ -0,0 +1,18 @@
+% \subsubsection{Leashes}
+% \DescribeEnv{leash}{Put content inside a scrollable box.}
+% \begin{macrocode}
+%<*classXimera>
+
+\newenvironment{leash}[1]{%
+}{%
+}
+
+
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{leash}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<div style="overflow: auto; height: #1px">}}{\HCode{</div>}\IgnoreIndent}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/link.dtx b/Master/texmf-dist/doc/latex/ximera/src/link.dtx
new file mode 100644
index 00000000000..9e76659e830
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/link.dtx
@@ -0,0 +1,31 @@
+% Hyperlinks to outside documents
+% \begin{macrocode}
+%<*classXimera>
+\newcommand*{\link}[2][]{#1%
+ \ifthenelse{\equal{#1}{}}%
+ {\footnote{Link: \url{#2}}}%
+ {\footnote{See #1 at \url{#2}}}
+ }
+%</classXimera>
+% \end{macrocode}
+
+
+% \begin{macrocode}
+%<*htXimera>
+% This is a command used in versions of documents created with
+% these classes; in Jim's opinion it should be deprecated for |\href|
+% Bart on the other hand likes |\link|
+\renewcommand*{\link}[2][]{%
+\ifthenelse{\equal{#1}{}}%
+{\url{#2}}
+{\href{#2}{#1}}}
+%\renewcommand*{\link}[2][]{%
+%\ifthenelse{\equal{#1}{}}%
+%{\url{#2}}
+%{\href{#2}{#1}}}
+
+% because hyperref redefines stuff atbegindocument, we do too.
+\AtBeginDocument{\renewcommand{\ref}[1]{\HCode{<a class="reference" href="\##1">#1</a>}}}
+
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/logo.dtx b/Master/texmf-dist/doc/latex/ximera/src/logo.dtx
new file mode 100644
index 00000000000..cbe808502a6
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/logo.dtx
@@ -0,0 +1,30 @@
+% \subsection{Logos}
+% \DescribeMacro{\logo}{A logo for the xourse.}
+% \begin{macrocode}
+%<*classXourse>
+\newcommand*{\logo}[1]{%
+ \ifx\@onlypreamble\@notprerr
+ \ClassError{xourse}{logo can only be used in the preamble}
+ {Move your logo command to the preamble}
+ \else %
+ \IfFileExists{#1}%
+ {\gdef\xourse@logo{#1}}%
+ {\ClassError{xourse}{logo file does not exist}
+ {To use logo, make sure that the referenced image file exists}}%
+ \fi%
+}
+
+%</classXourse>
+% \end{macrocode}
+
+% The xourse logo is an |og:image| in the opengraph taxonomy.
+% \begin{macrocode}
+%<*htXourse>
+\Configure{@HEAD}{%
+ \HCode{<meta name="og:image" content="}%
+\ifdefined\xourse@logo%
+ \xourse@logo%
+\fi%
+\HCode{" />\Hnewline}}%
+%</htXourse>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/macros.dtx b/Master/texmf-dist/doc/latex/ximera/src/macros.dtx
new file mode 100644
index 00000000000..0968942be5b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/macros.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Macros}
+% Makes everymath display style even when inline, could be optional.
+% \begin{macrocode}
+%<*classXimera>
+\everymath{\displaystyle}
+%</classXimera>
+% \end{macrocode}
+% Ok not everything, we also need to configure ``display style'' limits.
+% \begin{macrocode}
+%<*classXimera>
+\let\prelim\lim
+\renewcommand{\lim}{\displaystyle\prelim}
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/makeCounter.dtx b/Master/texmf-dist/doc/latex/ximera/src/makeCounter.dtx
new file mode 100644
index 00000000000..2e898255e75
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/makeCounter.dtx
@@ -0,0 +1,37 @@
+% \subsubsection{Utility macros}
+% These are a list of new utility macros that are generally useful and are loaded after packages and the Tikz Fix.
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \begin{macro}{NewCounter}
+% Improved version of |\newcounter| to check for existance before creating a counter to minimize conflicts with packages. Added by Jason Nowell
+% \begin{macrocode}
+\newcommand{\Make@Counter}[1]{% This is an internal macro that should probably be depreciated for the below universal macro.
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+
+\newcommand{\MakeCounter}[1]{%% Code located in "Utilitymacros.dtx"
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+% \end{macrocode}
+%</classXimera>
+% \end{macro}
+
+
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/metadata.dtx b/Master/texmf-dist/doc/latex/ximera/src/metadata.dtx
new file mode 100644
index 00000000000..5f33cde072a
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/metadata.dtx
@@ -0,0 +1,32 @@
+% \subsubsection{Metadata}
+% To encourage authors to include relevant parseable metadata in the
+% preamble, we define some currently ignored commands.
+
+% \DescribeMacro{\license}{In the preamble, use |\license| with an SPDX license expression.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\license}{\excludecomment}
+%</classXimera>
+% \end{macrocode}
+
+% \DescribeMacro{\acknowledgement}{In the preamble, use |\acknowledgement| to credit others who contributed to the intellectual content beside the author.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\acknowledgement}{\excludecomment}
+%</classXimera>
+% \end{macrocode}
+
+% \DescribeMacro{\tag}{In the preamble, a |\tag| provides a free-form taxonomy.}
+% \begin{macrocode}
+%<*classXimera>
+\renewcommand{\tag}{\excludecomment}
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, we mark the file as the appropriate kind of
+% object---either activity or xourse.
+% \begin{macrocode}
+%<*htXourse>
+% Mark this as a xourse file
+\Configure{@HEAD}{\HCode{<meta name="description" content="xourse" />\Hnewline}}
+%</htXourse>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/only.dtx b/Master/texmf-dist/doc/latex/ximera/src/only.dtx
new file mode 100644
index 00000000000..cdb676c90ef
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/only.dtx
@@ -0,0 +1,38 @@
+% \subsubsection{Only}
+
+% \DescribeEnv{prompt}{The prompt part for mathmode}
+% \begin{macrocode}
+%<*classXimera>
+\ifxake
+ \newenvironment{prompt}{}{}
+\else
+\ifhandout
+ \NewEnviron{prompt}{}
+% Currently breaks when put in mathmode!
+% \newenvironment{prompt}{\suppress}{\endsuppress}
+\else
+ \newenvironment{prompt}
+ {\bgroup\color{gray!50!black}}
+ {\egroup}
+\fi
+\fi
+% \end{macrocode}
+
+% \DescribeEnv{onlineOnly}{Only display it online}
+% \begin{macrocode}
+\ifhandout
+ \NewEnviron{onlineOnly}{
+ \iftikzexport
+ \BODY
+ \else
+ \fi
+ }
+\else
+ \newenvironment{onlineOnly}
+ {\bgroup\color{red!50!black}}
+ {\egroup}
+\fi
+
+\newcommand{\pdfOnly}[1]{\iftikzexport\else #1\fi}
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/options.dtx b/Master/texmf-dist/doc/latex/ximera/src/options.dtx
new file mode 100644
index 00000000000..7e131bb0bad
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/options.dtx
@@ -0,0 +1,123 @@
+% \subsection{Options for the class}
+% We start by listing the options for the \textsf{ximera} document class. Note, since the \textsf{xourse} class is based on the \textsf{ximera} class, all listed options are available there too.
+%
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \begin{macro}{handout}
+% The default behavior of the class is to display \textbf{all} content. This means that if any questions are asked, all answers are shown. Moreover, some content will only have a meaningful presentation when displayed online. When compiled without any options, this content will be shown too. This option will supress such content and generate a reasonable printiable ``handout.''
+% \begin{macrocode}
+\newif\ifhandout
+\handoutfalse
+\DeclareOption{handout}{\handouttrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{noauthor}
+% By default, authors are listed at the bottom of the first page of a document. This option will supress the listing of the authors.
+% \begin{macrocode}
+\newif\ifnoauthor
+\noauthorfalse
+\DeclareOption{noauthor}{\noauthortrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{nooutcomes}
+% By default, learning outcomes are listed at the bottom of the first page of a document. This option will supress the listing of the learning outcomes.
+% \begin{macrocode}
+\newif\ifnooutcomes
+\nooutcomesfalse
+\DeclareOption{nooutcomes}{\nooutcomestrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{instructornotes}
+% This option will turn on (and off) notes written for the instructor.
+% \begin{macrocode}
+\newif\ifinstructornotes
+\instructornotesfalse
+\DeclareOption{instructornotes}{\instructornotestrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{noinstructornotes}
+% This option will turn off (and on) notes written for the instructor.
+% \begin{macrocode}
+\DeclareOption{noinstructornotes}{\instructornotestrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{hints}
+% When the \texttt{handout} options is used, hints are not shown. This option will make hints visible in handout mode.
+% \begin{macrocode}
+\newif\ifhints
+\hintsfalse
+\DeclareOption{hints}{\hintstrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{newpage}
+% This option will start each problem-like environment (\texttt{exercise}, \texttt{question}, \texttt{problem}, and \texttt{exploration}) start on a new page.
+% \begin{macrocode}
+\newif\ifnewpage
+\newpagefalse
+\DeclareOption{newpage}{\newpagetrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{numbers}
+% This option will number the titles of the activity. By default the activities are unnumbered.
+% \begin{macrocode}
+\newif\ifnumbers
+\numbersfalse
+\DeclareOption{numbers}{\numberstrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{wordchoicegiven}
+% This option will replace the choices shown by \texttt{wordChoice} with the correct choice. No indication of the \texttt{wordChoice} environment will be shown.
+% \begin{macrocode}
+\newif\ifwordchoicegiven
+\wordchoicegivenfalse
+\DeclareOption{wordchoicegiven}{\wordchoicegiventrue}
+\newif\iffirstinlinechoice% Support for other wordchoice command contents.
+\firstinlinechoicetrue
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+
+\newif\ifxake
+\xakefalse
+\DeclareOption{xake}{\xaketrue}
+
+\newif\iftikzexport
+\tikzexportfalse
+\DeclareOption{tikzexport}{%
+ \tikzexporttrue%
+ \handoutfalse%
+ \numbersfalse%
+ \newpagefalse%
+ \hintsfalse%
+ \nooutcomesfalse%
+}
+
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{article}%
+}
+\ProcessOptions\relax
+\LoadClass{article}
+
+\ifdefined\HCode
+ \xaketrue%
+ \tikzexporttrue%
+ \handoutfalse%
+ \numbersfalse%
+ \newpagefalse%
+ \hintsfalse%
+ \nooutcomesfalse%
+\fi
+
+%</classXimera>
+% \end{macrocode}
+
+
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/optionsxourse.dtx b/Master/texmf-dist/doc/latex/ximera/src/optionsxourse.dtx
new file mode 100644
index 00000000000..1217fce1998
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/optionsxourse.dtx
@@ -0,0 +1,27 @@
+% \begin{macrocode}
+%<*classXourse>
+% \end{macrocode}
+% \begin{macro}{notoc}
+% The default behavior of the class is to provide a table of contents listing all activities in the course. This option will supress this table of contents.
+% \begin{macrocode}
+\newif\ifnotoc
+\notocfalse
+\DeclareOption{notoc}{\notoctrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{nonewpage}
+% The default behavior of the class is to start each activity on a new page. This option will start activities without making a new page.
+% \begin{macrocode}
+\newif\ifnonewpage
+\nonewpagefalse
+\DeclareOption{nonewpage}{\nonewpagetrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ximera}}
+\ProcessOptions\relax
+\LoadClass{ximera}
+% \begin{macrocode}
+%</classXourse>
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/outcomes.dtx b/Master/texmf-dist/doc/latex/ximera/src/outcomes.dtx
new file mode 100644
index 00000000000..1e174b76555
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/outcomes.dtx
@@ -0,0 +1,34 @@
+% \subsubsection{Learning Outcomes}
+% \DescribeMacro{\outcome}{Specify a learning outcome, either at the level of a |problem| or an entire document in the preamble.}
+% \begin{macrocode}
+%<*classXimera>
+\def\theoutcomes{}
+
+\ifdefined\HCode%
+ \newcommand{\outcome}[1]{}
+\else%
+ \newwrite\outcomefile
+ \immediate\openout\outcomefile=\jobname.oc
+
+ \newcommand{\outcome}[1]{\edef\theoutcomes{\theoutcomes #1~}%
+ \immediate\write\outcomefile{\unexpanded{\outcome}{#1}}}
+ \fi%
+%</classXimera>
+% \end{macrocode}
+% These can appear in either the preamble or in problem environments.
+% with pdflatex, we produce the .oc file which includes ALL the
+% outcomes; in the tex4ht world, we just produce spans for the
+% specific outcomes.
+% \begin{macrocode}
+%<*cfgXimera>
+\renewcommand{\outcome}[1]{
+ \Configure{@HEAD}{\HCode{<meta name="learning-outcome" content="#1"/>\Hnewline}}
+}
+% Sometimes there are no outcomes at all
+\IfFileExists{\jobname.oc}{\input{\jobname.oc}}{}
+
+\renewcommand{\outcome}[1]{%
+ \HCode{<span class="learning-outcome">#1</span>}
+}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/packages.dtx b/Master/texmf-dist/doc/latex/ximera/src/packages.dtx
new file mode 100644
index 00000000000..72fb4c6e2a3
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/packages.dtx
@@ -0,0 +1,54 @@
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \subsection{Loading packages}
+% Since we want |\cancel| to work, we load it here to avoid polluting the |.jax| output.
+% \begin{macrocode}
+\RequirePackage[makeroom]{cancel}
+% \end{macrocode}
+% Quite a few packages are required by the document class. This is a
+% list of required packages. As packages are added to this list, we
+% should include a comment as to where they are being utilized. This
+% will help keep this list from being redundant and/or outdated.
+% \begin{macrocode}
+\RequirePackage[inline]{enumitem}
+\RequirePackage[pagestyles]{titlesec}
+\RequirePackage{titletoc}
+\RequirePackage{titling}
+\RequirePackage{url}
+\RequirePackage[table]{xcolor}
+\RequirePackage{tikz}
+\RequirePackage{pgfplots}
+\usepgfplotslibrary{groupplots}
+\usetikzlibrary{calc}
+\RequirePackage{fancyvrb}
+% \end{macrocode}
+% Load |forloop| for the problem environment dynamic naming and
+% building.
+% \begin{macrocode}
+\RequirePackage{forloop}
+% \end{macrocode}
+% Now we load even more packages.
+% \begin{macrocode}
+\RequirePackage{environ}% Included to allow saving of environment contents. This does *not* play well with various verbatem environments however and would be great to find a way around utilizing this package. One option is the "Suppress" command included below.
+\RequirePackage{amssymb}% Included to have access to math typeset.
+\RequirePackage{amsmath}% Included to have access to math typeset.
+\RequirePackage{amsthm}% Included to have access to math typeset.
+\RequirePackage{xifthen}% http://ctan.org/pkg/xifthen
+\RequirePackage{multido}% http://ctan.org/pkg/multido
+\RequirePackage{listings} %% is this required???
+
+\RequirePackage{xkeyval}
+
+\RequirePackage{comment}
+%</classXimera>
+% \end{macrocode}
+% Various packages must be loaded early to avoid polluting the |.jax|
+% file.
+% \begin{macrocode}
+%<*classXimera>
+\RequirePackage{gettitlestring}
+\RequirePackage{nameref}
+\RequirePackage{epstopdf}
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/pagesetup.dtx b/Master/texmf-dist/doc/latex/ximera/src/pagesetup.dtx
new file mode 100644
index 00000000000..9bf13d3cd93
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/pagesetup.dtx
@@ -0,0 +1,55 @@
+% \subsection{Page setup}
+% We want non-indented spaced-out paragraphs.
+% \begin{macrocode}
+%<*classXimera>
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{5pt}
+%</classXimera>
+% \end{macrocode}
+% To avoid weird margins in 2-sided mode, change the margins.
+% \begin{macrocode}
+%<*classXimera>
+\oddsidemargin 62pt
+\evensidemargin 62pt
+\textwidth 345pt
+\headheight 14pt
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, there is more complicated page setup to perform.
+% \begin{macrocode}
+%<*cfgXimera>
+\Preamble{xhtml}
+
+% We don't want to translate font suggestions with ugly wrappers like
+% <span class="cmti-10"> for italic text
+\NoFonts
+
+% Don't output xml version tag
+\Configure{VERSION}{}
+
+% Output HTML5 doctype instead of the default for HTML4
+\Configure{DOCTYPE}{\HCode{<!doctype html>\Hnewline}}
+
+% Custom page opening
+\Configure{HTML}{\HCode{<html lang="en">\Hnewline}}{\HCode{\Hnewline</html>}}
+
+% Reset <head>, aka delete all default boilerplate; alternatively set up new content
+\Configure{@HEAD}{\HCode{<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/\string~gurari/TeX4ht/)" />\Hnewline}}
+\Configure{@HEAD}{\HCode{<meta name="ximera" content="version 0.0.1" />\Hnewline}}
+\Configure{@HEAD}{\HCode{<link href="https://ximera.osu.edu/public/stylesheets/standalone.css" rel="stylesheet" media="screen"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<script type="text/javascript" async src="https://ximera.osu.edu/public/javascripts/standalone.min.js"></script>\Hnewline}}
+%</cfgXimera>
+% \end{macrocode}
+% Disable certain ligatures in HTML.
+% \begin{macrocode}
+%<*htXimera>
+\usepackage{microtype}
+\DisableLigatures[f]{encoding=*}
+%</htXimera>
+% \end{macrocode}
+% I am not sure what this does.
+% \begin{macrocode}
+%<*htXimera>
+\NewEnviron{html}{\HCode{\BODY}}
+%</htXimera>
+% \end{macrocode} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/ximera/src/problem.dtx b/Master/texmf-dist/doc/latex/ximera/src/problem.dtx
new file mode 100644
index 00000000000..4a8cfaeddbc
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/problem.dtx
@@ -0,0 +1,197 @@
+% \subsubsection{Problem environments}
+
+% These are problem environment decorations (these should be user invoked, not default).
+% The decoration for these environments were inspired by
+% \url{http://tex.stackexchange.com/questions/11098/nice-formatting-for-theorems}
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+
+% \begin{macro}{latexProblemContent}
+% Added for those that want to use UF problems without using the problem filter code. This command is renewed into something meaningful in the 'ProblemSelector.sty'.
+% \begin{macrocode}
+\providecommand{\latexProblemContent}[1]{#1}
+% Iterate count for problem counts.
+\Make@Counter{Iteration@probCnt}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\hang}{% top theorem decoration
+ \begingroup%
+ \setlength{\unitlength}{.005\linewidth}% \linewidth/200
+ \begin{picture}(0,0)(1.5,0)%
+ \linethickness{1pt} \color{black!50}%
+ \put(-3,2){\line(1,0){206}}% Top line
+ \multido{\iA=2+-1,\iB=50+-10}{5}{% Top hangs
+ \color{black!\iB}%
+ \put(-3,\iA){\line(0,-1){1}}% Top left hang
+ %\put(203,\iA){\line(0,-1){1}}% Top right hang
+ }%
+ \end{picture}%
+ \endgroup%
+}%
+\newcommand{\hung}{% bottom theorem decoration
+ \nobreak
+ \begingroup%
+ \setlength{\unitlength}{.005\linewidth}% \linewidth/200
+ \begin{picture}(0,0)(1.5,0)%
+ \linethickness{1pt} \color{black!50}%
+ \put(60,0){\line(1,0){143}}% Bottom line
+ \multido{\iA=0+1,\iB=50+-10}{5}{% Bottom hangs
+ \color{black!\iB}%
+ %\put(-3,\iA){\line(0,1){1}}% Bottom left hang
+ \put(203,\iA){\line(0,1){1}}% Bottom right hang
+ \put(\iB,0){\line(60,0){10}}% Left fade out
+ }%
+ \end{picture}%
+ \endgroup%
+}%
+% \end{macrocode}
+%
+% Configure environment configuration commands
+%
+% The command |\problemNumber| contains all the format code to determine the number (and the format of the number) for any of the problem environments.
+%
+% \begin{macrocode}
+\MakeCounter{problem}
+\newcommand{\problemNumber}{
+% First we determine if we have a counter for this question depth level.
+\ifcsname c@depth\Roman{problem@Depth}Count\endcsname% Check to see if counter exists
+ %If so, do nothing.
+ \else
+ %If not, create it.
+ \expandafter\newcounter{depth\Roman{problem@Depth}Count}
+ \expandafter\setcounter{depth\Roman{problem@Depth}Count}{0}
+ \fi
+
+\expandafter\stepcounter{depth\Roman{problem@Depth}Count}
+\arabic{depthICount}% The first problem depth, what use to be |\theproblem|.
+
+\forloop{Iteration@probCnt}{2}{\arabic{Iteration@probCnt} < \numexpr \value{problem@Depth} + 1 \relax}{%
+ .\expandafter\arabic{depth\Roman{Iteration@probCnt}Count}% Get the problem number of the next depth level and append it with a ".".
+}
+%\@ifpackageloaded{shuffle}{<true>}{<false>}% Check if Shuffle has been added. If so, add special numbering to the shuffled "groups". Currently commented out while we decide what that should look like (compared to the normal nested problems).
+%\ifhandout % Currently handout mode doesn't allow hints. Putting this code in place in case that changes.
+% \theproblem
+%\else
+% \theproblem
+%\fi
+}
+
+
+%%%%%% Configure various problem environment commands
+\Make@Counter{problem@Depth}
+
+
+
+%%%% Configure environments start content
+
+\newcommand{\problemEnvironmentStart}[2]{%
+% This takes in 2 arguments.
+% The first is optional and is the old optional argument from existing environments.
+% This is passed down to the associated problem environment name in case you want a global value.
+% The second argument is mandatory and is the name of the 'problem' environment,
+% such as problem, question, exercise, etc.
+% It then configures everything needed at the start of that environment.
+
+\stepcounter{problem@Depth}% Started a problem, so we've sunk another problem layer.
+\def\spaceatend{#1}%
+\begin{trivlist}%
+\item%
+ [%
+ \hskip\labelsep\sffamily\bfseries
+ #2 \problemNumber% Determine the correct number of the problem, and the format of that number.
+ ]%
+\slshape
+}
+
+
+
+%%%%% Configure environments end content
+
+\newcommand{\problemEnvironmentEnd}{%This configures all the end content for a problem.
+%
+% First we need to see if we've dropped fully out of a depth level,
+% so we can reset that counter back to zero for the next time we enter that depth level.
+\stepcounter{problem@Depth}
+\ifcsname c@depth\Roman{problem@Depth}Count\endcsname
+ \expandafter\ifnum\expandafter\value{depth\Roman{problem@Depth}Count}>0
+ \expandafter\setcounter{depth\Roman{problem@Depth}Count}{0}
+ \fi
+\fi
+
+\addtocounter{problem@Depth}{-2}% Exited a problem so we've exited a problem layer. Need -2 because we steppped once at the start to check for needing a depth-level count reset.
+
+\par\addvspace{.5ex}\nobreak\noindent\hung %% line at the bottom
+
+\ifhandout
+ \ifnewpage
+ \newpage
+ \fi
+\fi
+\end{trivlist}
+}
+
+
+
+%%%% Now populate the old environment names
+%
+% Old environments were "problem", "exercise", "exploration", and "question".
+% Note that you can add content to the start/end code on top of these base code pieces if you want.
+
+
+\newenvironment{problem}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Problem}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{exercise}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Exercise}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{exploration}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Exploration}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{question}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Question}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+%</classXimera>
+% \end{macrocode}
+
+
+% Use an ``identification'' counter to assign IDs to the various problem-related DOM elements
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{identification}
+\setcounter{identification}{0}
+
+\newcommand{\ConfigureQuestionEnv}[2]{%
+% refstepcounter ensures that labels get updated within these environments
+\renewenvironment{#1}{\refstepcounter{problem}}{}%
+\ConfigureEnv{#1}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div role="article" class="problem-environment #2" id="problem\arabic{identification}">}}{\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent}{}{}%
+}
+
+\ConfigureQuestionEnv{problem}{problem}
+\ConfigureQuestionEnv{exercise}{exercise}
+\ConfigureQuestionEnv{question}{question}
+\ConfigureQuestionEnv{exploration}{exploration}
+\ConfigureQuestionEnv{hint}{hint}
+%%%%\ConfigureQuestionEnv{shuffle}{shuffle}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/proof.dtx b/Master/texmf-dist/doc/latex/ximera/src/proof.dtx
new file mode 100644
index 00000000000..ab86e93f52b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/proof.dtx
@@ -0,0 +1,10 @@
+% \subsubsection{Proofs}
+% \DescribeEnv{proof}{A mathematical proof environment.}
+% \begin{macrocode}
+%<*classXimera>
+\renewcommand{\qedsymbol}{$\blacksquare$}
+\renewenvironment{proof}[1][\proofname]
+ {\begin{trivlist}\item[\hskip \labelsep \itshape \bfseries #1{}\hspace{2ex}]}
+{\qed\end{trivlist}}
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/sectioning.dtx b/Master/texmf-dist/doc/latex/ximera/src/sectioning.dtx
new file mode 100644
index 00000000000..3f9100294df
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/sectioning.dtx
@@ -0,0 +1,49 @@
+% \subsection{Sectioning}
+% Makes the table of contents look a bit better. This can be
+% redefined in the preamble if you do not like the appearance.
+% \DescribeMacro{\section}{The name of a section inside an activity.}
+% \begin{macrocode}
+%<*classXourse>
+\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{4.2em}}
+%</classXourse>
+% \end{macrocode}
+% \DescribeMacro{\subsection}{The name of a subsection inside an activity.}
+% \begin{macrocode}
+%<*classXourse>
+\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{4.2em}}
+%</classXourse>
+% \end{macrocode}
+% Xourse files can have parts.
+% \DescribeMacro{\part}{The name of a large part of a xourse.}
+% \begin{macrocode}
+%<*htXourse>
+\newcounter{ximera@part}
+\setcounter{ximera@part}{0}
+\renewcommand\part[1]{%
+\stepcounter{ximera@part}%
+\ifvmode \IgnorePar\fi \EndP%
+%\HCode{<h1 id="part\arabic{ximera@part}" class="card part">}#1\HCode{</h1>}% makes cards disappear?
+\HCode{<h1 id="part\arabic{ximera@part}" class="card part">#1</h1>}%
+\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
+% Paragraph commands emit spans.
+% \DescribeMacro{\paragraph}{A small heading.}
+% \begin{macrocode}
+%<*cfgXimera>
+\renewcommand{\paragraph}[1]{%
+ \HCode{<span class="paragraphHead">}%
+ #1%
+ \HCode{</span>}\par\IgnorePar}
+%</cfgXimera>
+% \end{macrocode}
+% \DescribeMacro{\subparagraph}{An even smaller heading.}
+% \begin{macrocode}
+%<*cfgXimera>
+\renewcommand{\subparagraph}[1]{%
+ \HCode{<span class="subparagraphHead">}%
+ #1%
+ \HCode{</span>}\par\IgnorePar}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/solution.dtx b/Master/texmf-dist/doc/latex/ximera/src/solution.dtx
new file mode 100644
index 00000000000..45f63010310
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/solution.dtx
@@ -0,0 +1,30 @@
+% \subsubsection{Solution}
+% \DescribeEnv{solution}{The solution to a problem.}
+% \begin{macrocode}
+%<*classXimera>
+%% solution environment
+\ifhandout % what follows is handout behavior
+\newenvironment{solution}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+\else
+\newenvironment{solution}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Solution:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+\fi
+
+
+
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/suppress.dtx b/Master/texmf-dist/doc/latex/ximera/src/suppress.dtx
new file mode 100644
index 00000000000..dcdcf924d19
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/suppress.dtx
@@ -0,0 +1,33 @@
+% \subsubsection{Suppress}
+% \DescribeEnv{suppress}{The suppress environment is a good way to suppress output without
+% commenting it. This way we can avoid many of the places we use
+% environ package and this should also avoid most of the verbatim
+% conflicts.}
+% This is code adapted from |syntonly.sty|.
+% \begin{macrocode}
+%<*classXimera>
+\font\dummyft@=dummy \relax
+\def\suppress{%
+ \begingroup\par
+ \parskip\z@
+ \offinterlineskip
+ \baselineskip=\z@skip
+ \lineskip=\z@skip
+ \lineskiplimit=\maxdimen
+ \dummyft@
+ \count@\sixt@@n
+ \loop\ifnum\count@ >\z@
+ \advance\count@\m@ne
+ \textfont\count@\dummyft@
+ \scriptfont\count@\dummyft@
+ \scriptscriptfont\count@\dummyft@
+ \repeat
+ \let\selectfont\relax
+ \let\mathversion\@gobble
+ \let\getanddefine@fonts\@gobbletwo
+ \tracinglostchars\z@
+ \frenchspacing
+ \hbadness\@M}
+\def\endsuppress{\par\endgroup}
+%</classXimera>
+% \end{macrocode} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/ximera/src/textcolor.dtx b/Master/texmf-dist/doc/latex/ximera/src/textcolor.dtx
new file mode 100644
index 00000000000..318d34365a8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/textcolor.dtx
@@ -0,0 +1,20 @@
+% Make \textcolor work using https://tex.stackexchange.com/questions/390127/textcolor-with-tex4ht
+% \begin{macrocode}
+%<*cfgXimera>
+\makeatletter
+\Configure{textcolor}{\HCode{<span style="color:\#\tsf@color;">}}{\HCode{</span>}}
+% redefine \textcolor command
+\let\oldtextcolor\textcolor
+
+\renewcommand\textcolor[2]{%
+ % we need to convert the current color to hexadecimal form usable in the style attribute
+ % the \tsf@color macro is used in the \Configure{textcolor} configuration to insert the
+ % CSS color
+ \extractcolorspec{#1}{\tsf@color}%
+ \expandafter\convertcolorspec\tsf@color{HTML}\tsf@color%
+ % call the original command
+ \oldtextcolor{#1}{#2}%
+}%
+\makeatother
+%</cfgXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/theorems.dtx b/Master/texmf-dist/doc/latex/ximera/src/theorems.dtx
new file mode 100644
index 00000000000..292d7a89b26
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/theorems.dtx
@@ -0,0 +1,174 @@
+% \subsubsection{Theorem and theorem-like environments}
+% On the web, a theorem is emitted as a special |<div>|.
+% \begin{macrocode}
+%<*htXimera>
+\newcommand{\ConfigureTheoremEnv}[1]{%
+\renewenvironment{#1}[1][]{\refstepcounter{problem}%
+\ifthenelse{\equal{##1}{}}{}{%
+ \HCode{<span class="theorem-like-title">}##1\HCode{</span>}%
+}}{}
+\ConfigureEnv{#1}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="theorem-like problem-environment #1" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}%
+}
+%</htXimera>
+%<classXimera>\theoremstyle{definition} % No italic (because this makes also text in TikZ italic !!!)
+% \end{macrocode}
+
+% The key is to make sure that the theorem environments are defined in
+% a corresponding fashion on the web and on paper.
+
+% \DescribeEnv{theorem}{Theorem}
+% \begin{macrocode}
+%<classXimera> \newtheorem{theorem}{Theorem}
+%<htXimera> \ConfigureTheoremEnv{theorem}
+% \end{macrocode}
+
+% \DescribeEnv{algorithm}{Algorithm}
+% \begin{macrocode}
+%<classXimera> \newtheorem{algorithm}{Algorithm}
+%<htXimera> \ConfigureTheoremEnv{algorithm}
+% \end{macrocode}
+
+% \DescribeEnv{axiom}{Axiom}
+% \begin{macrocode}
+%<classXimera> \newtheorem{axiom}{Axiom}
+%<htXimera> \ConfigureTheoremEnv{axiom}
+% \end{macrocode}
+
+% \DescribeEnv{claim}{Claim}
+% \begin{macrocode}
+%<classXimera> \newtheorem{claim}{Claim}
+%<htXimera> \ConfigureTheoremEnv{claim}
+% \end{macrocode}
+
+% \DescribeEnv{conclusion}{Conclusion}
+% \begin{macrocode}
+%<classXimera> \newtheorem{conclusion}{Conclusion}
+%<htXimera> \ConfigureTheoremEnv{conclusion}
+% \end{macrocode}
+
+% \DescribeEnv{condition}{Condition}
+% \begin{macrocode}
+%<classXimera> \newtheorem{condition}{Condition}
+%<htXimera> \ConfigureTheoremEnv{condition}
+% \end{macrocode}
+
+% \DescribeEnv{conjecture}{Conjecture}
+% \begin{macrocode}
+%<classXimera> \newtheorem{conjecture}{Conjecture}
+%<htXimera> \ConfigureTheoremEnv{conjecture}
+% \end{macrocode}
+
+% \DescribeEnv{corollary}{Corollary}
+% \begin{macrocode}
+%<classXimera> \newtheorem{corollary}{Corollary}
+%<htXimera> \ConfigureTheoremEnv{corollary}
+% \end{macrocode}
+
+% \DescribeEnv{criterion}{Criterion}
+% \begin{macrocode}
+%<classXimera> \newtheorem{criterion}{Criterion}
+%<htXimera> \ConfigureTheoremEnv{criterion}
+% \end{macrocode}
+
+% \DescribeEnv{definition}{Definition}
+% \begin{macrocode}
+%<classXimera> \newtheorem{definition}{Definition}
+%<htXimera> \ConfigureTheoremEnv{definition}
+% \end{macrocode}
+
+% \DescribeEnv{example}{Example}
+% \begin{macrocode}
+%<classXimera> \newtheorem{example}{Example}
+%<htXimera> \ConfigureTheoremEnv{example}
+% \end{macrocode}
+
+% \DescribeEnv{explanation}{Explanation}
+% \begin{macrocode}
+%<classXimera> \newtheorem*{explanation}{Explanation}
+%<htXimera> \ConfigureTheoremEnv{explanation}
+% \end{macrocode}
+
+% \DescribeEnv{fact}{Fact}
+% \begin{macrocode}
+%<classXimera> \newtheorem{fact}{Fact}
+%<htXimera> \ConfigureTheoremEnv{fact}
+% \end{macrocode}
+
+% \DescribeEnv{lemma}{Lemma}
+% \begin{macrocode}
+%<classXimera> \newtheorem{lemma}{Lemma}
+%<htXimera> \ConfigureTheoremEnv{lemma}
+% \end{macrocode}
+
+% \DescribeEnv{formula}{Formula}
+% \begin{macrocode}
+%<classXimera> \newtheorem{formula}{Formula}
+%<htXimera> \ConfigureTheoremEnv{formula}
+% \end{macrocode}
+
+% \DescribeEnv{idea}{Idea}
+% \begin{macrocode}
+%<classXimera> \newtheorem{idea}{Idea}
+%<htXimera> \ConfigureTheoremEnv{idea}
+% \end{macrocode}
+
+% \DescribeEnv{notation}{Notation}
+% \begin{macrocode}
+%<classXimera> \newtheorem{notation}{Notation}
+%<htXimera> \ConfigureTheoremEnv{notation}
+% \end{macrocode}
+
+% \DescribeEnv{model}{Model}
+% \begin{macrocode}
+%<classXimera> \newtheorem{model}{Model}
+%<htXimera> \ConfigureTheoremEnv{model}
+% \end{macrocode}
+
+% \DescribeEnv{observation}{Observation}
+% \begin{macrocode}
+%<classXimera> \newtheorem{observation}{Observation}
+%<htXimera> \ConfigureTheoremEnv{observation}
+% \end{macrocode}
+
+% \DescribeEnv{proposition}{Proposition}
+% \begin{macrocode}
+%<classXimera> \newtheorem{proposition}{Proposition}
+%<htXimera> \ConfigureTheoremEnv{proposition}
+% \end{macrocode}
+
+% \DescribeEnv{paradox}{Paradox}
+% \begin{macrocode}
+%<classXimera> \newtheorem{paradox}{Paradox}
+%<htXimera> \ConfigureTheoremEnv{paradox}
+% \end{macrocode}
+
+% \DescribeEnv{procedure}{Procedure}
+% \begin{macrocode}
+%<classXimera> \newtheorem{procedure}{Procedure}
+%<htXimera> \ConfigureTheoremEnv{procedure}
+% \end{macrocode}
+
+% \DescribeEnv{remark}{Remark}
+% \begin{macrocode}
+%<classXimera> \newtheorem{remark}{Remark}
+%<htXimera> \ConfigureTheoremEnv{remark}
+% \end{macrocode}
+
+% \DescribeEnv{summary}{Summary}
+% \begin{macrocode}
+%<classXimera> \newtheorem{summary}{Summary}
+%<htXimera> \ConfigureTheoremEnv{summary}
+% \end{macrocode}
+
+% \DescribeEnv{template}{Template}
+% \begin{macrocode}
+%<classXimera> \newtheorem{template}{Template}
+%<htXimera> \ConfigureTheoremEnv{template}
+% \end{macrocode}
+
+% \DescribeEnv{warning}{Warning}
+% \begin{macrocode}
+%<classXimera> \newtheorem{warning}{Warning}
+%<htXimera> \ConfigureTheoremEnv{warning}
+% \end{macrocode}
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/tikzexport.dtx b/Master/texmf-dist/doc/latex/ximera/src/tikzexport.dtx
new file mode 100644
index 00000000000..c89f26a49ae
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/tikzexport.dtx
@@ -0,0 +1,42 @@
+% \subsubsection{TikZ export}
+% We generate SVGs and PNGs for any TikZ images, via the
+% ``externalize'' feature of TikZ.
+%
+% Currently TikZ doesn't compile natively into the website because of
+% how the xake bake compilation works. In order to make Tikz work,
+% you need to get the tool \verb|mutool| on the machine that is
+% performing \verb|xake bake|.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \tikzexporttrue
+\fi
+
+\iftikzexport
+ \usetikzlibrary{external}
+
+ \ifdefined\HCode
+ % in htlatex, just include the svg files
+ \def\pgfsys@imagesuffixlist{.svg}
+
+ \tikzexternalize[prefix=./,mode=graphics if exists]
+ \else
+ % in pdflatex, actually generate the svg files
+ \tikzset{
+ /tikz/external/system call={
+ pdflatex \tikzexternalcheckshellescape
+ -halt-on-error -interaction=batchmode
+ -jobname "\image" "\\PassOptionsToClass{tikzexport}{ximera}\texsource";
+ mutool draw -F svg \image.pdf > \image.svg ; % mutool adds "1" to filename ????
+ mutool draw -o \image.svg \image.pdf ;
+ mutool draw -r 150 -c rgbalpha -o \image.png \image.pdf ;
+ ebb -x \image.png
+ }
+ }
+ \tikzexternalize[optimize=false,prefix=./]
+ \fi
+
+ \fi
+
+%</classXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/title.dtx b/Master/texmf-dist/doc/latex/ximera/src/title.dtx
new file mode 100644
index 00000000000..56380af5d73
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/title.dtx
@@ -0,0 +1,122 @@
+% \subsubsection{Titles and authors}
+%
+% \subsubsection{Authors}
+% \DescribeMacro{\author}{Activities have authors. Warn the user if no author is provided.}
+% \begin{macrocode}
+%<*classXimera>
+\let\@emptyauthor\@author
+\def\author#1{\gdef\@author{#1}}
+\def\@author{\@latex@warning@no@line{No \noexpand\author given}}
+%</classXimera>
+% \end{macrocode}
+% Include author name in meta tags
+% \begin{macrocode}
+%<*htXimera>
+\Configure{@HEAD}{\HCode{<meta name="author" content="}\@author\HCode{" />\Hnewline}}
+%</htXimera>
+% \end{macrocode}
+% The |\and| command would emit tabular environments which really
+% should not appear in a meta tag.
+% \begin{macrocode}
+%<htXimera|classXimera>\def\and{and }
+% \end{macrocode}
+
+% \subsubsection{Title}
+% \DescribeMacro{\title}{Activities have titles.}
+% \begin{macrocode}
+%<*classXimera>
+\let\title\relax
+\newcommand{\title}[1][]{{\protected@xdef\@pretitle{#1}}\protected@xdef\@title}
+
+\title{}
+
+\newcounter{titlenumber}
+\renewcommand{\thetitlenumber}{\arabic{titlenumber}}
+%\renewcommand{\thesection}{\arabic{titlenumber}} %% Makes section numbers work
+\setcounter{titlenumber}{0}
+
+\newpagestyle{main}{
+\sethead[\textsl{\ifnumbers\thetitlenumber\hspace{1em}\fi\@title}][][] % even
+{}{}{\textsl{\ifnumbers\thetitlenumber\hspace{1em}\fi\@title}} % odd
+\setfoot[\thepage][][] % even
+{}{}{\thepage} % odd
+}
+\pagestyle{main}
+% \end{macrocode}
+% \DescribeMacro{\maketitle}{In a \textsf{ximera} document, redefine
+% |\maketitle| and put them in a table of contents. The
+% |\phantomsection| is to fix the hrefs.}
+% \begin{macrocode}
+\renewcommand\maketitle{%
+ \addtocounter{titlenumber}{1}%
+ {\flushleft\large\bfseries \@pretitle\par\vspace{-1em}}
+ {\flushleft\LARGE\bfseries {\ifnumbers\thetitlenumber\fi}{\ifnumbers\hspace{1em}\else\hspace{0em}\fi}\@title \par }
+ \phantomsection%
+ \ifnumbers\addcontentsline{toc}{section}{\thetitlenumber~\@title}\else\addcontentsline{toc}{section}{\@title}\fi
+ \vskip .6em\noindent\textit\theabstract\setcounter{problem}{0}\setcounter{section}{0}\setcounter{subsection}{0}\par\vspace{2em}
+ \ifnooutcomes\else\let\thefootnote\relax\footnote{Learning outcomes: \theoutcomes}\fi
+ \ifnoauthor\else\let\thefootnote\relax\footnote{Author(s):~\@author}\fi
+ \aftergroup\@afterindentfalse
+ \aftergroup\@afterheading}
+
+\ifnumbers
+\setcounter{secnumdepth}{2}
+\renewcommand{\thesection}{\arabic{titlenumber}.\arabic{section}}
+\renewcommand{\thesubsection}{\arabic{titlenumber}.\arabic{section}.\arabic{subsection}}
+\else
+\setcounter{secnumdepth}{-2}
+\fi
+
+\def\activitystyle{}
+\newcounter{sectiontitlenumber}
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{2}
+\newcommand\chapterstyle{%
+ \def\activitystyle{activity-chapter}
+ \def\maketitle{%
+ \addtocounter{titlenumber}{1}%
+ {\flushleft\small\sffamily\bfseries\@pretitle\par\vspace{-1.5em}}%
+ {\flushleft\LARGE\sffamily\bfseries\thetitlenumber\hspace{1em}\@title \par }%
+ {\vskip .6em\noindent\textit\theabstract\setcounter{problem}{0}\setcounter{section}{0}}%
+ \par\vspace{2em}
+ \phantomsection\addcontentsline{toc}{section}{\textbf{\thetitlenumber\hspace{1em}\@title}}%
+}}
+
+
+\newcommand\sectionstyle{%
+ \def\activitystyle{activity-section}
+ \def\maketitle{%
+ \addtocounter{section}{1}
+ \setcounter{sectiontitlenumber}{\value{section}}
+ {\flushleft\small\sffamily\bfseries\@pretitle\par\vspace{-1.5em}}%
+ {\flushleft\Large\sffamily\bfseries\thetitlenumber.\thesectiontitlenumber\hspace{1em}\@title \par}%
+ {\vskip .6em\noindent\textit\theabstract\setcounter{subsection}{0}}%
+ \par\vspace{2em}
+ \phantomsection\addcontentsline{toc}{section}{\thetitlenumber.\thesectiontitlenumber\hspace{1em}\@title}%
+ \renewcommand\section{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\large\bfseries}}
+
+ \renewcommand\subsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\normalsize\bfseries}}
+
+}}
+
+
+\iftikzexport%% allows xake to handle \chapterstyle and \sectionstye
+\renewcommand\chapterstyle{\def\activitystyle{chapter}}
+\renewcommand\sectionstyle{\def\activitystyle{section}}
+\else
+\fi
+
+%</classXimera>
+% \end{macrocode}
+% Eliminate some formatting that we'll handle later with CSS
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\maketitle}{}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/ungraded.dtx b/Master/texmf-dist/doc/latex/ximera/src/ungraded.dtx
new file mode 100644
index 00000000000..78b3e297383
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/ungraded.dtx
@@ -0,0 +1,22 @@
+% \subsubsection{Ungraded activities}
+% \DescribeEnv{ungraded}{The |ungraded| environment is used to record
+% that certain parts of activities should not be worth points. For
+% example, if you want to use a multipleChoice as a survey question,
+% you can place it inside an |ungraded| environment.}
+% On the \LaTeX\ side, the |ungraded| environment does nothing.
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{ungraded}{}{}
+%</classXimera>
+% \end{macrocode}
+% But on the html side, |ungraded| wraps the activities in a div in
+% order to assign some weight to them for grading.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{ungraded}{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<div class="ungraded">}\IgnoreIndent%
+}{
+\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent%
+}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/utilitymacros.dtx b/Master/texmf-dist/doc/latex/ximera/src/utilitymacros.dtx
new file mode 100644
index 00000000000..e44b490e064
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/utilitymacros.dtx
@@ -0,0 +1,45 @@
+% \subsubsection{Utility macros}
+% These are a list of new utility macros that are generally useful and are loaded after packages and the Tikz Fix.
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \begin{macro}{NewCounter}
+% Improved version of |\newcounter| to check for existance before creating a counter to minimize conflicts with packages. Added by Jason Nowell
+% \begin{macrocode}
+\newcommand{\Make@Counter}[1]{% This is an internal macro that should probably be depreciated for the below universal macro.
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+
+\newcommand{\MakeCounter}[1]{%% Code located in "Utilitymacros.dtx"
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+% \end{macrocode}
+%</classXimera>
+% \end{macro}
+
+% \begin{macro}{latexProblemContent}
+% Added for those that want to use UF problems without using the problem filter code. This command is renewed into something meaningful in the 'ProblemSelector.sty'.
+% \begin{macrocode}
+\providecommand{\latexProblemContent}[1]{#1}
+% Iterate count for problem counts.
+\Make@Counter{Iteration@probCnt}
+% \end{macrocode}
+% \end{macro}
+
+
diff --git a/Master/texmf-dist/doc/latex/ximera/src/verbatim.dtx b/Master/texmf-dist/doc/latex/ximera/src/verbatim.dtx
new file mode 100644
index 00000000000..88da69a3180
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/verbatim.dtx
@@ -0,0 +1,36 @@
+% \subsubsection{Code listing environments}
+% \DescribeEnv{code}{A code answer environment} You cannot use Environ
+% with the fancyvrb/listings package if you want nested environments.
+%
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{code}{Verbatim}{numbers=left,frame=lines,label=Code,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+% \DescribeEnv{python}{A python answer environment} You cannot use
+% Environ with the fancyvrb/listings package if you want nested
+% environments
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{python}{Verbatim}{numbers=left,frame=lines,label=Python,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+% \DescribeEnv{javascriptCode}{A JavaScript answer environment} Unfortunately the name |javascript| is already used for the actual, executed (!) JavaScript interactive.
+% environments
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{javascriptCode}{Verbatim}{numbers=left,frame=lines,label=JavaScript,labelposition=topline}
+%</classXimera>
+%<*cfgXimera>
+\renewenvironment{javascriptCode}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{javascriptCode}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="javascript-code" id="javascript\arabic{identification}"><script type="text/text">}\HtmlParOff}{\HtmlParOn\HCode{\Hnewline</script></div>}}
+%</cfgXimera>
+% \end{macrocode}
+% On the web, translate verbatim and lstlisting blocks into |<pre>|
+% elements.
+% \begin{macrocode}
+%<*cfgXimera>
+\ConfigureEnv{verbatim}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
+\ConfigureEnv{lstlisting}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/src/xkcd.dtx b/Master/texmf-dist/doc/latex/ximera/src/xkcd.dtx
new file mode 100644
index 00000000000..1d08288803b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/src/xkcd.dtx
@@ -0,0 +1,13 @@
+% \subsubsection{XKCD}
+% \DescribeMacro{\xkcd}{Reference an XKCD cartoon.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\xkcd}[1]{#1}
+%</classXimera>
+% \end{macrocode}
+% On the web, this should be an image linked to the actual XKCD website.
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\xkcd}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<img src="https://imgs.xkcd.com/comics/#1.png">}}
+%</htXimera>
+% \end{macrocode}
diff --git a/Master/texmf-dist/doc/latex/ximera/ximera.pdf b/Master/texmf-dist/doc/latex/ximera/ximera.pdf
new file mode 100644
index 00000000000..7c771736db5
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ximera/ximera.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/ximera/Makefile b/Master/texmf-dist/source/latex/ximera/Makefile
new file mode 100644
index 00000000000..dd9c3677453
--- /dev/null
+++ b/Master/texmf-dist/source/latex/ximera/Makefile
@@ -0,0 +1,50 @@
+NAME = ximera
+SHELL = bash
+PWD = $(shell pwd)
+VERS = $(shell ltxfileinfo -v $(NAME).dtx|sed -e 's/^v//')
+LOCAL = $(shell kpsewhich --var-value TEXMFLOCAL)
+UTREE = $(shell kpsewhich --var-value TEXMFHOME)
+INPUTS = $(wildcard src/*.dtx) $(wildcard src/interactives/*.dtx) $(NAME).dtx
+OUTPUTS = ximera.cls xourse.cls ximera.4ht xourse.4ht ximera.cfg
+
+# based on
+#
+# https://stackoverflow.com/questions/2973445/gnu-makefile-rule-generating-a-few-targets-from-a-single-source-file
+#
+# I use a silly pattern rule to convince GNU make that multiple
+# outputs are created with a single invocation
+
+all: $(NAME).pdf $(OUTPUTS)
+ test -e README.txt && mv README.txt README || exit 0
+
+$(NAME)%pdf ximera%cls xourse%cls ximera%4ht xourse%4ht ximera%cfg: $(INPUTS)
+ pdflatex -shell-escape -recorder -interaction=batchmode $(NAME).dtx >/dev/null
+ if [ -f $(NAME).glo ]; then makeindex -q -s gglo.ist -o $(NAME).gls $(NAME).glo; fi
+ if [ -f $(NAME).idx ]; then makeindex -q -s gind.ist -o $(NAME).ind $(NAME).idx; fi
+ pdflatex --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+ pdflatex --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+
+clean:
+ rm -f $(NAME).{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out}
+
+distclean: clean
+ rm -f ximera.pdf README $(OUTPUTS)
+
+# BADBAD: The code below still needs to be fixed
+
+inst: all
+ mkdir -p $(UTREE)/{tex,source,doc}/latex/$(NAME)
+ cp $(NAME).dtx $(UTREE)/source/latex/$(NAME)
+ cp $(NAME).cls $(UTREE)/tex/latex/$(NAME)
+ cp $(NAME).pdf $(UTREE)/doc/latex/$(NAME)
+
+install: all
+ sudo mkdir -p $(LOCAL)/{tex,source,doc}/latex/$(NAME)
+ sudo cp $(NAME).dtx $(LOCAL)/source/latex/$(NAME)
+ sudo cp $(NAME).cls $(LOCAL)/tex/latex/$(NAME)
+ sudo cp $(NAME).pdf $(LOCAL)/doc/latex/$(NAME)
+
+zip: all
+ ln -sf . $(NAME)
+ zip -Drq $(PWD)/$(NAME)-$(VERS).zip $(NAME)/{README,$(NAME).{pdf,dtx}}
+ rm $(NAME)
diff --git a/Master/texmf-dist/source/latex/ximera/ximera.dtx b/Master/texmf-dist/source/latex/ximera/ximera.dtx
new file mode 100644
index 00000000000..27be2648db4
--- /dev/null
+++ b/Master/texmf-dist/source/latex/ximera/ximera.dtx
@@ -0,0 +1,362 @@
+% \iffalse meta-comment
+% vim: textwidth=75
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+|
+------------:| ------------------------------------------------------------
+ ximera:| Simultaneously write print and online interactive materials
+ Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+ E-mail:| bart.snapp@gmail.com
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+Short description:
+Some text about the class: probably the same as the abstract.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+------------:| ------------------------------------------------------------
+ ximera:| Simultaneously writing print and online interactive materials
+ Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+ E-mail:| bart.snapp@gmail.com
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+\endpreamble
+\postamble
+
+Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Bart Snapp. The source code can be found at:
+
+https://github.com/XimeraProject/ximeraLatex
+
+This work consists of the file ximera.dtx, the associated files
+under src/, and a Makefile.
+
+Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+
+Running "make inst" installs the files in the user's TeX tree.
+
+Running "make install" installs the files in the local TeX tree.
+
+\endpostamble
+
+\usedir{tex/latex/ximera}
+\input docstrip
+\askforoverwritefalse
+\generate{
+ \file{ximera.cls}{
+ \from{ximera.dtx}{classXimera}
+ \from{src/banner.dtx}{classXimera}
+ \from{src/options.dtx}{classXimera}
+ \from{src/packages.dtx}{classXimera}
+ \from{src/tikzexport.dtx}{classXimera}
+ \from{src/hyperref.dtx}{classXimera}
+ \from{src/suppress.dtx}{classXimera}
+ \from{src/makeCounter.dtx}{classXimera}
+ \from{src/pagesetup.dtx}{classXimera}
+ \from{src/metadata.dtx}{classXimera}
+ \from{src/outcomes.dtx}{classXimera}
+ \from{src/macros.dtx}{classXimera}
+ \from{src/theorems.dtx}{classXimera}
+ \from{src/enumerate.dtx}{classXimera}
+ \from{src/proof.dtx}{classXimera}
+ \from{src/only.dtx}{classXimera}
+ \from{src/problem.dtx}{classXimera}
+ \from{src/hints.dtx}{classXimera}
+ \from{src/abstract.dtx}{classXimera}
+ \from{src/title.dtx}{classXimera}
+ \from{src/image.dtx}{classXimera}
+ \from{src/interactives/javascript.dtx}{classXimera}
+ \from{src/interactives/include.dtx}{classXimera}
+ \from{src/interactives/geogebra.dtx}{classXimera}
+ \from{src/interactives/desmos.dtx}{classXimera}
+ \from{src/interactives/google.dtx}{classXimera}
+ \from{src/interactives/graph.dtx}{classXimera}
+ \from{src/link.dtx}{classXimera}
+ \from{src/interactives/video.dtx}{classXimera}
+ \from{src/answer.dtx}{classXimera}
+ \from{src/choice.dtx}{classXimera}
+ \from{src/solution.dtx}{classXimera}
+ \from{src/feedback.dtx}{classXimera}
+ \from{src/freeresponse.dtx}{classXimera}
+ \from{src/verbatim.dtx}{classXimera}
+ \from{src/dialogue.dtx}{classXimera}
+ \from{src/instructornotes.dtx}{classXimera}
+ \from{src/xkcd.dtx}{classXimera}
+ \from{src/foldable.dtx}{classXimera}
+ \from{src/leash.dtx}{classXimera}
+ \from{src/interactives/sagemath.dtx}{classXimera}
+ \from{src/jax.dtx}{classXimera}
+ \from{src/ungraded.dtx}{classXimera}
+ \from{src/clearEnv.dtx}{classXimera}
+ \from{src/hideEnv.dtx}{classXimera}
+ }
+}
+\generate{
+ \file{xourse.cls}{
+ \from{ximera.dtx}{classXourse}
+ \from{src/optionsxourse.dtx}{classXourse}
+ \from{src/activity.dtx}{classXourse}
+ \from{src/sectioning.dtx}{classXourse}
+ \from{src/logo.dtx}{classXourse}
+ \from{src/graded.dtx}{classXourse}
+ }
+}
+\generate{
+ \file{ximera.cfg}{
+ \from{ximera.dtx}{cfgXimera}
+ \from{src/pagesetup.dtx}{cfgXimera}
+ \from{src/packages.dtx}{cfgXimera}
+ \from{src/jax.dtx}{cfgXimera}
+ \from{src/sectioning.dtx}{cfgXimera}
+ \from{src/title.dtx}{cfgXimera}
+ \from{src/abstract.dtx}{cfgXimera}
+ \from{src/image.dtx}{cfgXimera}
+ \from{src/outcomes.dtx}{cfgXimera}
+ \from{src/textcolor.dtx}{cfgXimera}
+ \from{src/verbatim.dtx}{cfgXimera}
+ \from{src/html.dtx}{cfgXimera}
+ \from{src/ending.dtx}{cfgXimera}
+ }
+}
+\generate{
+ \file{ximera.4ht}{
+ \from{ximera.dtx}{htXimera}
+ \from{src/pagesetup.dtx}{htXimera}
+ \from{src/title.dtx}{htXimera}
+ \from{src/problem.dtx}{htXimera}
+ \from{src/macros.dtx}{htXimera}
+ \from{src/theorems.dtx}{htXimera}
+ \from{src/image.dtx}{htXimera}
+ \from{src/dialogue.dtx}{htXimera}
+ \from{src/foldable.dtx}{htXimera}
+ \from{src/interactives/video.dtx}{htXimera}
+ \from{src/xkcd.dtx}{htXimera}
+ \from{src/link.dtx}{htXimera}
+ \from{src/interactives/graph.dtx}{htXimera}
+ \from{src/answer.dtx}{htXimera}
+ \from{src/choice.dtx}{htXimera}
+ \from{src/freeresponse.dtx}{htXimera}
+ \from{src/interactives/javascript.dtx}{htXimera}
+ \from{src/interactives/include.dtx}{htXimera}
+ \from{src/interactives/geogebra.dtx}{htXimera}
+ \from{src/interactives/desmos.dtx}{htXimera}
+ \from{src/interactives/google.dtx}{htXimera}
+ \from{src/feedback.dtx}{htXimera}
+ \from{src/leash.dtx}{htXimera}
+ \from{src/labels.dtx}{htXimera}
+ \from{src/interactives/sagemath.dtx}{htXimera}
+ \from{src/ungraded.dtx}{htXimera}
+ \from{src/footnotes.dtx}{htXimera}
+ \from{src/ending.dtx}{htXimera}
+ }
+}
+\generate{
+ \file{xourse.4ht}{
+ \from{ximera.dtx}{htXourse}
+ \from{src/logo.dtx}{htXourse}
+ \from{src/metadata.dtx}{htXourse}
+ \from{src/activity.dtx}{htXourse}
+ \from{src/sectioning.dtx}{htXourse}
+ \from{src/graded.dtx}{htXourse}
+ \from{src/interactives/video.dtx}{htXourse}
+ \from{src/ending.dtx}{htXourse}
+ }
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/ximera}
+\generate{
+ \file{ximera.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/ximera}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{ximera.dtx}
+%</driver>
+%<classXimera|classXourse>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<classXimera>\ProvidesClass{ximera}
+%<classXourse>\ProvidesClass{xourse}
+%<classXimera|classXourse> [2024/5/8 v1.5
+%<classXimera> Simultaneously write print and online interactive materials]
+%<classXourse> Combining Ximera activities into Xourses]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[a4paper,margin=25mm,left=50mm,nohead]{geometry}
+\usepackage[numbered]{hypdoc}
+\usepackage{hyperref}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{\jobname.dtx}
+\section{ximera.cls}
+\DocInput{src/options.dtx}
+\DocInput{src/packages.dtx}
+\DocInput{src/pagesetup.dtx}
+\subsection{Structure}
+\DocInput{src/macros.dtx}
+\DocInput{src/theorems.dtx}
+\DocInput{src/enumerate.dtx}
+\DocInput{src/proof.dtx}
+\DocInput{src/problem.dtx}
+\DocInput{src/hints.dtx}
+\DocInput{src/solution.dtx}
+\DocInput{src/verbatim.dtx}
+\DocInput{src/dialogue.dtx}
+\DocInput{src/instructornotes.dtx}
+\DocInput{src/only.dtx}
+\DocInput{src/foldable.dtx}
+\DocInput{src/leash.dtx}
+\subsection{Document metadata}
+\DocInput{src/metadata.dtx}
+\DocInput{src/abstract.dtx}
+\DocInput{src/title.dtx}
+\DocInput{src/outcomes.dtx}
+\DocInput{src/labels.dtx}
+\subsection{Images}
+\DocInput{src/image.dtx}
+\DocInput{src/tikzexport.dtx}
+\DocInput{src/xkcd.dtx}
+\subsection{Links}
+\DocInput{src/hyperref.dtx}
+\subsection{Interactives}
+\DocInput{src/interactives/include.dtx}
+\DocInput{src/interactives/google.dtx}
+\DocInput{src/interactives/geogebra.dtx}
+\DocInput{src/interactives/desmos.dtx}
+\DocInput{src/interactives/graph.dtx}
+\DocInput{src/interactives/video.dtx}
+\DocInput{src/interactives/javascript.dtx}
+\DocInput{src/interactives/sagemath.dtx}
+\subsection{Answerables}
+\DocInput{src/answer.dtx}
+\DocInput{src/choice.dtx}
+\DocInput{src/freeresponse.dtx}
+\DocInput{src/feedback.dtx}
+\DocInput{src/ungraded.dtx}
+\subsection{Support for the web}
+\DocInput{src/jax.dtx}
+\DocInput{src/html.dtx}
+\subsection{Tools}
+\DocInput{src/suppress.dtx}
+\DocInput{src/ending.dtx}
+\section{xourse.cls}
+\DocInput{src/optionsxourse.dtx}
+\DocInput{src/activity.dtx}
+\DocInput{src/sectioning.dtx}
+\DocInput{src/graded.dtx}
+\DocInput{src/logo.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\def\fileversion{v1.5}
+%\def\filedate{2024/5/8}
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+%\title{\textsf{ximera} --- Simultaneously write print and online interactive materials.\thanks{This file
+% describes version \fileversion, last revised \filedate.}
+%}
+%\author{Jim Fowler \and Jeramiah Hocutt \and Oscar Levin \and Jason Nowell \and Wim Obbels \and Hans Parshall \and Bart Snapp}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+%\changes{v1.0.0}{2018/05/25}{First public release}
+%\changes{v1.5.0}{2024/05/8}{Submitting to CTAN}
+
+% \begin{abstract}
+% ``\textsf{Ximera} begins where \TeX\ ends.'' The \textsf{ximera}
+% class aids in the creation of handouts, worksheets, exercises, and
+% sections of textbooks to be used either individually or ``glued''
+% together via a \textsf{xourse} file. All \textsf{ximera} documents
+% can be deployed in an online interactive form via \texttt{xake}
+% See: \href{https://ximera.osu.edu}{Ximera Project} and the source
+% code on \href{https://github.com/XimeraProject}{GitHub}.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% Ximera, pronounced ``chimera,'' (\textbf{X}imera:
+% \textbf{I}nteractive, \textbf{M}athematics,
+% \textbf{E}\textbf{R}esources, for \textbf{A}ll) is an open-source
+% platform that provides tools for authoring and publishing (PDF and
+% Online), open-source, interactive educational content, such as textbooks, assessments, and online courses.
+% The Ximera document class provides the following features:
+% \begin{description}
+% \item[Formatting for different domains] The Ximera document class
+% provides built-in support for formatting documents in both PDF and
+% online formats, which can be a big time-saver for
+% authors. Additionally, it allows for the simultaneous creation of
+% solution manuals and teaching editions, which can be especially
+% useful for educators.
+%\item[Compiling individually or as a whole] With the Ximera document
+% class, authors can easily compile individual documents or an entire
+% collection of documents. This flexibility can be helpful when making
+% changes to specific documents without having to re-compile the
+% entire collection. Moreover, this allows an author to share large
+% portions of a text with another, with minimal changes.
+%\item[Interactive content] The Ximera document class allows for the
+% inclusion of interactive content, such as answer boxes that are
+% validated by a client-side computer algebra system. Additionally, it
+% allows for the embedding of YouTube videos, Desmos graphs, and
+% GeoGebra interactives.
+%\item[All content displayed] By default, the Ximera document class
+% displays all content to the author. This means the author see what
+% the students see, along with answers and solutions, and links (that
+% can be checked) to various interactive elements (when deployed, the
+% interactive elements are truly embedded). This can be especially
+% helpful for catching errors or inconsistencies in the content.
+%\end{description}
+%
+%Online examples can be found at
+%\begin{center}
+%\url{https://go.osu.edu/ximera-examples}
+%\end{center}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%\Finale
diff --git a/Master/texmf-dist/source/latex/ximera/ximera.ins b/Master/texmf-dist/source/latex/ximera/ximera.ins
new file mode 100644
index 00000000000..54545d64cce
--- /dev/null
+++ b/Master/texmf-dist/source/latex/ximera/ximera.ins
@@ -0,0 +1,211 @@
+%%
+%% This is file `ximera.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `install')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+------------:| ------------------------------------------------------------
+ ximera:| Simultaneously writing print and online interactive materials
+ Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+ E-mail:| bart.snapp@gmail.com
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+\endpreamble
+\postamble
+
+Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Bart Snapp. The source code can be found at:
+
+https://github.com/XimeraProject/ximeraLatex
+
+This work consists of the file ximera.dtx, the associated files
+under src/, and a Makefile.
+
+Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+
+Running "make inst" installs the files in the user's TeX tree.
+
+Running "make install" installs the files in the local TeX tree.
+
+\endpostamble
+
+\usedir{tex/latex/ximera}
+\input docstrip
+\askforoverwritefalse
+\generate{
+ \file{ximera.cls}{
+ \from{ximera.dtx}{classXimera}
+ \from{src/banner.dtx}{classXimera}
+ \from{src/options.dtx}{classXimera}
+ \from{src/packages.dtx}{classXimera}
+ \from{src/tikzexport.dtx}{classXimera}
+ \from{src/hyperref.dtx}{classXimera}
+ \from{src/suppress.dtx}{classXimera}
+ \from{src/makeCounter.dtx}{classXimera}
+ \from{src/pagesetup.dtx}{classXimera}
+ \from{src/metadata.dtx}{classXimera}
+ \from{src/outcomes.dtx}{classXimera}
+ \from{src/macros.dtx}{classXimera}
+ \from{src/theorems.dtx}{classXimera}
+ \from{src/enumerate.dtx}{classXimera}
+ \from{src/proof.dtx}{classXimera}
+ \from{src/only.dtx}{classXimera}
+ \from{src/problem.dtx}{classXimera}
+ \from{src/hints.dtx}{classXimera}
+ \from{src/abstract.dtx}{classXimera}
+ \from{src/title.dtx}{classXimera}
+ \from{src/image.dtx}{classXimera}
+ \from{src/interactives/javascript.dtx}{classXimera}
+ \from{src/interactives/include.dtx}{classXimera}
+ \from{src/interactives/geogebra.dtx}{classXimera}
+ \from{src/interactives/desmos.dtx}{classXimera}
+ \from{src/interactives/google.dtx}{classXimera}
+ \from{src/interactives/graph.dtx}{classXimera}
+ \from{src/link.dtx}{classXimera}
+ \from{src/interactives/video.dtx}{classXimera}
+ \from{src/answer.dtx}{classXimera}
+ \from{src/choice.dtx}{classXimera}
+ \from{src/solution.dtx}{classXimera}
+ \from{src/feedback.dtx}{classXimera}
+ \from{src/freeresponse.dtx}{classXimera}
+ \from{src/verbatim.dtx}{classXimera}
+ \from{src/dialogue.dtx}{classXimera}
+ \from{src/instructornotes.dtx}{classXimera}
+ \from{src/xkcd.dtx}{classXimera}
+ \from{src/foldable.dtx}{classXimera}
+ \from{src/leash.dtx}{classXimera}
+ \from{src/interactives/sagemath.dtx}{classXimera}
+ \from{src/jax.dtx}{classXimera}
+ \from{src/ungraded.dtx}{classXimera}
+ \from{src/clearEnv.dtx}{classXimera}
+ \from{src/hideEnv.dtx}{classXimera}
+ }
+}
+\generate{
+ \file{xourse.cls}{
+ \from{ximera.dtx}{classXourse}
+ \from{src/optionsxourse.dtx}{classXourse}
+ \from{src/activity.dtx}{classXourse}
+ \from{src/sectioning.dtx}{classXourse}
+ \from{src/logo.dtx}{classXourse}
+ \from{src/graded.dtx}{classXourse}
+ }
+}
+\generate{
+ \file{ximera.cfg}{
+ \from{ximera.dtx}{cfgXimera}
+ \from{src/pagesetup.dtx}{cfgXimera}
+ \from{src/packages.dtx}{cfgXimera}
+ \from{src/jax.dtx}{cfgXimera}
+ \from{src/sectioning.dtx}{cfgXimera}
+ \from{src/title.dtx}{cfgXimera}
+ \from{src/abstract.dtx}{cfgXimera}
+ \from{src/image.dtx}{cfgXimera}
+ \from{src/outcomes.dtx}{cfgXimera}
+ \from{src/textcolor.dtx}{cfgXimera}
+ \from{src/verbatim.dtx}{cfgXimera}
+ \from{src/html.dtx}{cfgXimera}
+ \from{src/ending.dtx}{cfgXimera}
+ }
+}
+\generate{
+ \file{ximera.4ht}{
+ \from{ximera.dtx}{htXimera}
+ \from{src/pagesetup.dtx}{htXimera}
+ \from{src/title.dtx}{htXimera}
+ \from{src/problem.dtx}{htXimera}
+ \from{src/macros.dtx}{htXimera}
+ \from{src/theorems.dtx}{htXimera}
+ \from{src/image.dtx}{htXimera}
+ \from{src/dialogue.dtx}{htXimera}
+ \from{src/foldable.dtx}{htXimera}
+ \from{src/interactives/video.dtx}{htXimera}
+ \from{src/xkcd.dtx}{htXimera}
+ \from{src/link.dtx}{htXimera}
+ \from{src/interactives/graph.dtx}{htXimera}
+ \from{src/answer.dtx}{htXimera}
+ \from{src/choice.dtx}{htXimera}
+ \from{src/freeresponse.dtx}{htXimera}
+ \from{src/interactives/javascript.dtx}{htXimera}
+ \from{src/interactives/include.dtx}{htXimera}
+ \from{src/interactives/geogebra.dtx}{htXimera}
+ \from{src/interactives/desmos.dtx}{htXimera}
+ \from{src/interactives/google.dtx}{htXimera}
+ \from{src/feedback.dtx}{htXimera}
+ \from{src/leash.dtx}{htXimera}
+ \from{src/labels.dtx}{htXimera}
+ \from{src/interactives/sagemath.dtx}{htXimera}
+ \from{src/ungraded.dtx}{htXimera}
+ \from{src/footnotes.dtx}{htXimera}
+ \from{src/ending.dtx}{htXimera}
+ }
+}
+\generate{
+ \file{xourse.4ht}{
+ \from{ximera.dtx}{htXourse}
+ \from{src/logo.dtx}{htXourse}
+ \from{src/metadata.dtx}{htXourse}
+ \from{src/activity.dtx}{htXourse}
+ \from{src/sectioning.dtx}{htXourse}
+ \from{src/graded.dtx}{htXourse}
+ \from{src/interactives/video.dtx}{htXourse}
+ \from{src/ending.dtx}{htXourse}
+ }
+}
+\endbatchfile
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%
+%% Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `ximera.ins'.
diff --git a/Master/texmf-dist/tex/latex/ximera/pgfsys-ximera.def b/Master/texmf-dist/tex/latex/ximera/pgfsys-ximera.def
new file mode 100644
index 00000000000..ffa32053045
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ximera/pgfsys-ximera.def
@@ -0,0 +1,62 @@
+%%
+%% This is file `pgfsys-ximera.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `pgfsys')
+%% src/pgfsys.dtx (with options: `pgfsys')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ProvidesFileRCS{pgfsys-ximera.def}
+
+\input pgfsys-dvisvgm.def
+
+\def\pgfsys@beginpicture{%
+ \special{color push gray 0}% make dvisvgm *not* add anything to text
+ \pgf@sys@svg@inpicturetrue% in a picture
+ \pgfsys@svg@boxmodefalse%
+ \special{dvisvgm:beginpicture}
+ \pgfsys@invoke{<g \ifx\pgf@sys@svg@last@stroke\relax\else
+ stroke="\pgf@sys@svg@last@stroke" \fi stroke-miterlimit="10" transform="scale(1,-1)">}}
+
+\def\pgfsys@endpicture{\pgfsys@invoke{</g>}\special{dvisvgm:endpicture}\special{color pop}}
+
+%%
+%% Copyright (C) 2018-2021 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version of
+%% this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `pgfsys-ximera.def'.
diff --git a/Master/texmf-dist/tex/latex/ximera/ximera.4ht b/Master/texmf-dist/tex/latex/ximera/ximera.4ht
new file mode 100644
index 00000000000..b808169f8a5
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ximera/ximera.4ht
@@ -0,0 +1,360 @@
+%%
+%% This is file `ximera.4ht',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `htXimera')
+%% src/pagesetup.dtx (with options: `htXimera')
+%% src/title.dtx (with options: `htXimera')
+%% src/problem.dtx (with options: `htXimera')
+%% src/macros.dtx (with options: `htXimera')
+%% src/theorems.dtx (with options: `htXimera')
+%% src/image.dtx (with options: `htXimera')
+%% src/dialogue.dtx (with options: `htXimera')
+%% src/foldable.dtx (with options: `htXimera')
+%% src/interactives/video.dtx (with options: `htXimera')
+%% src/xkcd.dtx (with options: `htXimera')
+%% src/link.dtx (with options: `htXimera')
+%% src/interactives/graph.dtx (with options: `htXimera')
+%% src/answer.dtx (with options: `htXimera')
+%% src/choice.dtx (with options: `htXimera')
+%% src/freeresponse.dtx (with options: `htXimera')
+%% src/interactives/javascript.dtx (with options: `htXimera')
+%% src/interactives/include.dtx (with options: `htXimera')
+%% src/interactives/geogebra.dtx (with options: `htXimera')
+%% src/interactives/desmos.dtx (with options: `htXimera')
+%% src/interactives/google.dtx (with options: `htXimera')
+%% src/feedback.dtx (with options: `htXimera')
+%% src/leash.dtx (with options: `htXimera')
+%% src/labels.dtx (with options: `htXimera')
+%% src/interactives/sagemath.dtx (with options: `htXimera')
+%% src/ungraded.dtx (with options: `htXimera')
+%% src/footnotes.dtx (with options: `htXimera')
+%% src/ending.dtx (with options: `htXimera')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{microtype}
+\DisableLigatures[f]{encoding=*}
+\NewEnviron{html}{\HCode{\BODY}}
+\Configure{@HEAD}{\HCode{<meta name="author" content="}\@author\HCode{" />\Hnewline}}
+\def\and{and }
+
+\renewcommand{\maketitle}{}
+
+
+\newcounter{identification}
+\setcounter{identification}{0}
+
+\newcommand{\ConfigureQuestionEnv}[2]{%
+\renewenvironment{#1}{\refstepcounter{problem}}{}%
+\ConfigureEnv{#1}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div role="article" class="problem-environment #2" id="problem\arabic{identification}">}}{\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent}{}{}%
+}
+
+\ConfigureQuestionEnv{problem}{problem}
+\ConfigureQuestionEnv{exercise}{exercise}
+\ConfigureQuestionEnv{question}{question}
+\ConfigureQuestionEnv{exploration}{exploration}
+\ConfigureQuestionEnv{hint}{hint}
+%%%%\ConfigureQuestionEnv{shuffle}{shuffle}
+\newcommand{\ConfigureTheoremEnv}[1]{%
+\renewenvironment{#1}[1][]{\refstepcounter{problem}%
+\ifthenelse{\equal{##1}{}}{}{%
+ \HCode{<span class="theorem-like-title">}##1\HCode{</span>}%
+}}{}
+\ConfigureEnv{#1}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="theorem-like problem-environment #1" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}%
+}
+
+
+ \ConfigureTheoremEnv{theorem}
+
+ \ConfigureTheoremEnv{algorithm}
+
+ \ConfigureTheoremEnv{axiom}
+
+ \ConfigureTheoremEnv{claim}
+
+ \ConfigureTheoremEnv{conclusion}
+
+ \ConfigureTheoremEnv{condition}
+
+ \ConfigureTheoremEnv{conjecture}
+
+ \ConfigureTheoremEnv{corollary}
+
+ \ConfigureTheoremEnv{criterion}
+
+ \ConfigureTheoremEnv{definition}
+
+ \ConfigureTheoremEnv{example}
+
+ \ConfigureTheoremEnv{explanation}
+
+ \ConfigureTheoremEnv{fact}
+
+ \ConfigureTheoremEnv{lemma}
+
+ \ConfigureTheoremEnv{formula}
+
+ \ConfigureTheoremEnv{idea}
+
+ \ConfigureTheoremEnv{notation}
+
+ \ConfigureTheoremEnv{model}
+
+ \ConfigureTheoremEnv{observation}
+
+ \ConfigureTheoremEnv{proposition}
+
+ \ConfigureTheoremEnv{paradox}
+
+ \ConfigureTheoremEnv{procedure}
+
+ \ConfigureTheoremEnv{remark}
+
+ \ConfigureTheoremEnv{summary}
+
+ \ConfigureTheoremEnv{template}
+
+ \ConfigureTheoremEnv{warning}
+
+\newcounter{imagealt}
+\setcounter{imagealt}{0}
+\renewenvironment{image}[1][]{\stepcounter{imagealt}%
+ \ifvmode \IgnorePar\fi \EndP%
+ \HCode{<div class="image-environment" role="img" aria-labelledby="image-alt-\arabic{imagealt}">}%
+}{\HCode{</div>}}
+\renewcommand{\alt}[1]{\HCode{<div style="display: none;" id="image-alt-\arabic{imagealt}">}#1\HCode{</div>}}
+\newcommand{\pgfsyspdfmark}[3]{}
+\renewenvironment{dialogue}{\begin{description}}{\end{description}}
+
+\ConfigureList{dialogue}%
+ {\EndP\HCode{<dl \a:LRdir class="dialogue">}%
+ \PushMacro\end:itm
+\global\let\end:itm=\empty}
+ {\PopMacro\end:itm \global\let\end:itm \end:itm
+\EndP\HCode{</dd></dl>}\ShowPar}
+ {\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
+ class="actor">}\bgroup \bf}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="speech">}}
+\renewenvironment{foldable}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div id="foldable\arabic{identification}" class="foldable">}}{\HCode{</div>}\IgnoreIndent}
+
+\renewenvironment{expandable}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div data-original="expandable" id="foldable\arabic{identification}" class="foldable">}
+
+}{\HCode{</div>}\IgnoreIndent}
+
+\renewcommand{\unfoldable}[1]{\HCode{<span class="unfoldable">}#1\HCode{</span>}}
+\renewcommand{\youtube}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="video youtube-player" data-youtube="#1">_</div>}}
+\renewcommand{\xkcd}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<img src="https://imgs.xkcd.com/comics/#1.png">}}
+
+\renewcommand*{\link}[2][]{%
+\ifthenelse{\equal{#1}{}}%
+{\url{#2}}
+{\href{#2}{#1}}}
+
+\AtBeginDocument{\renewcommand{\ref}[1]{\HCode{<a class="reference" href="\##1">#1</a>}}}
+
+
+\renewcommand{\graph}[2][]{\HCode{<div class="graph" data-options="#1">}#2\HCode{</div>}}
+
+\renewcommand{\answer}[2][false]{\HCode{<span class="answer respondable">}#2\HCode{</span>}}
+
+\def\validator[#1]{\stepcounter{identification}\HCode{<div class="validator" id="validator\arabic{identification}"><script type="text/javascript">function validator\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script>}}
+\def\endvalidator{\HCode{</div>}}
+
+\newcounter{choiceId}
+\renewcommand{\choice}[2][]{%
+\setkeys{choice}{correct=false}%
+\setkeys{choice}{#1}%
+\stepcounter{choiceId}\IgnorePar%
+\HCode{<span class="choice }%
+\ifthenelse{\boolean{\choice@correct}}{\HCode{correct}}{}
+\HCode{" }
+\ifthenelse{\equal{\choice@value}{}}{}{\HCode{data-value="\choice@value" }}
+\HCode{id="choice\arabic{choiceId}">}%
+#2\HCode{</span>}}
+\let\inlinechoice\choice
+
+
+\renewenvironment{multipleChoice}[1][]
+{\setkeys{multipleChoice}{#1}%
+\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="multiple-choice" }%
+\ifthenelse{\equal{\mc@id}{}}{}{\HCode{data-id="\mc@id" }}%
+\HCode{id="problem\arabic{identification}">}%
+}{\HCode{</div>}\IgnoreIndent}
+\ConfigureEnv{multipleChoice}{}{}{}{}
+
+\renewenvironment{multipleChoice@}{\refstepcounter{problem}}{}%
+\ConfigureEnv{multipleChoice@}{\stepcounter{identification}\IgnorePar\HCode{<span class="word-choice" id="word-choice\arabic{identification}">}}{\HCode{</span>}\IgnoreIndent}{}{}
+
+
+
+\renewenvironment{selectAll}{\refstepcounter{problem}}{}%
+\ConfigureEnv{selectAll}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="select-all" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}
+
+
+
+\renewenvironment{freeResponse}{\refstepcounter{problem}}{}%
+\ConfigureEnv{freeResponse}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="free-response" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}%
+
+
+
+
+\renewenvironment{javascript}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{javascript}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="javascript" id="javascript\arabic{identification}"><script type="text/javascript">}\HtmlParOff}{\HtmlParOn\HCode{</script></div>}}
+
+
+\def\js#1{\stepcounter{identification}\HCode{<span class="inline-javascript" id="javascript\arabic{identification}"><script type="text/javascript"> function javascript\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script></span>}}
+
+\renewcommand{\includeinteractive}[2][]{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div id="interactive\arabic{identification}" class="interactive"> </div>}\HCode{<script src="#2" data-argument="#1" data-target="interactive\arabic{identification}"> </script>}\IgnoreIndent}
+
+\define@key{geogebra}{rc}[true]{\def\geo@rc{#1}}
+\define@key{geogebra}{sdz}[true]{\def\geo@sdz{#1}}
+\define@key{geogebra}{smb}[true]{\def\geo@smb{#1}}
+\define@key{geogebra}{stb}[true]{\def\geo@stb{#1}}
+\define@key{geogebra}{stbh}[true]{\def\geo@stbh{#1}}
+\define@key{geogebra}{ld}[true]{\def\geo@ld{#1}}
+\define@key{geogebra}{sri}[true]{\def\geo@sri{#1}}
+\setkeys{geogebra}{rc=false,sdz=false,smb=false,stb=false,stbh=false,ld=false,sri=false}
+\renewcommand{\geogebra}[4][]{%
+ \setkeys{geogebra}{#1}% Set new keys
+ \HCode{<iframe scrolling="no" src="https://www.geogebra.org/material/iframe/id/#2/width/#3/height/#4/border/888888/rc/\geo@rc/ai/false/sdz/\geo@sdz/smb/\geo@smb/stb/\geo@stb/stbh/\geo@stbh/ld/\geo@ld/sri/\geo@sri/at/auto" width="#3px" height="#4px" style="border:0px; max-width: fit-content"> </iframe>}}
+\renewcommand{\desmos}[3]{\HCode{<iframe src="https://www.desmos.com/calculator/#1" width="100\%" height="#3px" style="border: 1px solid \#ccc" frameborder=0>This browser does not support embedded elements.</iframe>}}
+\renewcommand{\desmosThreeD}[3]{\HCode{<iframe src="https://www.desmos.com/3d/#1" width="#2px" height="#3px" style="border: 1px solid \#ccc" frameborder=0>This browser does not support embedded elements.</iframe>}}
+
+\renewcommand{\googleSheet}[5]{%
+ \ifthenelse{\equal{#4}{}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?widget=true">This browser does not support embedded elements.</iframe>}}%
+ {\ifthenelse{\equal{#5}{}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?single=true&amp;gid=#4&amp;widget=false">This browser does not support embedded elements.</iframe>}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?single=true&amp;gid=#4&amp;range=#5&amp;widget=false">This browser does not support embedded elements.</iframe>}}%
+ }%
+ }%
+
+\def\feedback{\@ifnextchar[{\@feedbackcode}{\@feedbackattempt}}
+\def\@feedbackattempt{\@feedbackcode[attempt]}
+\def\@feedbackcode[#1]{\stepcounter{identification}%
+\ifvmode \IgnorePar\fi \EndP%
+\ifthenelse{\equal{#1}{attempt}}{\HCode{<div class="feedback" data-feedback="attempt" id="feedback\arabic{identification}">}}%
+{\ifthenelse{\equal{#1}{correct}}{\HCode{<div class="feedback" data-feedback="correct" id="feedback\arabic{identification}">}}%
+{\HCode{<div class="feedback" data-feedback="script" id="feedback\arabic{identification}"><script type="text/javascript">function feedback\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script>}}}}
+\def\endfeedback{\HCode{</div>}\IgnoreIndent}
+
+\renewenvironment{leash}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<div style="overflow: auto; height: #1px">}}{\HCode{</div>}\IgnoreIndent}
+\let\oldlabel\label
+\renewcommand{\label}[1]{\oldlabel{#1}\HCode{<a class="ximera-label" id="#1"></a>}}
+\renewcommand{\ref}[1]{\HCode{<a class="reference" href="\##1">#1</a>}}
+
+\renewenvironment{sageCell}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sageCell}{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="sage"><script type="text/x-sage">}\HtmlParOff}{\HtmlParOn\HCode{\Hnewline</script></div>}}
+
+
+\renewenvironment{sageOutput}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sageOutput}{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="sageOutput"><script type="text/x-sage">}}{\HCode{\Hnewline</script></div>}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\renewenvironment{sagesilent}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sagesilent}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="text/sagemath">}\HtmlParOff}{\HtmlParOn\HCode{</script></div>}}
+\renewenvironment{ungraded}{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<div class="ungraded">}\IgnoreIndent%
+}{
+\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent%
+}
+\newcounter{footnoteNum}% This will track footnote numbering for the superscript and for the ID.
+\colorlet{fncolor}{red!30!blue}% This is the footnote text coloring. This will allow users to renew this coloring to their own preference if they want to. The default here is a blue coloring. NOTE: Currently; trying to use `footnotecolor' (as a more descriptive color name) breaks everything on my system pretty spectacularly for some reason. This may be just mine or a clash somewhere in the ximera package, so for now I'm leaving it as `fncolor'.
+\renewcommand{\footnote}[1]{\ifvmode\ShowPar\fi
+ \stepcounter{footnoteNum}% Step the counter to make a new footnote
+ %% The following HCode should setup the javascript function that shows or hides the footnote. If you want to change the footnote location, you may want to change the 'inline' part of x.style.display = 'inline'; to another CSS display type, like 'block' or 'inherit'. Current the `x.display.color' seems to not be working.
+ \HCode{
+ <script type="text/javascript">
+ function footnotefunction(ID) {
+ var x = document.getElementById(ID);
+ if (x.style.display === "none") {
+ x.style.color = "blue";
+ x.style.display = "inline";
+ } else {
+ x.style.display = "none";
+ }
+ }
+ </script>
+ }
+ %% The next command needs \expandafter in order to expand the counter footnoteNum into a roman character for the footnote ID. These seem to work better than arabic numerals in some cases, although why is not clear.
+ %% The next HCode controls the formatting for the actual footnote reference number (ie the superscript), but not the footnote itself.
+ \expandafter\HCode{
+ <span style=
+ "position=relative;
+ vertical-align=baseline;"
+ >
+ <button onclick="footnotefunction('footnote\roman{footnoteNum}')"
+ style=
+ "background:none!important;
+ color:inherit;
+ border:none;
+ padding:0!important;
+ font: inherit;
+ cursor: pointer;"
+ >
+ <sup>}[\arabic{footnoteNum}]\HCode{</sup></button>
+ }
+ %% The next command needs \expandafter in order to expand the counter footnoteNum into a roman character for the footnote ID. These seem to work better than arabic numerals in some cases, although why is not clear. Note that the ID counter style choice (roman vs arabic etc) needs to match the previous HCode choice.
+ %% Currently most of the formatting doesn't seem to work as intended, so that still needs to be figured out and fixed. Ideally we would have the footnote appear as a bubble above the footnote superscript when the footnote superscript is clicked.
+ \expandafter\HCode{
+ <span id="footnote\roman{footnoteNum}"
+ style=
+ "display:none;
+ min-width:20em;
+ position:relative;
+ left:2px;
+ padding:5px;
+ color:blue;
+ word-wrap:break-word;
+ z-index=9999;
+ overflow=auto;"
+ >
+ }
+ \textcolor{fncolor}{(#1)}% Display the actual footnote here with color `fncolor' and within ()'s.
+ \HCode{</span></span>}
+ }% End of footnote definition.
+
+\Hinput{ximera}
+
+
+%%
+%% Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `ximera.4ht'.
diff --git a/Master/texmf-dist/tex/latex/ximera/ximera.cfg b/Master/texmf-dist/tex/latex/ximera/ximera.cfg
new file mode 100644
index 00000000000..848ab9ce54d
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ximera/ximera.cfg
@@ -0,0 +1,183 @@
+%%
+%% This is file `ximera.cfg',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `cfgXimera')
+%% src/pagesetup.dtx (with options: `cfgXimera')
+%% src/packages.dtx (with options: `cfgXimera')
+%% src/jax.dtx (with options: `cfgXimera')
+%% src/sectioning.dtx (with options: `cfgXimera')
+%% src/title.dtx (with options: `cfgXimera')
+%% src/abstract.dtx (with options: `cfgXimera')
+%% src/image.dtx (with options: `cfgXimera')
+%% src/outcomes.dtx (with options: `cfgXimera')
+%% src/textcolor.dtx (with options: `cfgXimera')
+%% src/verbatim.dtx (with options: `cfgXimera')
+%% src/html.dtx (with options: `cfgXimera')
+%% src/ending.dtx (with options: `cfgXimera')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\Preamble{xhtml}
+
+\NoFonts
+
+\Configure{VERSION}{}
+
+\Configure{DOCTYPE}{\HCode{<!doctype html>\Hnewline}}
+
+\Configure{HTML}{\HCode{<html lang="en">\Hnewline}}{\HCode{\Hnewline</html>}}
+
+\Configure{@HEAD}{\HCode{<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/\string~gurari/TeX4ht/)" />\Hnewline}}
+\Configure{@HEAD}{\HCode{<meta name="ximera" content="version 0.0.1" />\Hnewline}}
+\Configure{@HEAD}{\HCode{<link href="https://ximera.osu.edu/public/stylesheets/standalone.css" rel="stylesheet" media="screen"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<script type="text/javascript" async src="https://ximera.osu.edu/public/javascripts/standalone.min.js"></script>\Hnewline}}
+\immediate\write18{sed -i "/@/d" \jobname.jax}
+\immediate\write18{sed -i "s/\string#\string#\string\\([0-9]\string\\)/\string#\string\\1/g" \jobname.jax}
+
+\Configure{BVerbatimInput}{}{}{}{}
+
+\Configure{verbatiminput}{}{}{}{}
+
+\makeatletter
+\def\FV@Space{\space}
+\makeatother
+
+\Configure{BODY}{%
+\HCode{<body>\Hnewline}%
+\Tg<div class="preamble">%
+\Tg<script type="math/tex">%
+\BVerbatimInput{\jobname.jax}%
+\Tg</script>%
+\IfFileExists{\jobname.ids}{\HCode{<script type="text/javascript">\Hnewline}%
+\BVerbatimInput{\jobname.ids}%
+\HCode{</script>\Hnewline}%
+\Tg</div>%
+}{}
+}{%
+\HCode{</body>\Hnewline}%
+}
+\newtoks\eqtoks
+\def\AltMath#1${\eqtoks{#1}%
+ \HCode{<script type="math/tex">\the\eqtoks</script>}$}
+\Configure{$}{}{}{\expandafter\AltMath}
+
+\def\AltlMathI#1\){\eqtoks{#1}%
+ \HCode{<script type="math/tex">\the\eqtoks</script>}\)}
+\Configure{()}{\AltlMathI}{}
+
+\def\AltlDisplay#1\]{\eqtoks{#1}%
+ \HCode{<script type="math/tex; mode=display">\the\eqtoks</script>}\]}
+\Configure{[]}{\AltlDisplay}{}
+
+\def\AltlDisplayI#1$${\eqtoks{#1}%
+ \HCode{<script type="math/tex; mode=display">\the\eqtoks</script>}$$}
+\Configure{$$}{}{}{\expandafter\AltlDisplayI}
+\newcommand\VerbMath[1]{%
+\renewenvironment{#1}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{#1}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="math/tex; mode=display"> \string\begin{#1}\Hnewline}\HtmlParOff}{\HtmlParOn\HCode{\string\end{#1}</script>}}
+}
+\ScriptEnv{matlabEquation}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="math/tex; mode=display"> \string\begin{equation}\Hnewline}\HtmlParOff}{\HtmlParOn\HCode{\string\end{equation}</script>}}
+
+\VerbMath{equation}
+\VerbMath{equation*}
+\VerbMath{align}
+\VerbMath{align*}
+\VerbMath{alignat}
+\VerbMath{alignat*}
+\VerbMath{eqnarray}
+\VerbMath{eqnarray*}
+
+\renewcommand{\paragraph}[1]{%
+ \HCode{<span class="paragraphHead">}%
+ #1%
+ \HCode{</span>}\par\IgnorePar}
+\renewcommand{\subparagraph}[1]{%
+ \HCode{<span class="subparagraphHead">}%
+ #1%
+ \HCode{</span>}\par\IgnorePar}
+
+\DeclareGraphicsExtensions{.jpg,.png,.gif,.svg}
+\Configure{graphics*}
+{svg}{
+ {\Configure{Needs}{File: \Gin@base.svg}\Needs{}}
+ \Picture[]{\csname Gin@base\endcsname.svg \csname a:Gin-dim\endcsname}%
+}
+\ifcsname ifstandalone\endcsname
+ \ifstandalone
+ \renewcommand\includegraphics[2][]{}
+ \fi
+\renewcommand{\outcome}[1]{
+ \Configure{@HEAD}{\HCode{<meta name="learning-outcome" content="#1"/>\Hnewline}}
+}
+\IfFileExists{\jobname.oc}{\input{\jobname.oc}}{}
+
+\renewcommand{\outcome}[1]{%
+ \HCode{<span class="learning-outcome">#1</span>}
+}
+\makeatletter
+\Configure{textcolor}{\HCode{<span style="color:\#\tsf@color;">}}{\HCode{</span>}}
+\let\oldtextcolor\textcolor
+
+\renewcommand\textcolor[2]{%
+ % we need to convert the current color to hexadecimal form usable in the style attribute
+ % the \tsf@color macro is used in the \Configure{textcolor} configuration to insert the
+ % CSS color
+ \extractcolorspec{#1}{\tsf@color}%
+ \expandafter\convertcolorspec\tsf@color{HTML}\tsf@color%
+ % call the original command
+ \oldtextcolor{#1}{#2}%
+}%
+\makeatother
+\renewenvironment{javascriptCode}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{javascriptCode}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="javascript-code" id="javascript\arabic{identification}"><script type="text/text">}\HtmlParOff}{\HtmlParOn\HCode{\Hnewline</script></div>}}
+\ConfigureEnv{verbatim}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
+\ConfigureEnv{lstlisting}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
+\Configure{textbf}{\ifvmode\ShowPar\fi\HCode{<strong>}}{\HCode{</strong>}}
+\Configure{textit}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
+\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
+\Configure{texttt}{\ifvmode\ShowPar\fi\HCode{<code>}}{\HCode{</code>}}
+
+
+\begin{document}
+\EndPreamble
+%%
+%% Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `ximera.cfg'.
diff --git a/Master/texmf-dist/tex/latex/ximera/ximera.cls b/Master/texmf-dist/tex/latex/ximera/ximera.cls
new file mode 100644
index 00000000000..952f2e3e8fd
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ximera/ximera.cls
@@ -0,0 +1,1112 @@
+%%
+%% This is file `ximera.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `classXimera')
+%% src/banner.dtx (with options: `classXimera')
+%% src/options.dtx (with options: `classXimera')
+%% src/packages.dtx (with options: `classXimera')
+%% src/tikzexport.dtx (with options: `classXimera')
+%% src/hyperref.dtx (with options: `classXimera')
+%% src/suppress.dtx (with options: `classXimera')
+%% src/makeCounter.dtx (with options: `classXimera')
+%% src/pagesetup.dtx (with options: `classXimera')
+%% src/metadata.dtx (with options: `classXimera')
+%% src/outcomes.dtx (with options: `classXimera')
+%% src/macros.dtx (with options: `classXimera')
+%% src/theorems.dtx (with options: `classXimera')
+%% src/enumerate.dtx (with options: `classXimera')
+%% src/proof.dtx (with options: `classXimera')
+%% src/only.dtx (with options: `classXimera')
+%% src/problem.dtx (with options: `classXimera')
+%% src/hints.dtx (with options: `classXimera')
+%% src/abstract.dtx (with options: `classXimera')
+%% src/title.dtx (with options: `classXimera')
+%% src/image.dtx (with options: `classXimera')
+%% src/interactives/javascript.dtx (with options: `classXimera')
+%% src/interactives/include.dtx (with options: `classXimera')
+%% src/interactives/geogebra.dtx (with options: `classXimera')
+%% src/interactives/desmos.dtx (with options: `classXimera')
+%% src/interactives/google.dtx (with options: `classXimera')
+%% src/interactives/graph.dtx (with options: `classXimera')
+%% src/link.dtx (with options: `classXimera')
+%% src/interactives/video.dtx (with options: `classXimera')
+%% src/answer.dtx (with options: `classXimera')
+%% src/choice.dtx (with options: `classXimera')
+%% src/solution.dtx (with options: `classXimera')
+%% src/feedback.dtx (with options: `classXimera')
+%% src/freeresponse.dtx (with options: `classXimera')
+%% src/verbatim.dtx (with options: `classXimera')
+%% src/dialogue.dtx (with options: `classXimera')
+%% src/instructornotes.dtx (with options: `classXimera')
+%% src/xkcd.dtx (with options: `classXimera')
+%% src/foldable.dtx (with options: `classXimera')
+%% src/leash.dtx (with options: `classXimera')
+%% src/interactives/sagemath.dtx (with options: `classXimera')
+%% src/jax.dtx (with options: `classXimera')
+%% src/ungraded.dtx (with options: `classXimera')
+%% src/clearEnv.dtx (with options: `classXimera')
+%% src/hideEnv.dtx (with options: `classXimera')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesClass{ximera}
+ [2024/5/8 v1.5
+ Simultaneously write print and online interactive materials]
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\m\message
+\def\w{\m{::}}\def\t{\m{:::}}\def\s{\m{ }}\def\n{\m{^^J}}\def\u{::'}\def\d{'::}\def\v{:::::}
+\n
+\m{\d.}\s\m{.\u}\w\m{}\m{\v}\s\s\m{\v}\m{}\m{.\v\v\v::::.}\s\m{}\t\n
+\s\m{\d.\u}\s\w\t\t\s\t\t\w\m{}\s\s\s\s\s\s\s\t\s\m{\u::}\n
+\s\s\t\s\s\w\t\m{}\t\t\m{}\t\m{ ::::\v}\m{.\v:\u}\m{}\m{\u}\m{\d}\n
+\s\m{.\u::.}\s\w\t\m{}\t\t\m{}\t\w\s\s\s\s\w\m{}\m{\d.}\s\m{\u}\s\m{\d}\n
+\m{.\u}\s\m{\d.}\w\t\s\m{':\u}\s\t\m{\d\v::}\w\s\m{}\m{\d.\u}\s\s\m{\d}\n
+\n
+\let\w\undefined
+\let\t\undefined
+\let\s\undefined
+\let\n\undefined
+\let\u\undefined
+\let\d\undefined
+\let\v\undefined
+\let\m\undefined
+\newif\ifhandout
+\handoutfalse
+\DeclareOption{handout}{\handouttrue}
+\newif\ifnoauthor
+\noauthorfalse
+\DeclareOption{noauthor}{\noauthortrue}
+\newif\ifnooutcomes
+\nooutcomesfalse
+\DeclareOption{nooutcomes}{\nooutcomestrue}
+\newif\ifinstructornotes
+\instructornotesfalse
+\DeclareOption{instructornotes}{\instructornotestrue}
+\DeclareOption{noinstructornotes}{\instructornotestrue}
+\newif\ifhints
+\hintsfalse
+\DeclareOption{hints}{\hintstrue}
+\newif\ifnewpage
+\newpagefalse
+\DeclareOption{newpage}{\newpagetrue}
+\newif\ifnumbers
+\numbersfalse
+\DeclareOption{numbers}{\numberstrue}
+\newif\ifwordchoicegiven
+\wordchoicegivenfalse
+\DeclareOption{wordchoicegiven}{\wordchoicegiventrue}
+\newif\iffirstinlinechoice% Support for other wordchoice command contents.
+\firstinlinechoicetrue
+
+\newif\ifxake
+\xakefalse
+\DeclareOption{xake}{\xaketrue}
+
+\newif\iftikzexport
+\tikzexportfalse
+\DeclareOption{tikzexport}{%
+ \tikzexporttrue%
+ \handoutfalse%
+ \numbersfalse%
+ \newpagefalse%
+ \hintsfalse%
+ \nooutcomesfalse%
+}
+
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{article}%
+}
+\ProcessOptions\relax
+\LoadClass{article}
+
+\ifdefined\HCode
+ \xaketrue%
+ \tikzexporttrue%
+ \handoutfalse%
+ \numbersfalse%
+ \newpagefalse%
+ \hintsfalse%
+ \nooutcomesfalse%
+\fi
+
+
+\RequirePackage[makeroom]{cancel}
+\RequirePackage[inline]{enumitem}
+\RequirePackage[pagestyles]{titlesec}
+\RequirePackage{titletoc}
+\RequirePackage{titling}
+\RequirePackage{url}
+\RequirePackage[table]{xcolor}
+\RequirePackage{tikz}
+\RequirePackage{pgfplots}
+\usepgfplotslibrary{groupplots}
+\usetikzlibrary{calc}
+\RequirePackage{fancyvrb}
+\RequirePackage{forloop}
+\RequirePackage{environ}% Included to allow saving of environment contents. This does *not* play well with various verbatem environments however and would be great to find a way around utilizing this package. One option is the "Suppress" command included below.
+\RequirePackage{amssymb}% Included to have access to math typeset.
+\RequirePackage{amsmath}% Included to have access to math typeset.
+\RequirePackage{amsthm}% Included to have access to math typeset.
+\RequirePackage{xifthen}% http://ctan.org/pkg/xifthen
+\RequirePackage{multido}% http://ctan.org/pkg/multido
+\RequirePackage{listings} %% is this required???
+
+\RequirePackage{xkeyval}
+
+\RequirePackage{comment}
+\RequirePackage{gettitlestring}
+\RequirePackage{nameref}
+\RequirePackage{epstopdf}
+\ifdefined\HCode
+ \tikzexporttrue
+\fi
+
+\iftikzexport
+ \usetikzlibrary{external}
+
+ \ifdefined\HCode
+ % in htlatex, just include the svg files
+ \def\pgfsys@imagesuffixlist{.svg}
+
+ \tikzexternalize[prefix=./,mode=graphics if exists]
+ \else
+ % in pdflatex, actually generate the svg files
+ \tikzset{
+ /tikz/external/system call={
+ pdflatex \tikzexternalcheckshellescape
+ -halt-on-error -interaction=batchmode
+ -jobname "\image" "\\PassOptionsToClass{tikzexport}{ximera}\texsource";
+ mutool draw -F svg \image.pdf > \image.svg ; % mutool adds "1" to filename ????
+ mutool draw -o \image.svg \image.pdf ;
+ mutool draw -r 150 -c rgbalpha -o \image.png \image.pdf ;
+ ebb -x \image.png
+ }
+ }
+ \tikzexternalize[optimize=false,prefix=./]
+ \fi
+
+ \fi
+
+\ifdefined\HCode
+\RequirePackage{hyperref}
+\else
+\RequirePackage[pdfpagelabels,colorlinks=true,allcolors=blue!30!black]{hyperref}
+\pdfstringdefDisableCommands{\def\hskip{}}%% quiets warning
+\fi
+\font\dummyft@=dummy \relax
+\def\suppress{%
+ \begingroup\par
+ \parskip\z@
+ \offinterlineskip
+ \baselineskip=\z@skip
+ \lineskip=\z@skip
+ \lineskiplimit=\maxdimen
+ \dummyft@
+ \count@\sixt@@n
+ \loop\ifnum\count@ >\z@
+ \advance\count@\m@ne
+ \textfont\count@\dummyft@
+ \scriptfont\count@\dummyft@
+ \scriptscriptfont\count@\dummyft@
+ \repeat
+ \let\selectfont\relax
+ \let\mathversion\@gobble
+ \let\getanddefine@fonts\@gobbletwo
+ \tracinglostchars\z@
+ \frenchspacing
+ \hbadness\@M}
+\def\endsuppress{\par\endgroup}
+\newcommand{\Make@Counter}[1]{% This is an internal macro that should probably be depreciated for the below universal macro.
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+\newcounter{#1}
+\setcounter{#1}{0}
+}
+{%If so, reset to 0.
+\setcounter{#1}{0}
+}
+}
+
+\newcommand{\MakeCounter}[1]{%% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+\newcounter{#1}
+\setcounter{#1}{0}
+}
+{%If so, reset to 0.
+\setcounter{#1}{0}
+}
+}
+
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{5pt}
+\oddsidemargin 62pt
+\evensidemargin 62pt
+\textwidth 345pt
+\headheight 14pt
+
+\newcommand{\license}{\excludecomment}
+
+\newcommand{\acknowledgement}{\excludecomment}
+
+\renewcommand{\tag}{\excludecomment}
+\def\theoutcomes{}
+
+\ifdefined\HCode%
+ \newcommand{\outcome}[1]{}
+\else%
+ \newwrite\outcomefile
+ \immediate\openout\outcomefile=\jobname.oc
+
+ \newcommand{\outcome}[1]{\edef\theoutcomes{\theoutcomes #1~}%
+ \immediate\write\outcomefile{\unexpanded{\outcome}{#1}}}
+ \fi%
+\everymath{\displaystyle}
+\let\prelim\lim
+\renewcommand{\lim}{\displaystyle\prelim}
+\theoremstyle{definition} % No italic (because this makes also text in TikZ italic !!!)
+
+
+ \newtheorem{theorem}{Theorem}
+
+ \newtheorem{algorithm}{Algorithm}
+
+ \newtheorem{axiom}{Axiom}
+
+ \newtheorem{claim}{Claim}
+
+ \newtheorem{conclusion}{Conclusion}
+
+ \newtheorem{condition}{Condition}
+
+ \newtheorem{conjecture}{Conjecture}
+
+ \newtheorem{corollary}{Corollary}
+
+ \newtheorem{criterion}{Criterion}
+
+ \newtheorem{definition}{Definition}
+
+ \newtheorem{example}{Example}
+
+ \newtheorem*{explanation}{Explanation}
+
+ \newtheorem{fact}{Fact}
+
+ \newtheorem{lemma}{Lemma}
+
+ \newtheorem{formula}{Formula}
+
+ \newtheorem{idea}{Idea}
+
+ \newtheorem{notation}{Notation}
+
+ \newtheorem{model}{Model}
+
+ \newtheorem{observation}{Observation}
+
+ \newtheorem{proposition}{Proposition}
+
+ \newtheorem{paradox}{Paradox}
+
+ \newtheorem{procedure}{Procedure}
+
+ \newtheorem{remark}{Remark}
+
+ \newtheorem{summary}{Summary}
+
+ \newtheorem{template}{Template}
+
+ \newtheorem{warning}{Warning}
+
+\renewcommand{\theenumi}{\textup{(\alph{enumi})}}
+\renewcommand{\labelenumi}{\theenumi}
+\renewcommand{\theenumii}{\textup{(\roman{enumii})}}
+\renewcommand{\labelenumii}{\theenumii}
+\renewcommand{\qedsymbol}{$\blacksquare$}
+\renewenvironment{proof}[1][\proofname]
+ {\begin{trivlist}\item[\hskip \labelsep \itshape \bfseries #1{}\hspace{2ex}]}
+{\qed\end{trivlist}}
+
+\ifxake
+ \newenvironment{prompt}{}{}
+\else
+\ifhandout
+\NewEnviron{prompt}{}
+\else
+\newenvironment{prompt}
+ {\bgroup\color{gray!50!black}}
+ {\egroup}
+\fi
+\fi
+
+\ifhandout
+\NewEnviron{onlineOnly}{
+\iftikzexport
+\BODY
+\else
+\fi
+}
+\else
+\newenvironment{onlineOnly}
+ {\bgroup\color{red!50!black}}
+{\egroup}
+\fi
+
+\newcommand{\pdfOnly}[1]{\iftikzexport\else #1\fi}
+
+
+\providecommand{\latexProblemContent}[1]{#1}
+\Make@Counter{Iteration@probCnt}
+\newcommand{\hang}{% top theorem decoration
+ \begingroup%
+ \setlength{\unitlength}{.005\linewidth}% \linewidth/200
+ \begin{picture}(0,0)(1.5,0)%
+ \linethickness{1pt} \color{black!50}%
+ \put(-3,2){\line(1,0){206}}% Top line
+ \multido{\iA=2+-1,\iB=50+-10}{5}{% Top hangs
+ \color{black!\iB}%
+ \put(-3,\iA){\line(0,-1){1}}% Top left hang
+ %\put(203,\iA){\line(0,-1){1}}% Top right hang
+ }%
+ \end{picture}%
+ \endgroup%
+}%
+\newcommand{\hung}{% bottom theorem decoration
+ \nobreak
+ \begingroup%
+ \setlength{\unitlength}{.005\linewidth}% \linewidth/200
+ \begin{picture}(0,0)(1.5,0)%
+ \linethickness{1pt} \color{black!50}%
+ \put(60,0){\line(1,0){143}}% Bottom line
+ \multido{\iA=0+1,\iB=50+-10}{5}{% Bottom hangs
+ \color{black!\iB}%
+ %\put(-3,\iA){\line(0,1){1}}% Bottom left hang
+ \put(203,\iA){\line(0,1){1}}% Bottom right hang
+ \put(\iB,0){\line(60,0){10}}% Left fade out
+ }%
+ \end{picture}%
+ \endgroup%
+}%
+\MakeCounter{problem}
+\newcommand{\problemNumber}{
+\ifcsname c@depth\Roman{problem@Depth}Count\endcsname% Check to see if counter exists
+\else
+\expandafter\newcounter{depth\Roman{problem@Depth}Count}
+\expandafter\setcounter{depth\Roman{problem@Depth}Count}{0}
+\fi
+
+\expandafter\stepcounter{depth\Roman{problem@Depth}Count}
+\arabic{depthICount}% The first problem depth, what use to be |\theproblem|.
+
+\forloop{Iteration@probCnt}{2}{\arabic{Iteration@probCnt} < \numexpr \value{problem@Depth} + 1 \relax}{%
+ .\expandafter\arabic{depth\Roman{Iteration@probCnt}Count}% Get the problem number of the next depth level and append it with a ".".
+}
+}
+
+%%%%%% Configure various problem environment commands
+\Make@Counter{problem@Depth}
+
+%%%% Configure environments start content
+
+\newcommand{\problemEnvironmentStart}[2]{%
+
+\stepcounter{problem@Depth}% Started a problem, so we've sunk another problem layer.
+\def\spaceatend{#1}%
+\begin{trivlist}%
+\item%
+ [%
+ \hskip\labelsep\sffamily\bfseries
+ #2 \problemNumber% Determine the correct number of the problem, and the format of that number.
+]%
+\slshape
+}
+
+%%%%% Configure environments end content
+
+\newcommand{\problemEnvironmentEnd}{%This configures all the end content for a problem.
+\stepcounter{problem@Depth}
+\ifcsname c@depth\Roman{problem@Depth}Count\endcsname
+\expandafter\ifnum\expandafter\value{depth\Roman{problem@Depth}Count}>0
+\expandafter\setcounter{depth\Roman{problem@Depth}Count}{0}
+\fi
+\fi
+
+\addtocounter{problem@Depth}{-2}% Exited a problem so we've exited a problem layer. Need -2 because we steppped once at the start to check for needing a depth-level count reset.
+
+\par\addvspace{.5ex}\nobreak\noindent\hung %% line at the bottom
+
+\ifhandout
+\ifnewpage
+\newpage
+\fi
+\fi
+\end{trivlist}
+}
+
+%%%% Now populate the old environment names
+
+\newenvironment{problem}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Problem}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{exercise}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Exercise}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{exploration}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Exploration}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{question}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Question}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newcounter{hintLevel}
+\setcounter{hintLevel}{0}
+\newenvironment{hint}{}{}
+\renewenvironment{hint}
+{
+\ifhandout
+\setbox0\vbox\bgroup
+\else
+\begin{trivlist}\item[\hskip \labelsep\small\slshape\bfseries Hint:\hspace{2ex}]
+\small\slshape
+\fi
+\stepcounter{hintLevel}
+}
+{
+\ifhandout
+\egroup\ignorespacesafterend
+\else
+\end{trivlist}
+\fi
+\addtocounter{hintLevel}{-1}
+}
+
+\ifhints
+\renewenvironment{hint}{
+\begin{trivlist}\item[\hskip \labelsep\small\slshape\bfseries Hint:\hspace{2ex}]
+\small\slshape}
+{\end{trivlist}}
+\fi
+
+\let\abstract\relax
+\let\endabstract\relax
+\NewEnviron{abstract}{\protected@xdef\theabstract{\BODY}}
+\let\@emptyauthor\@author
+\def\author#1{\gdef\@author{#1}}
+\def\@author{\@latex@warning@no@line{No \noexpand\author given}}
+\def\and{and }
+
+\let\title\relax
+\newcommand{\title}[1][]{{\protected@xdef\@pretitle{#1}}\protected@xdef\@title}
+
+\title{}
+
+\newcounter{titlenumber}
+\renewcommand{\thetitlenumber}{\arabic{titlenumber}}
+\setcounter{titlenumber}{0}
+
+\newpagestyle{main}{
+\sethead[\textsl{\ifnumbers\thetitlenumber\hspace{1em}\fi\@title}][][] % even
+{}{}{\textsl{\ifnumbers\thetitlenumber\hspace{1em}\fi\@title}} % odd
+\setfoot[\thepage][][] % even
+{}{}{\thepage} % odd
+}
+\pagestyle{main}
+\renewcommand\maketitle{%
+ \addtocounter{titlenumber}{1}%
+ {\flushleft\large\bfseries \@pretitle\par\vspace{-1em}}
+ {\flushleft\LARGE\bfseries {\ifnumbers\thetitlenumber\fi}{\ifnumbers\hspace{1em}\else\hspace{0em}\fi}\@title \par }
+ \phantomsection%
+ \ifnumbers\addcontentsline{toc}{section}{\thetitlenumber~\@title}\else\addcontentsline{toc}{section}{\@title}\fi
+ \vskip .6em\noindent\textit\theabstract\setcounter{problem}{0}\setcounter{section}{0}\setcounter{subsection}{0}\par\vspace{2em}
+ \ifnooutcomes\else\let\thefootnote\relax\footnote{Learning outcomes: \theoutcomes}\fi
+ \ifnoauthor\else\let\thefootnote\relax\footnote{Author(s):~\@author}\fi
+ \aftergroup\@afterindentfalse
+ \aftergroup\@afterheading}
+
+\ifnumbers
+\setcounter{secnumdepth}{2}
+\renewcommand{\thesection}{\arabic{titlenumber}.\arabic{section}}
+\renewcommand{\thesubsection}{\arabic{titlenumber}.\arabic{section}.\arabic{subsection}}
+\else
+\setcounter{secnumdepth}{-2}
+\fi
+
+\def\activitystyle{}
+\newcounter{sectiontitlenumber}
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{2}
+\newcommand\chapterstyle{%
+ \def\activitystyle{activity-chapter}
+ \def\maketitle{%
+ \addtocounter{titlenumber}{1}%
+ {\flushleft\small\sffamily\bfseries\@pretitle\par\vspace{-1.5em}}%
+ {\flushleft\LARGE\sffamily\bfseries\thetitlenumber\hspace{1em}\@title \par }%
+ {\vskip .6em\noindent\textit\theabstract\setcounter{problem}{0}\setcounter{section}{0}}%
+ \par\vspace{2em}
+ \phantomsection\addcontentsline{toc}{section}{\textbf{\thetitlenumber\hspace{1em}\@title}}%
+}}
+
+\newcommand\sectionstyle{%
+ \def\activitystyle{activity-section}
+ \def\maketitle{%
+ \addtocounter{section}{1}
+ \setcounter{sectiontitlenumber}{\value{section}}
+ {\flushleft\small\sffamily\bfseries\@pretitle\par\vspace{-1.5em}}%
+ {\flushleft\Large\sffamily\bfseries\thetitlenumber.\thesectiontitlenumber\hspace{1em}\@title \par}%
+ {\vskip .6em\noindent\textit\theabstract\setcounter{subsection}{0}}%
+ \par\vspace{2em}
+ \phantomsection\addcontentsline{toc}{section}{\thetitlenumber.\thesectiontitlenumber\hspace{1em}\@title}%
+ \renewcommand\section{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\large\bfseries}}
+
+ \renewcommand\subsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\normalsize\bfseries}}
+
+}}
+
+\iftikzexport%% allows xake to handle \chapterstyle and \sectionstye
+\renewcommand\chapterstyle{\def\activitystyle{chapter}}
+\renewcommand\sectionstyle{\def\activitystyle{section}}
+\else
+\fi
+
+\NewEnviron{image}[1][3in]{%
+ \begin{center}\resizebox{#1}{!}{\BODY}\end{center}% resize and center
+}
+\newcommand{\alt}[1]{}
+
+
+\DefineVerbatimEnvironment{javascript}{Verbatim}{numbers=left,frame=lines,label=JavaScript,labelposition=topline}
+
+
+\def\js#1{\mbox{\texttt{\detokenize{#1}}}}
+
+
+\define@key{interactive}{id}{\def\interactive@id{#1}}
+\setkeys{interactive}{id=}
+\newcommand{\includeinteractive}[2][]{
+\setkeys*{interactive}{#1}%
+\ifthenelse{\equal{\interactive@id}{}}{}{\recordvariable{\interactive@id}}
+Interactive
+}
+
+\newcommand{\geogebra}[3]{Geogebra link: \url{https://www.geogebra.org/m/#1}}
+\newcommand{\desmos}[3]{Desmos link: \url{https://www.desmos.com/calculator/#1}}
+\newcommand{\desmosThreeD}[3]{Desmos3D link: \url{https://www.desmos.com/3d/#1}}
+\newcommand{\googleSheet}[5]{%
+ Google Spreadsheet link: \url{https://docs.google.com/spreadsheets/d/#1}%
+}
+
+
+\newcommand{\graph}[2][]{\text{Graph of $#2$}}
+
+
+\newcommand*{\link}[2][]{#1%
+\ifthenelse{\equal{#1}{}}%
+{\footnote{Link: \url{#2}}}%
+{\footnote{See #1 at \url{#2}}}
+}
+
+\newcommand{\youtube}[1]{YouTube link: \url{https://www.youtube.com/watch?v=#1}}
+
+\ifdefined\HCode
+\newcommand{\recordvariable}[1]{}
+\else
+\newwrite\idfile
+\immediate\openout\idfile=\jobname.ids
+\newcommand{\recordvariable}[1]{\ifthenelse{\equal{#1}{}}{}{\immediate\write\idfile{var #1;}}}
+\fi
+\define@key{answer}{given}[true]{\def\ans@given{#1}}
+\define@key{answer}{tolerance}{\def\ans@tol{#1}}
+\define@key{answer}{validator}{}
+\define@key{answer}{id}{\def\ans@id{#1}}
+\define@key{answer}{format}{}
+\define@key{answer}{onlinenoinput}[false]{}
+\define@key{answer}{onlineshowanswerbutton}[false]{}
+\setkeys{answer}{id=,given=false,onlinenoinput=false,onlineshowanswerbutton=false}
+
+\newcommand{\answerFormatLength}{2cm}
+
+\newcommand{\answerFormatDots}[1]{\ldots\ldots}
+\newcommand{\answerFormatLine}[1]{\protect\rule{\answerFormatLength}{0.4pt}}
+\newcommand{\answerFormatFlexibleLine}[1]{\protect\rule{\widthof{$#1$}*2}{0.4pt}}
+\newcommand{\answerFormatFlexibleBox}[1]{\fbox{\scalebox{2}{\phantom{$#1$}}}}
+
+\newcommand{\answerFormatPlain}[1]{\ensuremath{#1}}
+\newcommand{\answerFormatBlue}[1]{\color{blue}\ensuremath{#1}}
+\newcommand{\answerFormatBoxed}[1]{\fbox{\ensuremath{#1}}}
+\newcommand{\answerFormatBoxedGiven}[1]{\underset{\scriptstyle\mathrm{given}}{\fbox{\ensuremath{#1}}}}
+
+\let\handoutAnswerFormat\answerFormatDots
+\let\defaultAnswerFormat\answerFormatBlue
+\let\givenAnswerFormat\answerFormatBoxedGiven
+
+\newcommand{\answer}[2][]{%
+\ifmmode%
+\setkeys{answer}{#1}%
+\recordvariable{\ans@id}
+\ifthenelse{\boolean{\ans@given}}
+{% Start then statement
+\ifhandout
+#2
+\else
+\givenAnswerFormat{#2} %% in case the argument helps formatting
+\fi
+}% End then statement
+{% Start else statement
+\ifhandout
+\handoutAnswerFormat{#2} %% in case the argument helps formatting
+\else% show answer in box outside handout mode
+\defaultAnswerFormat{#2} %% in case the argument helps formatting
+\fi
+}% End else statement
+\else%
+\GenericError{\space\space\space\space}% Throw an error based on... something? -- Jason
+{Attempt to use \@backslashchar answer outside of math mode}
+{See https://github.com/ximeraProject/ximeraLatex for explanation.}
+{Need to use either inline or display math.}%
+\fi
+}
+\define@key{choice}{value}[]{\def\choice@value{#1}}
+\define@boolkey{choice}{correct}[true]{\def\choice@correct{#1}}
+\define@key{multipleChoice}{id}{\def\mc@id{#1}}
+\define@key{otherchoice}{value}[]{\def\otherchoice@value{#1}}
+\define@boolkey{otherchoice}{correct}[true]{\def\otherchoice@correct{#1}}
+\setkeys{choice}{correct=false,value=}
+\setkeys{multipleChoice}{id=}
+\setkeys{otherchoice}{correct=false,value=}
+\newcommand{\choice}[2][]{%
+\setkeys{choice}{#1}%
+\item{#2}
+\ifthenelse{\boolean{\choice@correct}}
+ {% Begin then result
+ \ifhandout% if it's a handout do nothing.
+ \else% otherwise place a checkmark when you select the "correct choice"... maybe? -- Jason
+ \,\checkmark\,\setkeys{choice}{correct=false}
+ \fi
+ }% End then result
+ {}% Begin/End else result.
+}
+
+\newcommand{\choiceEXP}[2][]{%
+\expandafter\setkeys\expandafter{choice}{#1}%
+\item{#2}
+\ifthenelse{\boolean{\choice@correct}}
+{% Begin then result
+\ifhandout
+\else
+\,\checkmark\,\setkeys{choice}{correct=false}
+\fi
+}% End then result
+{}% Begin/End else result.
+} %% note all the {} are needed in case the choice has [] in it.
+
+\newcommand{\otherchoice}[2][]{%
+\ignorespaces%
+\setkeys{otherchoice}{#1}%
+\ifthenelse{\boolean{\otherchoice@correct}}%
+{% Start then result
+#2\ignorespaces\setkeys{otherchoice}{correct=false}\ignorespaces%
+}% End then result
+{}% Start/End else result
+\ignorespaces%
+}%
+\newcommand{\inlinechoice}[2][]{%
+\setkeys{choice}{#1}%
+\iffirstinlinechoice
+(\hspace{-.25em}
+\firstinlinechoicefalse
+\else
+/
+\fi
+#2
+\ifthenelse{\boolean{\choice@correct}}%
+{% Start then result
+\ifhandout\else\checkmark\ignorespaces\setkeys{choice}{correct=false}\ignorespaces\fi%
+}% End then result
+{}% Start/End else result
+\hspace{-.25em}\ignorespaces%
+}
+
+
+\newenvironment{multipleChoice}[1][]
+{% Environment Start Code
+\setkeys{multipleChoice}{#1}%
+\recordvariable{\mc@id}%
+\begin{trivlist}
+\item[\hskip \labelsep\small\bfseries Multiple Choice:]\hfil
+\begin{enumerate}
+}% Note this means that \item has to be the first line after \begin{multipleChoice}.
+{% Environment End Code
+\end{enumerate}
+\end{trivlist}
+}
+
+\newenvironment{multipleChoice@}[1][]{}{)}
+
+
+\newcommand{\wordChoice}[1]{%
+\let\choicetemp\choice% Assign a "choicetemp" command to duplicate choice.
+\ifwordchoicegiven% If wordchoice option is on, we need to juggle around some definitions.
+\let\choice\otherchoice%
+#1
+\else% If it isn't the regular "choice" command should work.
+\let\choice\inlinechoice%
+\begin{multipleChoice@}%
+#1%
+\end{multipleChoice@}%
+\fi%
+\let\choice\choicetemp% Now that choicetmp has been manipulated to what we want, replace choice with it.
+}%
+
+
+\newenvironment{selectAll}[1][]
+{\begin{trivlist}\item[\hskip \labelsep\small\bfseries Select All Correct Answers:]\hfil\begin{enumerate}}
+ {\end{enumerate}\end{trivlist}}
+
+
+
+%% solution environment
+\ifhandout % what follows is handout behavior
+\newenvironment{solution}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+\else
+\newenvironment{solution}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Solution:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+\end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+\fi
+
+\newcommand{\PH@Command}{}
+\newenvironment{validator}[1][]{
+\def\PH@Command{#1}% Use PH@Command to hold the content and be a target for "\expandafter" to expand once.
+\mbox{\texttt{\detokenize\expandafter{\PH@Command}}}% Now expand PH@Command once and then detokenize.
+}{}
+\ifhandout%
+\newenvironment{feedback}
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+\else
+\newenvironment{feedback}[1][attempt]{
+
+\def\PH@Command{#1}% Use PH@Command to hold the content and be a target for "\expandafter" to expand once.
+
+\begin{trivlist}% Begin the trivlist to use formating of the "Feedback" label.
+\item[\hskip \labelsep\small\slshape\bfseries Feedback% Format the "Feedback" label. Don't forget the space.
+(\texttt{\detokenize\expandafter{\PH@Command}}):% Format (and detokenize) the condition for feedback to trigger
+\hspace{2ex}]\small\slshape% Insert some space before the actual feedback given.
+}{
+\end{trivlist}
+}
+
+\fi
+\newboolean{given} %% required for freeResponse
+\setboolean{given}{true} %% could be replaced by a key=value pair later if needed
+
+\ifhandout
+\newenvironment{freeResponse}[1][false]%
+{%
+\def\givenatend{\boolean{#1}}
+\ifthenelse{\boolean{#1}}
+{% Begin then result
+\begin{trivlist}
+\item
+}% End then result
+{% Begin else result
+\setbox0\vbox\bgroup
+}% End else result
+}
+{%
+\ifthenelse{\givenatend}
+{% Begin then result
+\end{trivlist}
+}% End then result
+{% Begin else result
+\egroup
+}% End else result
+}
+\else
+\newenvironment{freeResponse}[1][false]%
+{% Environment Beginning Code
+ \ifthenelse{\boolean{#1}}%% Could probably change this with just putting the (given) in the boolean?-- Jason
+ {% Begin then result
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Free Response (Given):\hspace{2ex}]
+ }% End then result
+{% Begin else result
+\begin{trivlist}
+\item[\hskip \labelsep\bfseries Free Response:\hspace{2ex}]
+}% End else result
+}
+{% Environment Ending Code
+\end{trivlist}
+}
+\fi
+
+
+\DefineVerbatimEnvironment{code}{Verbatim}{numbers=left,frame=lines,label=Code,labelposition=topline}
+\DefineVerbatimEnvironment{python}{Verbatim}{numbers=left,frame=lines,label=Python,labelposition=topline}
+\DefineVerbatimEnvironment{javascriptCode}{Verbatim}{numbers=left,frame=lines,label=JavaScript,labelposition=topline}
+\newenvironment{dialogue}{%
+ \renewcommand\descriptionlabel[1]{\hspace{\labelsep}\textbf{##1:}}
+ \begin{description}%
+}{%
+ \end{description}%
+}
+
+%% instructor intro/instructor notes
+%%
+\ifhandout % what follows is handout behavior
+\ifinstructornotes
+\newenvironment{instructorIntro}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Introduction:\hspace{2ex}]
+}
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+\else
+\newenvironment{instructorIntro}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%If this mysteriously starts breaking
+ % remove \ignorespacesafterend
+ \egroup\ignorespacesafterend
+ }
+ \fi
+\else% for handout, so what follows is default
+\ifinstructornotes
+\newenvironment{instructorIntro}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+{%
+ \egroup
+}
+ \else
+ \newenvironment{instructorIntro}%
+{%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Introduction:\hspace{2ex}]
+}
+{
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+}
+ \fi
+\fi
+
+%% instructorNotes environment
+\ifhandout % what follows is handout behavior
+\ifinstructornotes
+\newenvironment{instructorNotes}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Notes:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+\end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \else
+\newenvironment{instructorNotes}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+{%
+ \egroup
+}
+ \fi
+\else% for handout, so what follows is default
+\ifinstructornotes
+\newenvironment{instructorNotes}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+ \else
+ \newenvironment{instructorNotes}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Notes:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \fi
+ \fi
+
+\newcommand{\xkcd}[1]{#1}
+
+\colorlet{textColor}{black} % since textColor is referenced below
+\colorlet{background}{white} % since background is referenced below
+
+%% pretty-foldable
+\newenvironment{foldable}{%
+}{%
+}
+
+%% pretty-expandable
+\newenvironment{expandable}{%
+}{%
+}
+
+\newcommand{\unfoldable}[1]{#1}
+
+
+\newenvironment{leash}[1]{%
+}{%
+}
+
+
+\IfFileExists{sagetex.sty}{\RequirePackage{sagetex}}{}
+
+\DefineVerbatimEnvironment{sageCell}{Verbatim}{numbers=left,frame=lines,label=SAGE,labelposition=topline}
+
+\DefineVerbatimEnvironment{sageOutput}{Verbatim}{numbers=left,frame=lines,label=SAGE-Output,labelposition=topline}
+
+
+\ifdefined\HCode
+ \else
+ \newwrite\myfile
+ \immediate\openout\myfile=\jobname.jax
+\fi
+\ifdefined\HCode
+ \else
+ \immediate\write\myfile{\unexpanded{\newenvironment}{prompt}{}{}}
+\fi
+\ifdefined\HCode
+ \else
+\let\@oldargdef\@argdef
+\long\def\@argdef#1[#2]#3{%
+\immediate\write\myfile{\unexpanded{\newcommand}{\unexpanded{#1}}[\unexpanded{#2}]{\unexpanded{#3}}}%
+\@oldargdef#1[#2]{#3}%
+}
+
+\let\@OldDeclareMathOperator\DeclareMathOperator
+\renewcommand{\DeclareMathOperator}[2]{\@OldDeclareMathOperator{#1}{#2}\immediate\write\myfile{\unexpanded{\DeclareMathOperator}{\unexpanded{#1}}{\unexpanded{#2}}}}
+
+\fi
+\newenvironment{ungraded}{}{}
+\newcommand{\clearEnv}[1]{
+ %% Syntax: \clearEnv{envName}
+ % #1 is envName is the name of the environment you want to clear. This will (re)define the
+ % begin and end environments, as well as the internal counter from \newtheoremenv to \relax.
+ \expandafter\let\csname #1\endcsname\relax
+ \expandafter\let\csname end#1\endcsname\relax
+ \expandafter\let\csname c@#1\endcsname\relax
+ }
+
+\newcommand{\hideEnv}[2][]{
+ %% Syntax: \hideEnv[NewCode]{environmentName}
+
+ \expandafter\def\csname temp@#2\endcsname\csname #2\endcsname
+ \expandafter\def\csname temp@end#2\endcsname\csname end#2\endcsname
+ \expandafter\def\csname#2\endcsname{
+ \ifnum\value{depth@Check}<1
+ Suppress Should start here.
+ \suppress
+ \fi
+ \stepcounter{depth@Check}
+
+ }
+ \expandafter\def\csname end#2\endcsname{
+ \addtocounter{depth@Check}{-1}
+ \ifnum\value{depth@Check}<1
+ Suppress Should End Here.
+ \endsuppress
+ \fi
+
+ \noexpand{#1}
+ }
+ }
+
+%%
+%% Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `ximera.cls'.
diff --git a/Master/texmf-dist/tex/latex/ximera/xourse.4ht b/Master/texmf-dist/tex/latex/ximera/xourse.4ht
new file mode 100644
index 00000000000..48be25fb73c
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ximera/xourse.4ht
@@ -0,0 +1,100 @@
+%%
+%% This is file `xourse.4ht',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `htXourse')
+%% src/logo.dtx (with options: `htXourse')
+%% src/metadata.dtx (with options: `htXourse')
+%% src/activity.dtx (with options: `htXourse')
+%% src/sectioning.dtx (with options: `htXourse')
+%% src/graded.dtx (with options: `htXourse')
+%% src/interactives/video.dtx (with options: `htXourse')
+%% src/ending.dtx (with options: `htXourse')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\Configure{@HEAD}{%
+ \HCode{<meta name="og:image" content="}%
+\ifdefined\xourse@logo%
+ \xourse@logo%
+\fi%
+\HCode{" />\Hnewline}}%
+
+
+
+\Configure{@HEAD}{\HCode{<meta name="description" content="xourse" />\Hnewline}}
+
+
+\renewcommand\activity[2][]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<a class="activity card \activitystyle" href="#2" data-options="#1">#2</a>}\IgnoreIndent%
+}
+
+
+
+
+\renewcommand\practice[2][]{%
+ \ifvmode\IgnorePar\fi\EndP%
+ \HCode{<a class="activity card practice" href="#2" data-options="#1">#2</a>}%
+ \IgnoreIndent%
+}
+
+\newcounter{ximera@part}
+\setcounter{ximera@part}{0}
+\renewcommand\part[1]{%
+\stepcounter{ximera@part}%
+\ifvmode \IgnorePar\fi \EndP%
+\HCode{<h1 id="part\arabic{ximera@part}" class="card part">#1</h1>}%
+\IgnoreIndent%
+}
+\renewenvironment{graded}[1]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<div class="graded" data-weight="#1">}\IgnoreIndent%
+}{
+\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent%
+}
+\renewcommand\youtube[1]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<a class="youtube" href="https://www.youtube.com/watch?v=#1">#1</a>}\IgnoreIndent%
+}
+
+\Hinput{xourse}
+
+%%
+%% Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `xourse.4ht'.
diff --git a/Master/texmf-dist/tex/latex/ximera/xourse.cls b/Master/texmf-dist/tex/latex/ximera/xourse.cls
new file mode 100644
index 00000000000..7deae992dc6
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ximera/xourse.cls
@@ -0,0 +1,154 @@
+%%
+%% This is file `xourse.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `classXourse')
+%% src/optionsxourse.dtx (with options: `classXourse')
+%% src/activity.dtx (with options: `classXourse')
+%% src/sectioning.dtx (with options: `classXourse')
+%% src/logo.dtx (with options: `classXourse')
+%% src/graded.dtx (with options: `classXourse')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesClass{xourse}
+ [2024/5/8 v1.5
+ Combining Ximera activities into Xourses]
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifnotoc
+\notocfalse
+\DeclareOption{notoc}{\notoctrue}
+\newif\ifnonewpage
+\nonewpagefalse
+\DeclareOption{nonewpage}{\nonewpagetrue}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ximera}}
+\ProcessOptions\relax
+\LoadClass{ximera}
+
+\newcommand{\skip@preamble}{%
+ \let\document\relax\let\enddocument\relax%
+ \newenvironment{document}{\let\input\otherinput}{}%
+ \renewcommand{\documentclass}[2][subfiles]{}}
+\let\otherinput\input
+\let\othermaketitle\maketitle
+\renewcommand{\maketitle}{ %
+\pagestyle{empty}
+\begin{center}
+~\\ %puts space at top of page to move title down.
+\vskip .25\textheight
+\hrulefill\\
+\vskip 1em
+\bfseries{\Huge \@title} \\
+\hrulefill\\
+\vskip 3em
+{\Large \@author}
+\vskip 2em
+{\large \@date}
+\end{center}
+\clearpage
+\ifnotoc
+\else
+ \tableofcontents\clearpage
+ \clearpage
+\fi
+\pagestyle{main}
+\let\maketitle\othermaketitle
+}
+\relax
+
+\ifnonewpage
+\newcommand{\activity}[2][]{%
+\setkeys{activity}{#1}
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup\par\vspace{\topsep}
+ \let\input\otherinput}
+\else
+\newcommand{\activity}[2][]{%
+\setkeys{activity}{#1}
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup\clearpage
+ \let\input\otherinput}
+\fi
+\relax
+
+
+\ifxake
+\renewcommand\activity[2][]{}
+\fi
+
+\ifhandout
+\newcommand{\practice}[2][]{
+\setkeys{practice}{#1}%!!!!!
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup
+ \let\input\otherinput}
+\else
+\newcommand{\practice}[2][]{\texttt{\detokenize{#2}}%% gives file name for practice
+\setkeys{practice}{#1}%!!!!!
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup
+ \let\input\otherinput}
+\fi
+\relax
+
+\ifxake
+\renewcommand\practice[2][]{}
+\fi
+
+
+\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{4.2em}}
+\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{4.2em}}
+\newcommand*{\logo}[1]{%
+ \ifx\@onlypreamble\@notprerr
+ \ClassError{xourse}{logo can only be used in the preamble}
+ {Move your logo command to the preamble}
+ \else %
+ \IfFileExists{#1}%
+ {\gdef\xourse@logo{#1}}%
+ {\ClassError{xourse}{logo file does not exist}
+ {To use logo, make sure that the referenced image file exists}}%
+ \fi%
+}
+
+
+\newenvironment{graded}[1]{}{}
+%%
+%% Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `xourse.cls'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 4c69514cc90..e0735305410 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -927,7 +927,8 @@ my @TLP_working = qw(
xetex-devanagari xetex-itrans xetex-pstricks xetex-tibetan
xetexfontinfo xetexko
xetexref xevlna xfakebold xfor xfrac xgreek xhfill
- xifthen xii xii-lat xindex xindy-persian xint xintsession xistercian xits
+ xifthen xii xii-lat ximera
+ xindex xindy-persian xint xintsession xistercian xits
xkcdcolors xkeymask xkeyval xlop xltabular xltxtra
xml2pmx xmltex xmpincl xmuthesis xnewcommand
xoptarg xpatch xpeek xpiano xpicture xpinyin xprintlen xpunctuate
diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
index 36fc9338898..23a00fee4c2 100644
--- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
@@ -1519,6 +1519,7 @@ depend xfakebold
depend xfor
depend xhfill
depend xifthen
+depend ximera
depend xint
depend xkcdcolors
depend xkeymask
diff --git a/Master/tlpkg/tlpsrc/ximera.tlpsrc b/Master/tlpkg/tlpsrc/ximera.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/ximera.tlpsrc