summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-01-29 03:01:04 +0000
committerNorbert Preining <norbert@preining.info>2024-01-29 03:01:04 +0000
commit6c43653052d016d5913aabb728c484f0e62b4754 (patch)
tree86463762682ace059db9efb216a1a4f0ad773688 /macros
parent7084e3008c8fc947579f46c6b8a08dfd180e72ef (diff)
CTAN sync 202401290301
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx10
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin599132 -> 599153 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex6
-rw-r--r--macros/latex/contrib/hvqrurl/Changes1
-rw-r--r--macros/latex/contrib/hvqrurl/doc/hvqrurl.pdfbin107212 -> 113426 bytes
-rw-r--r--macros/latex/contrib/hvqrurl/doc/hvqrurl.tex17
-rw-r--r--macros/latex/contrib/hvqrurl/latex/hvqrurl.sty14
-rw-r--r--macros/latex/contrib/randexam/randexam-a-answer.pdfbin49561 -> 49496 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam-a-answer.tex18
-rw-r--r--macros/latex/contrib/randexam/randexam-a-blank.pdfbin41354 -> 41288 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam-b-answer.pdfbin49564 -> 49469 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam-b-blank.pdfbin41312 -> 41229 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam.cls449
-rw-r--r--macros/latex/contrib/randexam/randexam.pdfbin45202 -> 50412 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam.tex213
-rw-r--r--macros/latex/contrib/undar-digitacion/README.md (renamed from macros/musictex/undar-digitacion/README.md)0
-rw-r--r--macros/latex/contrib/undar-digitacion/undar-digitacion-doc.pdf (renamed from macros/musictex/undar-digitacion/undar-digitacion-doc.pdf)bin165863 -> 165863 bytes
-rw-r--r--macros/latex/contrib/undar-digitacion/undar-digitacion-doc.tex (renamed from macros/musictex/undar-digitacion/undar-digitacion-doc.tex)0
-rw-r--r--macros/latex/contrib/undar-digitacion/undar-digitacion.dtx (renamed from macros/musictex/undar-digitacion/undar-digitacion.dtx)0
-rw-r--r--macros/latex/contrib/undar-digitacion/undar-digitacion.sty (renamed from macros/musictex/undar-digitacion/undar-digitacion.sty)0
-rw-r--r--macros/musictex/FAQ240
-rw-r--r--macros/musictex/README40
-rw-r--r--macros/musictex/add-ons/harmonics.tex120
-rw-r--r--macros/musictex/musicdoc.pdfbin527211 -> 0 bytes
24 files changed, 568 insertions, 560 deletions
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index bf2b48909d..3c026512da 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -15,7 +15,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/01/23}{2024N}
+\ProvidesExplClass{easybook}{2024/01/28}{2024O}
{Easily typesetting Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -302,7 +302,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/01/23}{2024N}
+\ProvidesExplPackage{easybase}{2024/01/28}{2024O}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -716,7 +716,9 @@
\geometry{showframe}
}
\bool_new:N \l__eb_ps_used_bool
-\eb_appto_cmd:nn { pagestyle } { \bool_set_true:N \l__eb_ps_used_bool }
+\NewHook{ps@end}
+\AddToHook{ps@end}{\bool_set_true:N \l__eb_ps_used_bool}
+\apptocmd{\pagestyle}{\UseOneTimeHook{ps@end}}{}{}
\ctex_at_end_preamble:n
{
\bool_if:NF \l__eb_ps_used_bool { \pagestyle{fancy} }
@@ -2323,7 +2325,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/23}{2024N}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/28}{2024O}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index b55ed461ae..83550fbf2d 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index cfc0c22370..07ac291c6f 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024N,
- date = 2024/01/23,
+ version = v2024O,
+ date = 2024/01/28,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
@@ -1350,7 +1350,7 @@
\shortversion{v = 1.638,date = 2022/03/04,changes = 增加目录条目样式选项注册命令 \cs{RegisterTocName}。}
\shortversion{v = 1.644,date = 2022/03/10,changes = 增加浮动环境目录声明命令 \cs{DeclareFloatList} 配合 \pkg*{caption} 宏包。}
\shortversion{v = 1.682,date = 2022/05/01,changes = 将迷你页判断命令 \cs{notminipage} 改为被保护命令兼容 \pkg*{circledtext} 宏包。}
- \begin{version}[v = 2024N,date = 2024/01/23,simple]
+ \begin{version}[v = 2024O,date = 2024/01/28,simple]
\item 核对依赖宏包的更新改动,优化使用手册的内容细节。
\item 修复图表等浮动环境题注目录中条目标签编号的计数器值显示错误问题。
\item 修复附录命令 \cs{appendix} 的可选参数设置英文目录中条目名字和编号失效的问题。
diff --git a/macros/latex/contrib/hvqrurl/Changes b/macros/latex/contrib/hvqrurl/Changes
index 7dcfb5b15a..c4b25d48e5 100644
--- a/macros/latex/contrib/hvqrurl/Changes
+++ b/macros/latex/contrib/hvqrurl/Changes
@@ -1,4 +1,5 @@
hvqrurl.sty:
+0.05 2024-01-28 - added optional argument for alternative link text
0.04 2024-01-18 - fix for wrong text
0.03 2023-10-29 - fix for # in an url
0.02 2021-05-18 - added optional argument qrreverse to the set
diff --git a/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf b/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
index c2a087895c..513df9f516 100644
--- a/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
+++ b/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex b/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
index a67122f6bd..e60a7a2511 100644
--- a/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
+++ b/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
@@ -1,4 +1,4 @@
-%% $Id: hvqrurl.tex 837 2024-01-18 07:43:31Z herbert $
+%% $Id: hvqrurl.tex 848 2024-01-28 11:57:35Z herbert $
\listfiles
\errorcontextlines=100
\documentclass[twoside=on,usegeometry]{scrartcl}
@@ -159,6 +159,21 @@ With the optional argument \Lkeyword{qrreverse} it can be placed in the left or
This one (\hvqrurl[qrreverse]{https://latex.texnik.de}) is in the other margin.
\end{lstlisting}
+\subsection{Alternative link text}
+By default the QR code is set with the given text. If the link is too long, one
+can use a short link with the optional argument \Lkeyword{linktext} for the text and
+the long link for the qrcode, like
+this one: \hvqrurl[linktext=https://www.uni-bonn.de]%
+{https://www.uni-bonn.de/de/studium/studienangebot/studiengaenge-a-z/kunstgeschichte-bazf?set_language=de}.
+
+\begin{lstlisting}
+By default the QR code is set with the given text. If the link is too long, one
+can use a short link with the optional argument \Lkeyword{linktext} for the text and
+the long link for the qrcode, like
+this one: \hvqrurl[linktext=https://www.uni-bonn.de]%
+{https://www.uni-bonn.de/de/studium/studienangebot/studiengaenge-a-z/kunstgeschichte-bazf?set_language=de}.
+\end{lstlisting}
+
\printindex
diff --git a/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty b/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
index e016534270..604a7ce87f 100644
--- a/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
+++ b/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
@@ -1,4 +1,4 @@
-%% $Id: hvqrurl.sty 837 2024-01-18 07:43:31Z herbert $
+%% $Id: hvqrurl.sty 848 2024-01-28 11:57:35Z herbert $
%%
%% This file is distributed under the terms of the LaTeX Project Public
%% License from CTAN archives in directory macros/latex/base/lppl.txt.
@@ -7,7 +7,7 @@
% Copyright 2019,21,23,24 Herbert Voss hvoss@tug.org
%%
\ProvidesPackage{hvqrurl}[%
- 2024/01/18 v.0.04 (Herbert Voss) Supports qr images into the margin (hv)]
+ 2024/01/28 v.0.05 (Herbert Voss) Supports qr images into the margin (hv)]
%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{url}
@@ -24,9 +24,11 @@
\define@key{hvqr}{qrcolor}[black]{\colorlet{qr@url@qrcolor}{#1}}
\define@key{hvqr}{qrlevel}[M]{\def\qr@url@qrlevel{#1}}
\define@key{hvqr}{qrlink}[link]{\def\qr@url@qrlink{#1}}
+\define@key{hvqr}{linktext}[]{\def\qr@url@linktext{#1}}
\define@boolkey{hvqr}[hv@]{qrreverse}[true]{}
-\setkeys{hvqr}{qrheight,qrcolor=black,qradjust,qrlevel,qrlink=link,qrreverse=false}% the default setting
+\setkeys{hvqr}{qrheight,qrcolor=black,qradjust,qrlevel,qrlink=link,
+ qrreverse=false,linktext={}}% the default setting
\newcommand*\hvqrset[1]{\setkeys{hvqr}{#1}}
@@ -41,7 +43,11 @@
\expandafter\qrset\expandafter{\qr@url@qrlink,height=\qr@url@qrheight,level=\qr@url@qrlevel}%
\ifhv@qrreverse\reversemarginpar\fi
\if@tempswa
- \edef\hv@foo{\detokenize\expandafter{#2}}%
+ \ifx\relax\qr@url@linktext\relax % alternative link text??
+ \edef\hv@foo{\detokenize\expandafter{#2}}%
+ \else
+ \edef\hv@foo{\detokenize\expandafter{\qr@url@linktext}}%
+ \fi
\expandafter\url\expandafter{\hv@foo}%
\fi
\edef\reserved@a{\noexpand\marginnote{\noexpand\color{qr@url@qrcolor}\noexpand\qrcode{%
diff --git a/macros/latex/contrib/randexam/randexam-a-answer.pdf b/macros/latex/contrib/randexam/randexam-a-answer.pdf
index 732b941999..d7d570e9b2 100644
--- a/macros/latex/contrib/randexam/randexam-a-answer.pdf
+++ b/macros/latex/contrib/randexam/randexam-a-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam-a-answer.tex b/macros/latex/contrib/randexam/randexam-a-answer.tex
index d431b45732..fdfec30618 100644
--- a/macros/latex/contrib/randexam/randexam-a-answer.tex
+++ b/macros/latex/contrib/randexam/randexam-a-answer.tex
@@ -12,11 +12,12 @@
\examtitle{name=Math 1906 Final Exam,date=2018-06-28,version=A} % make exam title
-\gradetable
+\gradetable[total=4]
-\examgroup{Fill in the blanks.}{6 questions; 3 points for each; 18 points in total.}
+\exampart{Fill in the blanks.}{6 questions; 3 points for each; 18 points in total.}
-\answertable[3em]{6}{3} % make answer table: height 3em, six in total, three for each row
+% make answer table: six in total, three for each row, strut height 3em
+\answertable[total=6,column=3,strut=3em]
\begin{question}
The first question $k>0$, text $f(x)=\ln x-\frac{x}{\e}+k$ text $(0,+\infty)$
@@ -70,9 +71,10 @@ text text text text text text text text text text $\xi-2\eta\sim$ \fillout{$N(-3
\newpage
-\examgroup{Select one answer from four choices.}{6 questions; 3 points for each; 18 points in total.}
+\exampart{Select one answer from four choices.}{6 questions; 3 points for each; 18 points in total.}
-\answertable{6}{6} % 生成答题栏:默认行高,总共8题,每行8题
+% make answer table: six in total, six for each row, default strut height
+\answertable[total=6,column=6]
\begin{question}
The first question text, text text text text text text text text text text
@@ -168,7 +170,7 @@ text text text text text text text text text text text text text text \pickout{D
\newpage
-\examgroup{Work out math questions.}{6 questions; 8 points for each; 48 points in total.}
+\exampart{Work out math questions.}{6 questions; 8 points for each; 48 points in total.}
\begin{question}
The first question $\int\e^{2x}\,(\tan x+1)^2\dx$.
@@ -305,9 +307,9 @@ Text text $H_0:\mu=3140$ text text ($\alpha = 0.01$).
\newpage
-\examgroup{Work out math proofs.}{2 questions; 16 points in total.}
+\exampart{Work out math proofs.}{2 questions; 16 points in total.}
-\renewcommand{\solutionname}{Proof} % 将“解”字改为“证”字
+\DeclareExamTranslation{current}{solution-Solution=Proof} % rename "Solution" as "Proof"
\begin{question}[points=9]
The first question $\{x_n\}$ text $x_1=\sqrt2$, $x_{n+1}=\sqrt{2+x_n}$.
diff --git a/macros/latex/contrib/randexam/randexam-a-blank.pdf b/macros/latex/contrib/randexam/randexam-a-blank.pdf
index 2da2d3748f..1a85a26f4c 100644
--- a/macros/latex/contrib/randexam/randexam-a-blank.pdf
+++ b/macros/latex/contrib/randexam/randexam-a-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam-b-answer.pdf b/macros/latex/contrib/randexam/randexam-b-answer.pdf
index 699a82d055..349d3a80d9 100644
--- a/macros/latex/contrib/randexam/randexam-b-answer.pdf
+++ b/macros/latex/contrib/randexam/randexam-b-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam-b-blank.pdf b/macros/latex/contrib/randexam/randexam-b-blank.pdf
index e9dd01eab3..5ee6962d09 100644
--- a/macros/latex/contrib/randexam/randexam-b-blank.pdf
+++ b/macros/latex/contrib/randexam/randexam-b-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam.cls b/macros/latex/contrib/randexam/randexam.cls
index 8f5ae8bde9..d103dfe558 100644
--- a/macros/latex/contrib/randexam/randexam.cls
+++ b/macros/latex/contrib/randexam/randexam.cls
@@ -5,9 +5,9 @@
% ----------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{randexam}[2024-01-20 v2024B Make an exam paper and its randomized variants]
+\ProvidesClass{randexam}[2024-01-28 v2024C Make an exam paper and its randomized variants]
-%% Old LaTeX release could not recongnize date format like 2022-11-01
+%% Old LaTeX release could not recognize date format like 2022-11-01
%\@ifl@t@r\fmtversion{2022-11-01}{}{
\@ifl@t@r\fmtversion{2022/11/01}{}{
\ClassError{randexam}{%
@@ -16,6 +16,9 @@
}{Please update your TeX distribution first.}
}
+\RequirePackage{functional}
+\IgnoreSpacesOn
+
\RequirePackage{etoolbox}
\newbool{plain} \boolfalse{plain} % use plain page style
@@ -27,7 +30,7 @@
\newbool{amsfonts} \boolfalse{amsfonts} % use ams fonts
\newbool{freealign} \boolfalse{freealign} % load freealign package
\newbool{medmath} \boolfalse{medmath} % use medium-size formulas
-\newbool{grader} \boolfalse{grader} % add grader line in the grade table
+\newbool{evaluator} \boolfalse{evaluator} % add evaluator line in the grade table
\DeclareKeys{
plain .if = plain,
@@ -39,7 +42,7 @@
amsfonts .if = amsfonts,
freealign .if = freealign,
medmath .if = medmath,
- grader .if = grader,
+ evaluator .if = evaluator,
many .code = \booltrue{freealign},
most .code = \booltrue{freealign}\booltrue{medmath}
}
@@ -66,7 +69,6 @@
\RequirePackage{zref-user,zref-lastpage}
\RequirePackage{tabularx}
\RequirePackage{xcolor}
-\RequirePackage{xkeyval}
\ifplain
\allowdisplaybreaks[4]
@@ -91,6 +93,103 @@
\NewDocumentCommand\SetExamOption{+m}{\SetKeys[randexam]{#1}}
%% ---------------------------------------------------------------------------
+%% Template commands for exam elements
+%% ---------------------------------------------------------------------------
+
+%% #1: exam element; #2: template name; #3: template code
+%% If the template name = default, we enable the template at once
+%% Otherwise, we may enable the template by using \SelectExamTemplate command
+\NewDocumentCommand\DeclareExamTemplate{mm+m}{
+ \tlSet{\expName{l@rdxm@template@#1@#2@tl}}{#3}
+ \ignorespaces
+}
+
+%% #1: exam element; #2: template name
+\NewDocumentCommand\SelectExamTemplate{mm}{
+ \tlSetEq{\expName{l@rdxm@template@#1@default@tl}}{\expName{l@rdxm@template@#1@#2@tl}}
+ \ignorespaces
+}
+
+%% #1: exam element; #2: template name.
+%% In an expandable command, we should use \UseName but not \expName.
+\NewExpandableDocumentCommand\UseExamTemplate{mm}{
+ \UseName{l@rdxm@template@#1@#2@tl}
+}
+
+%% ---------------------------------------------------------------------------
+%% Translation commands for exam keywords
+%% ---------------------------------------------------------------------------
+
+\tlSet\l@rdxm@current@language@tl{english}
+
+\DeclareUnknownKeyHandler[randexam-translation]{
+ \tlSet{\expName{l@rdxm@translate@\l@rdxm@declare@language@tl @#1@tl}}{#2}
+}
+
+%% #1: language name; #2: a keyval list with keyword = transaltion format
+\NewDocumentCommand\DeclareExamTranslation{mm}{
+ \tlIfEqTF{#1}{current}{
+ \tlSetEq\l@rdxm@declare@language@tl\l@rdxm@current@language@tl
+ }{
+ \tlSet\l@rdxm@declare@language@tl{#1}
+ }
+ \SetKeys[randexam-translation]{#2}
+ \ignorespaces
+}
+
+%% #1: language name
+\NewDocumentCommand\SelectExamTranslation{m}{
+ \tlSet\l@rdxm@current@language@tl{#1}
+ \ignorespaces
+}
+
+%% #1: keyword name.
+%% In an expandable command, we should use \UseName but not \expName.
+\NewExpandableDocumentCommand\UseExamTranslation{m}{
+ \UseName{l@rdxm@translate@\l@rdxm@current@language@tl @#1@tl}
+}
+
+\DeclareExamTranslation{english}{
+ answertable-Answer = Answer
+ ,answertable-Number = Number
+ ,examdata-Appendix = Appendix
+ ,exampart-Part = Part
+ ,examtitle-Name = Name
+ ,examtitle-Solutions = Solutions
+ ,gradetable-Evaluator = Evaluator
+ ,gradetable-Part = Part
+ ,gradetable-Score = Score
+ ,gradetable-Total = Total
+ ,headfoot-Name = Name
+ ,headfoot-of = of
+ ,headfoot-Page = Page
+ ,headfoot-Solutions = Solutions
+ ,headfoot-Version = Version
+ ,points-point = point
+ ,points-points = points
+ ,question-Question = Question
+ ,solution-Solution = Solution
+}
+
+\SelectExamTranslation{english}
+
+%% ---------------------------------------------------------------------------
+%% Keyvalue commands for exam options
+%% ---------------------------------------------------------------------------
+
+%% #1 module name; #2: key name; #3: its value
+\NewDocumentCommand\DeclareExamValue{mm+m}{
+ \tlSet{\expName{l@rdxm@value@#1@#2@tl}}{#3}
+ \ignorespaces
+}
+
+%% #1: module name; #2: key name.
+%% In an expandable command, we should use \UseName but not \expName.
+\NewExpandableDocumentCommand\UseExamValue{mm}{
+ \UseName{l@rdxm@value@#1@#2@tl}
+}
+
+%% ---------------------------------------------------------------------------
%% Command for exam title: \examtitle
%% ---------------------------------------------------------------------------
@@ -101,88 +200,143 @@
\newcommand{\ischeck}[1]{\ifnum#1>0\,$\checkmark$\,\else\quad\fi}
\newcommand{\isquad}[1]{\ifnum#1=0\,$\checkmark$\,\else\quad\fi}
-\def\rdxm@temp@a{A}
-\def\rdxm@temp@c{C}
-\def\rdxm@empty{}
-
\DeclareKeys[randexam-title]{
- name .store = \@rdxm@title@name,
- date .store = \@rdxm@title@date,
- version .store = \@rdxm@title@version
+ name .code = \DeclareExamValue{examtitle}{name}{#1}
+ ,date .code = \DeclareExamValue{examtitle}{date}{#1}
+ ,version .code = \DeclareExamValue{examtitle}{version}{#1}
}
\NewDocumentCommand\SetExamTitle{+m}{\SetKeys[randexam-title]{#1}}
-\SetExamTitle{name=Math 1906,date=\today,version=A}
+\SetExamTitle{name=Math~1906,date=\today,version=A}
-\newcommand\examtitle[1]{%
- \SetExamTitle{#1}%
- \thispagestyle{plain}
- \ifbool{random}{%
- \ifx\@rdxm@title@version\rdxm@temp@a\def\@rdxm@title@version{B}\fi
- \ifx\@rdxm@title@version\rdxm@temp@c\def\@rdxm@title@version{D}\fi
- }{}%
+\DeclareExamTemplate{examtitle}{normal}{
\begingroup
\Large\noindent
- \ifbool{answer}{%
- \textcolor{red!80!black}{\@rdxm@title@name\hfill Solutions}%
- }{%
- \@rdxm@title@name\hfill Name:\underspace{6em}%
+ \ifbool{answer}{
+ \textcolor{red!80!black}{
+ \UseExamValue{examtitle}{name}\hfill\UseExamTranslation{examtitle-Solutions}
+ }
+ }{
+ \UseExamValue{examtitle}{name}\hfill\UseExamTranslation{examtitle-Name}:\underspace{6em}
}\par
\endgroup
}
+\SelectExamTemplate{examtitle}{normal}
+
+\NewDocumentCommand\examtitle{+m}{
+ \SetExamTitle{#1}
+ \thispagestyle{plain}
+ \ifbool{random}{
+ \tlIfEqT{\expWhole{\UseExamValue{examtitle}{version}}}{A}{
+ \DeclareExamValue{examtitle}{version}{B}
+ }
+ \tlIfEqT{\expWhole{\UseExamValue{examtitle}{version}}}{C}{
+ \DeclareExamValue{examtitle}{version}{D}
+ }
+ }{}
+ \UseExamTemplate{examtitle}{default}
+}
%% ---------------------------------------------------------------------------
%% Command for grade table: \gradetable
%% ---------------------------------------------------------------------------
-%% You need to put .code:n before .initial:n
-\DeclareKeys[randexam]{%
- groupnumber .code:n = \let\exam@group@number#1,
- groupnumber .initial:n = \Roman,
+%% total: total number of parts in current exam;
+%% strut: strut height in the score row.
+\DeclareKeys[randexam-gradetable]{
+ total .code = \DeclareExamValue{gradetable}{total}{#1}
+ ,total .initial:n = 6
+ ,strut .code = \DeclareExamValue{gradetable}{strut}{#1}
+ ,strut .initial:n = 2.5em
}
\newcounter{@exam@grade@cnt}
-\newcommand\rdxm@group@number[1]{%
- \stepcounter{@exam@grade@cnt}%
- \exam@group@number{@exam@grade@cnt}%
+\newrobustcmd\rdxm@part@number[1]{
+ \setcounter{@exam@grade@cnt}{#1}
+ \exam@part@number{@exam@grade@cnt}
}
-\newcommand\insertgroupname{Part}
-\newcommand\insertscorename{Score}
-\newcommand\insertgradername{Grader}
-\newcommand\inserttotalname{Total}
+%% #1: the tl variable; #2: the first cell; #3: the last cell
+%% #4: the number of middle cells; #5: the map command for middle cells.
+\newrobustcmd\rdxm@table@make@row[5]{
+ \tlSet#1{#2 & }
+ \intStepOneInline{1}{#4}{
+ \tlPutRight#1{#5{##1} &}
+ }
+ \tlPutRight#1{ #3}
+}
-\newcommand\gradetable{%
- \par\vspace{1em}%
- \setcounter{@exam@grade@cnt}{0}%
- \noindent\begin{tabularx}{\linewidth}{|*{8}{Y|}}
- \hline
- \textbf{\insertgroupname}
- & \rdxm@group@number{1} & \rdxm@group@number{2} & \rdxm@group@number{3}
- & \rdxm@group@number{4} & \rdxm@group@number{5} & \rdxm@group@number{6}
- & \inserttotalname\\
- \hline
- \textbf{\insertscorename}\rule[-0.75em]{0pt}{2.5em} & & & & & & & \\
+\newrobustcmd\rdxm@gobble@one[1]{}
+
+%% \dimeval or \dimexpr doesn't accept decimal numbers such as 0.3
+\NewDocumentCommand\MakeExamStruct{m}{
+ \rule[-\dimeval{(#1)*3/10}]{0pt}{#1}
+}
+
+\DeclareExamTemplate{gradetable}{normal}{
+ \rdxm@table@make@row
+ \l@rdxm@gradetable@part@tl
+ {\textbf{\UseExamTranslation{gradetable-Part}}}
+ {\UseExamTranslation{gradetable-Total}}
+ {\UseExamValue{gradetable}{total}}
+ \rdxm@part@number
+ \rdxm@table@make@row
+ \l@rdxm@gradetable@score@tl
+ {\textbf{\UseExamTranslation{gradetable-Score}}
+ \MakeExamStruct{\UseExamValue{gradetable}{strut}}}
+ {}
+ {\UseExamValue{gradetable}{total}}
+ \rdxm@gobble@one
+ \ifbool{evaluator}{
+ \rdxm@table@make@row
+ \l@rdxm@gradetable@evaluator@tl
+ {\textbf{\UseExamTranslation{gradetable-Evaluator}}
+ \MakeExamStruct{\UseExamValue{gradetable}{strut}}}
+ {}
+ {\UseExamValue{gradetable}{total}}
+ \rdxm@gobble@one
+ }{}
+ \noindent
+ \begin{tabularx}{\linewidth}{|c|*{\UseExamValue{gradetable}{total}}{Y|}Y|}
\hline
- \ifbool{grader}{
- \textbf{\insertgradername}\rule[-0.75em]{0pt}{2.5em} & & & & & & & \\
- \hline
- }{}
+ \l@rdxm@gradetable@part@tl \\ \hline
+ \l@rdxm@gradetable@score@tl \\ \hline
+ \ifbool{evaluator}{\l@rdxm@gradetable@evaluator@tl \\ \hline}{}
\end{tabularx}
}
+\SelectExamTemplate{gradetable}{normal}
+
+\NewDocumentCommand\gradetable{O{}}{
+ \par\vspace{1em}
+ \begingroup
+ \SetKeys[randexam-gradetable]{#1}
+ \UseExamTemplate{gradetable}{default}
+ \endgroup
+}
%% ---------------------------------------------------------------------------
%% Setting header and footer
%% ---------------------------------------------------------------------------
\newcommand{\rdxm@columnbox}[1]{\makebox[\columnwidth]{#1}}
-\newcommand{\rdxm@headleft}{\@rdxm@title@name}
-\newcommand{\rdxm@headright}{\ifbool{answer}{Solutions}{Name:\hspace{12em}}}
+\newcommand{\rdxm@headleft}{\UseExamValue{examtitle}{name}}
+\newcommand{\rdxm@headright}{
+ \ifbool{answer}{
+ \UseExamTranslation{headfoot-Solutions}
+ }{
+ \UseExamTranslation{headfoot-Name}:\hspace{12em}
+ }
+}
\newcommand{\rdxm@headtext}{\rdxm@headleft\hfill\rdxm@headright}
-\newcommand{\rdxm@footleft}{\@rdxm@title@date}
-\newcommand{\rdxm@footcenter}{Page~\thepage~of~\zpageref{LastPage}}
-\newcommand{\rdxm@footright}{Version \@rdxm@title@version}
+\newcommand{\rdxm@footleft}{\UseExamValue{examtitle}{date}}
+\newcommand{\rdxm@footcenter}{
+ \UseExamTranslation{headfoot-Page}~\thepage\space
+ \UseExamTranslation{headfoot-of}~\zpageref{LastPage}
+}
+\newcommand{\rdxm@footright}{
+ \UseExamTranslation{headfoot-Version}~\UseExamValue{examtitle}{version}
+}
\newcommand{\rdxm@foottext}{\rdxm@footleft\hfill\rdxm@footcenter\hfill\rdxm@footright}
% fancy page style
@@ -235,7 +389,7 @@
\RequirePackage{pgffor}
\newcommand*\exam@set@seed{%
%% 当\pgfmathrandom的参数为3的倍数时,对相邻种子生成的多个随机数分布不均匀
- %\pgfmathsetseed{\numexpr\rdxm@random@seed+\value{rdxm@group}-1\relax}%
+ %\pgfmathsetseed{\numexpr\rdxm@random@seed+\value{rdxm@part}-1\relax}%
%% 因此我们改用下面的方法,用随机数种子生成下一个随机数种子
\pgfmathsetseed{\rdxm@random@seed}%
\pgfmathrandominteger\rdxm@random@seed{1}{2147483647}%
@@ -243,25 +397,31 @@
\fi
%% ---------------------------------------------------------------------------
-%% Command for exam groups: \examgroup
+%% Command for exam groups: \exampart
%% Command for appendix data: \examdata
%% Environment for questions: question
%% Environment for solutions: solution
%% ---------------------------------------------------------------------------
+%% You need to put .code before .initial:n
+\DeclareKeys[randexam-exampart]{%
+ partnumber .code = \let\exam@part@number#1,
+ partnumber .initial:n = \Roman,
+}
+
\newif\ifonlyonequestion \onlyonequestionfalse % 此部分仅有一道题时不显示题目编号
\xdef\allquestions{}
\xdef\lastquestion{}
\newcounter{question} % 当前题型的小题编号
\newcounter{questionreal} % 实际显示的小题编号,在各题型小题统一编号时使用
\newcounter{totalquestions} % 之前各题型小题总数,在各题型小题统一编号时使用
-\newcommand{\solutionname}{Solution}
+
\newcounter{choice} % 后面选择题的 abcd 环境要用到
\newcommand{\hangtext}{}
\newlength{\hanglength}
-\colorlet{group number}{black}
-\colorlet{question number}{blue!80!black}
-\colorlet{solution name}{blue!80!black}
+\colorlet{part~number}{black}
+\colorlet{question~number}{blue!80!black}
+\colorlet{solution~name}{blue!80!black}
\newcounter{rdxm@shuffle@temp@cnt}
\newcounter{rdxm@list@temp@cnt}
@@ -337,19 +497,29 @@
\xdef\lastquestion{}%
}
-\newcounter{rdxm@group}
+\newcounter{rdxm@part}
-\newcommand\insertgroup[2]{%
- \noindent\textbf{\textcolor{group number}{Part~\Roman{rdxm@group}}: #1} (#2)%
+\DeclareExamTemplate{exampart}{normal}{
+ \noindent
+ \textbf{
+ \textcolor{part~number}{\UseExamTranslation{exampart-Part}~\Roman{rdxm@part}}
+ :~\UseExamValue{exampart}{type}
+ }
+ \space(\UseExamValue{exampart}{points})
}
+\SelectExamTemplate{exampart}{normal}
-\newcommand{\examgroup}[2]{%
+\newcommand{\exampart}[2]{
\printquestions
- \setcounter{totalquestions}{\value{totalquestions}+\value{question}}%
- \setcounter{question}{0}%
- \stepcounter{rdxm@group}%
- \vspace{1em}%
- \insertgroup{#1}{#2}%
+ \setcounter{totalquestions}{\value{totalquestions}+\value{question}}
+ \setcounter{question}{0}
+ \stepcounter{rdxm@part}
+ \vspace{1em}
+ \begingroup
+ \DeclareExamValue{exampart}{type}{#1}
+ \DeclareExamValue{exampart}{points}{#2}
+ \UseExamTemplate{exampart}{default}
+ \endgroup
\par\nopagebreak
\if\relax\detokenize{#1}\relax % #1 is empty
\onlyonequestiontrue
@@ -361,57 +531,96 @@
\@afterheading
}
-\renewcommand\appendixname{Appendix}
-\newcommand{\examdata}[1]{%
+\DeclareExamTemplate{examdata}{normal}{
+ \centerline{
+ \textbf{\UseExamTranslation{examdata-Appendix}}
+ \quad\UseExamValue{examdata}{caption}
+ }
+ \smallskip
+}
+\SelectExamTemplate{examdata}{normal}
+
+\NewDocumentCommand\examdata{+m}{
\printquestions\rdxm@stop@random
- \centerline{\textbf{\appendixname}\quad #1}\smallskip
+ \DeclareExamValue{examdata}{caption}{#1}
+ \UseExamTemplate{examdata}{default}
}
\preto{\@enddocumenthook}{\printquestions\rdxm@stop@random}
\newcommand\ignorepars{\@ifnextchar\par{\expandafter\ignorepars\@gobble}{}}
-% 局部定义,仅在当前题目内有效
-\define@key{exam@question}{points}[-1]{\def\rdxm@question@points{#1}}
-\define@key{exam@question}{level}[]{\def\rdxm@question@level{#1}}
-\define@key{exam@question}{year}[]{\def\rdxm@question@year{#1}}
+% local definition, valid only in current question
+\DeclareKeys[randexam-question]{
+ points .store = \l@rdxm@question@points
+ ,level .store = \l@rdxm@question@level
+ ,year .store = \l@rdxm@question@year
+}
-\newcommand\pointname{point}
-\newcommand\pointsname{points}
-\newcommand\pointorpoints[1]{\ifnumgreater{#1}{1}{\pointsname}{\pointname}}
+\newcommand\pointorpoints[1]{
+ \ifnumgreater{#1}{1}{
+ \UseExamTranslation{points-points}
+ }{
+ \UseExamTranslation{points-point}
+ }
+}
\newcommand{\questionpointstext}[1]{ (#1 \pointorpoints{#1}) }
\newcommand\rdxm@hook@exec@other@keys{}
-\newcommand{\execute@question@keys}[1]{%
- \setkeys{exam@question}{#1}%
+\newrobustcmd\execute@question@keys{
\rdxm@hook@exec@other@keys
- \ifdefvoid{\rdxm@question@points}{}{\questionpointstext{\rdxm@question@points}}%
+ \ifdefvoid{\l@rdxm@question@points}{}{\questionpointstext{\l@rdxm@question@points}}
}
-\newenvironment{questionreal}[1][]{%
- \stepcounter{question}\setcounter{choice}{0}%
+\DeclareExamTemplate{questionbegin}{normal}{
\ifresetnumber
\ifonlyonequestion
\renewcommand{\hangtext}{\qquad}%
\else
- \renewcommand{\hangtext}{\textbf{\textsf{\textcolor{question number}{\arabic{question}}.}}\;\,}%
+ \renewcommand{\hangtext}{\textbf{\textsf{\textcolor{question~number}{\arabic{question}}.}}\;\,}
\fi
\else
\setcounter{questionreal}{\value{totalquestions}+\value{question}}%
- \renewcommand{\hangtext}{\textbf{\textsf{\textcolor{question number}{\arabic{questionreal}}.}}\;\,}%
+ \renewcommand{\hangtext}{\textbf{\textsf{\textcolor{question~number}{\arabic{questionreal}}.}}\;\,}
\fi
- \settowidth{\hanglength}{\hangtext}%
+ \settowidth{\hanglength}{\hangtext}
\description[leftmargin=\hanglength,labelwidth=0pt,labelsep=0pt,topsep=0pt,parsep=0pt]
- \item[\hangtext]\execute@question@keys{#1}%
-}{\enddescription}
-\newenvironment{solutionreal}{%
- \renewcommand{\hangtext}{\textbf{\textsf{\textcolor{solution name}{\solutionname}.}}\;\,}%
- \settowidth{\hanglength}{\hangtext}%
+ \item[\hangtext]\execute@question@keys
+}
+\SelectExamTemplate{questionbegin}{normal}
+
+\DeclareExamTemplate{questionend}{normal}{\enddescription}
+\SelectExamTemplate{questionend}{normal}
+
+\NewDocumentEnvironment{questionreal}{O{}}{
+ \stepcounter{question}
+ \setcounter{choice}{0}
+ \SetKeys[randexam-question]{#1}
+ \UseExamTemplate{questionbegin}{default}
+}{
+ \UseExamTemplate{questionend}{default}
+}
+
+\DeclareExamTemplate{solutionbegin}{normal}{
+ \renewcommand{\hangtext}{
+ \textbf{\textsf{\textcolor{solution~name}{\UseExamTranslation{solution-Solution}}.}}\;\,
+ }
+ \settowidth{\hanglength}{\hangtext}
\description[leftmargin=\hanglength,labelwidth=0pt,labelsep=0pt,topsep=0pt,parsep=0pt]
\item[\hangtext]
-}{\enddescription}
+}
+\SelectExamTemplate{solutionbegin}{normal}
+
+\DeclareExamTemplate{solutionend}{normal}{\enddescription}
+\SelectExamTemplate{solutionend}{normal}
+
+\NewDocumentEnvironment{solutionreal}{}{
+ \UseExamTemplate{solutionbegin}{default}
+}{
+ \UseExamTemplate{solutionend}{default}
+}
\let \oldnewpage = \newpage
\let \oldvfill = \vfill
@@ -480,28 +689,37 @@
%% Command for answer tables: \answertable
%% ---------------------------------------------------------------------------
+%% property .store is the same as .tl_set:N in ltkeys.
+%% you need to put .code before .initial:n.
+%% total: total number of questions in current exam part;
+%% column: number of questions in each answer row;
+%% strut: strut height in each answer rows;
+%% notice: notice text before the answer table.
+\DeclareKeys[randexam-answertable]{
+ total .code = \DeclareExamValue{answertable}{total}{#1}
+ ,column .code = \DeclareExamValue{answertable}{column}{#1}
+ ,strut .code = \DeclareExamValue{answertable}{strut}{#1}
+ ,strut .initial:n = 1em
+ ,notice .code = \DeclareExamValue{answertable}{notice}{#1}
+ ,notice .initial:n = {Notice:~you~MUST~write~the~answers~in~the~following~tables.}
+}
+
\gdef\answer@lines@temp{}%
\newcommand{\answer@lines@add}[1]{%
\xdef\answer@lines@temp{\answer@lines@temp#1}%
}
-\newcommand\insertnumbertext{Number}
-\newcommand\insertanswertext{Answer}
-\newcommand\insertanswertabletext{%
- Notice: you MUST write the answers in the following tables.%
+\newrobustcmd\answer@number@hided[1]{\UseExamTranslation{answertable-Number}}
+\newrobustcmd\answer@cell@strut[1]{
+ \parbox[c][#1][c]{2em}{\hbox{\UseExamTranslation{answertable-Answer}}}
}
-\newrobustcmd{\answer@number@hided}[1]{\insertnumbertext} % 在 PDFLaTeX 中需要保护中文
-\newrobustcmd{\answer@cell@strut}[1]{\parbox[c][#1][c]{2em}{\hbox{\insertanswertext}}}
-
\newcounter{answer@col}
\newcounter{answer@row}
\newcounter{answer@total}
+%% #1: strut; #2: total; #3: column.
\newcommand{\answer@lines}[3]{%
- % #1 答题栏各栏指定高度
- % #2 答题栏总共答案个数
- % #3 答题栏每行答案个数
\setcounter{answer@row}{(#2-1)/#3+1}% 除法向下取整,改为向上取整
\begingroup
\let\hline=\relax \let\\=\relax % 禁止展开
@@ -537,13 +755,22 @@
\answer@lines@temp
}
-\newcommand{\answertable}[3][1em]{%
- \insertanswertabletext\par
- \begin{tabularx}{\linewidth}{|c|*{#3}{Y|}}
+\DeclareExamTemplate{answertable}{normal}{
+ \UseExamValue{answertable}{notice}\par
+ \begin{tabularx}{\linewidth}{|c|*{\UseExamValue{answertable}{column}}{Y|}}
\hline
- \answer@lines{#1}{#2}{#3}
- \end{tabularx}%
- \par\vspace{0.8em}%
+ \answer@lines{\UseExamValue{answertable}{strut}}
+ {\UseExamValue{answertable}{total}}{\UseExamValue{answertable}{column}}
+ \end{tabularx}
+}
+\SelectExamTemplate{answertable}{normal}
+
+\NewDocumentCommand\answertable{O{}}{
+ \begingroup
+ \SetKeys[randexam-answertable]{#1}
+ \UseExamTemplate{answertable}{default}
+ \endgroup
+ \par\vspace{0.8em}
}
%% ---------------------------------------------------------------------------
@@ -940,3 +1167,5 @@
\let \downwhitearrow = \Downarrow
}}
+\IgnoreSpacesOff
+
diff --git a/macros/latex/contrib/randexam/randexam.pdf b/macros/latex/contrib/randexam/randexam.pdf
index 0c7f83abdf..2faabec1c8 100644
--- a/macros/latex/contrib/randexam/randexam.pdf
+++ b/macros/latex/contrib/randexam/randexam.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam.tex b/macros/latex/contrib/randexam/randexam.tex
index 9e38395b94..feb1af2e14 100644
--- a/macros/latex/contrib/randexam/randexam.tex
+++ b/macros/latex/contrib/randexam/randexam.tex
@@ -3,7 +3,7 @@
\documentclass[12pt,plain,most]{randexam}
\geometry{b5paper,margin=2cm}
-\newcommand*{\myversion}{2024B}
+\newcommand*{\myversion}{2024C}
\newcommand*{\mydate}{\the\year-\mylpad\month-\mylpad\day}
\newcommand*{\mylpad}[1]{\ifnum#1<10 0\the#1\else\the#1\fi}
@@ -46,6 +46,7 @@
\NewDocumentCommand\myfile{m}{\textcolor{purple3}{\mbox{#1}}}
\NewDocumentCommand\mykey{m}{\textcolor{brown3}{\mbox{\fakeverb{#1}}}}
\NewDocumentCommand\myval{m}{\textcolor{azure3}{\mbox{\fakeverb{#1}}}}
+\NewDocumentCommand\myelem{m}{\textcolor{violet3}{\mbox{#1}}}
\begin{document}
@@ -57,6 +58,7 @@
Title: \fillbox{\color{blue3}The randexam class for LaTeX}\\
Author: \fillbox{Jianrui Lyu (tolvjr@163.com)}\\
Version: \fillbox{\myversion{} (\mydate)}\\
+ Code: \fillbox{\url{https://github.com/lvjr/randexam}}\\
\hline
\end{tabularx}%
}
@@ -102,16 +104,16 @@ you add class option \myopt{random} (see Subsection \ref{opt:random}):
\subsection{Document body}
In document body you normally write an \mycmd{\examtitle},
-multiple \mycmd{\examgroup}, and an optional \mycmd{\examdata} commands:
+multiple \mycmd{\exampart}, and an optional \mycmd{\examdata} commands:
\begin{code}
\examtitle{name=Math Final Exam,date=2018-06-28,version=A}
......
-\examgroup{Fill in the blanks.}{3 points for each.}
+\exampart{Fill in the blanks.}{3 points for each.}
......
-\examgroup{Select one answer.}{3 points for each.}
+\exampart{Select one answer.}{3 points for each.}
......
-\examgroup{Work out math calculations.}{8 points for each.}
+\exampart{Work out math calculations.}{8 points for each.}
......
\examdata{Some data may be used in the exam}
......
@@ -130,16 +132,16 @@ If the \mykey{date} key is missing, it has the default value \myval{\today}.
When class option \myopt{random} is passed, the value of \mykey{version} key
will be modified from \myval{A} to \myval{B}.
-\subsection{Exam groups}
+\subsection{Exam parts}
-The questions in an exam could be separated into several groups:
+The questions in an exam could be separated into several parts:
\begin{code}
-\examgroup{Fill in the blanks.}{3 points for each.}
+\exampart{Fill in the blanks.}{3 points for each.}
......
-\examgroup{Select one answer.}{3 points for each.}
+\exampart{Select one answer.}{3 points for each.}
......
-\examgroup{Work out math calculations.}{8 points for each.}
+\exampart{Work out math calculations.}{8 points for each.}
......
\end{code}
@@ -160,7 +162,7 @@ or the exam variants will be incorrect.
\subsection{True-or-false questions}
\begin{code}
-\examgroup{True-or-false questions}{3 points for each.}
+\exampart{True-or-false questions}{3 points for each.}
\begin{question}
The first true-or-false question. \tickout{T}
@@ -189,7 +191,7 @@ so as to make \mypkg{randexam} hide them in generating blank exam papers.
\subsection{Fill-in-the-blank questions}
\begin{code}
-\examgroup{Fill in the blanks.}{3 points for each.}
+\exampart{Fill in the blanks.}{3 points for each.}
\begin{question}
The first fill-in-the-blank question \fillout{answer}.
@@ -217,7 +219,7 @@ so as to make \mypkg{randexam} hide them in generating blank exam papers.
\subsection{Multiple-choice questions}
\begin{code}
-\examgroup{Select one answer.}{3 points for each.}
+\exampart{Select one answer.}{3 points for each.}
\begin{question}
The first multiple-choice questions \pickout{A}.
@@ -275,7 +277,7 @@ according to the lengths of the choices.
For subjective questions, you could put answers inside \myenv{solution} environment.
\begin{code}
-\examgroup{Work out math calculations.}{8 points for each.}
+\exampart{Work out math calculations.}{8 points for each.}
\begin{question}
The first math calculation question.
@@ -315,7 +317,7 @@ Answer to the second question.
You can write other types of questions. For example:
\begin{code}
-\examgroup{Some question type}{4 points for each.}
+\exampart{Some question type}{4 points for each.}
\begin{question}
First question text. \answer{Answer text.}
@@ -345,10 +347,16 @@ Normally you need a grade table after exam title.
You can get it by using \mycmd{\gradetable} command.
\begin{code}
-\gradetable
+\gradetable[total=6,strut=2em]
\end{code}
-\gradetable
+\vspace{-1.5em}\gradetable[total=6,strut=2em]
+
+The meanings of keys in the \verb!\gradetable! command are:
+\begin{description}
+ \item[total] total number of parts in this exam.
+ \item[strut] strut height of the score row; its default value is \verb!2.5em!.
+\end{description}
\subsection{Answer tables}
@@ -356,17 +364,18 @@ Before true-or-false, fill-in-the-blank, or multiple-choice questions,
you may use \mycmd{\answertable} to generate an blank answer table:
\begin{code}
-\answertable[3em]{6}{3}
+\answertable[total=6,column=3,strut=3em]
\end{code}
-\answertable[3em]{6}{3}
+\answertable[total=6,column=3,strut=3em]
-The meanings of the three arguments of \verb!\answertable! commands are as follows:
-\begin{itemize}
- \item The first one means the strut height of the answer rows; its default value is \verb!1em!.
- \item The second one means the total number of questions in this exam group.
- \item The third one means the number of questions in each row.
-\end{itemize}
+The meanings of keys in the \verb!\answertable! command are:
+\begin{description}
+ \item[total] total number of questions in this exam part.
+ \item[column] number of questions in each row.
+ \item[strut] strut height of the answer rows; its default value is \verb!1em!.
+ \item[notice] notice text before the answer table.
+\end{description}
\subsection{Vertical space}
@@ -412,12 +421,13 @@ This is a question.
\subsection{Solution name}
-If you want to change the name of \myenv{solution} environment,
-you could redefine \mycmd{\solutionname} command.
+If you would like to change the name of \myenv{solution} environment,
+you could modify the translation of \mykey{solution-Solution} keyword
+(see Subsection \ref{subsect:translation}).
The following example changes it from "Solution" to "Proof":
\begin{code}
-\renewcommand{\solutionname}{Proof}
+\DeclareExamTranslation{current}{solution-Solution=Proof}
\end{code}
\subsection{Points command}
@@ -498,7 +508,7 @@ The answers will be hidden in the compiled exam paper.
\subsection{Randomized variants}\label{opt:random}
Assume \myfile{exam-a-answer.tex} is an exam paper.
-You can get an randomized variant with all questions in the same group shuffled,
+You can get an randomized variant with all questions in the same part shuffled,
by creating an \myfile{exam-b-answer.tex} file with the following lines:
\begin{code}
@@ -507,7 +517,7 @@ by creating an \myfile{exam-b-answer.tex} file with the following lines:
\end{code}
That is to say, when adding \myopt{random} option to \mypkg{randexam} class,
-The questions in the same group will be shuffled in the compiled exam paper.
+The questions in the same part will be shuffled in the compiled exam paper.
Furthermore, four choices in an \myenv{abcd} environment will be shuffled too.
\subsection{Two column exam papers}
@@ -538,4 +548,147 @@ by creating a new TeX file with the following lines:
That is to say, you can make an exam of A3 size from an exam of A4 size,
even if you have only the PDF file.
+\section{Customizations}
+
+\subsection{Translations of keywords}\label{subsect:translation}
+
+With \mycmd{\DeclareExamTranslation} you can define the translaitons of the keywords
+in an \mypkg{randexam} paper. At this time only English keywords are defined:
+
+\begin{code}
+\DeclareExamTranslation{english}{
+ answertable-Answer = Answer
+ ,answertable-Number = Number
+ ,examdata-Appendix = Appendix
+ ,exampart-Part = Part
+ ,examtitle-Name = Name
+ ,examtitle-Solutions = Solutions
+ ,gradetable-Evaluator = Evaluator
+ ,gradetable-Part = Part
+ ,gradetable-Score = Score
+ ,gradetable-Total = Total
+ ,headfoot-Name = Name
+ ,headfoot-of = of
+ ,headfoot-Page = Page
+ ,headfoot-Solutions = Solutions
+ ,headfoot-Version = Version
+ ,points-point = point
+ ,points-points = points
+ ,question-Question = Question
+ ,solution-Solution = Solution
+}
+\end{code}
+
+You could translate them for another language and enable them with \mycmd{\SelectExamTranslation} command:
+
+\begin{code}
+\DeclareExamTranslation{somelang}{
+ question-Question = Questioooooon
+ ,solution-Solution = Soooooolution
+}
+\SelectExamTranslation{somelang}
+\end{code}
+\DeclareExamTranslation{somelang}{
+ question-Question = Questioooooon
+ ,solution-Solution = Soooooolution
+}
+\SelectExamTranslation{somelang}
+
+After this, you could load current translation of some keywords with \mycmd{\UseExamTranslation} command:
+
+\begin{code}
+\UseExamTranslation{question-Question}
+\UseExamTranslation{solution-Solution}
+\end{code}
+\hrule
+\UseExamTranslation{question-Question}
+\UseExamTranslation{solution-Solution}
+\vspace{0.5em}
+\hrule
+\vspace{0.5em}
+
+\SelectExamTranslation{english}
+
+This command is useful in defining new templates for the exam (see Subsection \ref{subsect:template}).
+
+\subsection{Saving and reading key values}
+
+With \mycmd{\DeclareExamValue} and \mycmd{\UseExamValue} you could save and read
+the value of a key, respectively.
+
+\begin{code}
+\DeclareExamValue{somemodule}{somekey}{SomeValue}
+\UseExamValue{somemodule}{somekey}
+\end{code}
+\hrule
+\DeclareExamValue{somemodule}{somekey}{SomeValue}
+\UseExamValue{somemodule}{somekey}
+\vspace{0.5em}
+\hrule
+\vspace{0.5em}
+
+These two commands are useful in defining new templates
+for the exam (see Subsection \ref{subsect:template}).
+
+\subsection{Templates of elements}\label{subsect:template}
+
+With \mycmd{\DeclareExamTemplate} you could define a new template for some exam element,
+which could be set as default template with \mycmd{\SelectExamTemplate}.
+And with \mycmd{\UseExamTemplate} you could use the default template of the element.
+
+To customize \myelem{examtitle} element for your school,
+you can write the following code in document preamble:
+\begin{code}
+\DeclareExamTemplate{examtitle}{myschool}{%
+ \fbox{%
+ \UseExamValue{examtitle}{name}\quad%
+ \UseExamValue{examtitle}{date}%
+ }%
+}%
+\SelectExamTemplate{examtitle}{myschool}
+\end{code}
+\DeclareExamTemplate{examtitle}{myschool}{%
+ \fbox{%
+ \UseExamValue{examtitle}{name}\quad%
+ \UseExamValue{examtitle}{date}%
+ }%
+}%
+\SelectExamTemplate{examtitle}{myschool}
+
+Then the \mycmd{\examtitle} command in document body will produce different result:
+\begin{code}
+\examtitle{name=Final Exam in My School,date=2024-01-01}
+\end{code}
+\vspace{-1em}
+\examtitle{name=Final Exam in My School,date=2024-01-01}
+
+Normally \mycmd{\examtitle} will call \mycmd{\UseExamTemplate{examtitle}{default}}.
+
+All elements that could be customized with templates in an exam paper
+are listed in the following table:
+
+\begingroup\renewcommand\arraystretch{1.5}\noindent
+\begin{tabularx}{\linewidth}{ll}
+\hline
+ \myelem{examtitle} & for customizing \mycmd{\examtitle} command \\
+\hline
+ \myelem{exampart} & for customizing \mycmd{\exampart} command \\
+\hline
+ \myelem{examdata} & for customizing \mycmd{\examdata} command \\
+\hline
+ \myelem{gradetable} & for customizing \mycmd{\gradetable} command \\
+\hline
+ \myelem{answertable} & for customizing \mycmd{\answertable} command \\
+\hline
+ \myelem{questionbegin} & for customizing \myenv{question} environment \\
+\hline
+ \myelem{questionend} & for customizing \myenv{question} environment \\
+\hline
+ \myelem{solutionbegin} & for customizing \myenv{solution} environment \\
+\hline
+ \myelem{solutionend} & for customizing \myenv{solution} environment \\
+\hline
+\end{tabularx}\par
+\endgroup
+
\end{document}
diff --git a/macros/musictex/undar-digitacion/README.md b/macros/latex/contrib/undar-digitacion/README.md
index 0010433ffb..0010433ffb 100644
--- a/macros/musictex/undar-digitacion/README.md
+++ b/macros/latex/contrib/undar-digitacion/README.md
diff --git a/macros/musictex/undar-digitacion/undar-digitacion-doc.pdf b/macros/latex/contrib/undar-digitacion/undar-digitacion-doc.pdf
index bb6f1aae66..bb6f1aae66 100644
--- a/macros/musictex/undar-digitacion/undar-digitacion-doc.pdf
+++ b/macros/latex/contrib/undar-digitacion/undar-digitacion-doc.pdf
Binary files differ
diff --git a/macros/musictex/undar-digitacion/undar-digitacion-doc.tex b/macros/latex/contrib/undar-digitacion/undar-digitacion-doc.tex
index 263535e0f0..263535e0f0 100644
--- a/macros/musictex/undar-digitacion/undar-digitacion-doc.tex
+++ b/macros/latex/contrib/undar-digitacion/undar-digitacion-doc.tex
diff --git a/macros/musictex/undar-digitacion/undar-digitacion.dtx b/macros/latex/contrib/undar-digitacion/undar-digitacion.dtx
index a474c2b298..a474c2b298 100644
--- a/macros/musictex/undar-digitacion/undar-digitacion.dtx
+++ b/macros/latex/contrib/undar-digitacion/undar-digitacion.dtx
diff --git a/macros/musictex/undar-digitacion/undar-digitacion.sty b/macros/latex/contrib/undar-digitacion/undar-digitacion.sty
index 8caa646276..8caa646276 100644
--- a/macros/musictex/undar-digitacion/undar-digitacion.sty
+++ b/macros/latex/contrib/undar-digitacion/undar-digitacion.sty
diff --git a/macros/musictex/FAQ b/macros/musictex/FAQ
deleted file mode 100644
index 5165463c08..0000000000
--- a/macros/musictex/FAQ
+++ /dev/null
@@ -1,240 +0,0 @@
-
-FAQ 930127: Frequently Asked Questions pertaining to MusicTeX and MuTeX
-
--------------------------------------------------------------------------------
-
-NOTE: This is a bare bones beginning of what will constitute a more substantial
- "Frequently Asked Questions" for MuTeX and MusicTeX.
-
- Please mail your contributions to this to "mutex@stolaf.edu"
-
--------------------------------------------------------------------------------
-TABLE OF CONTENTS
--------------------------------------------------------------------------------
-
-01 What is MuTeX?
-02 Where can I get MuTeX and MusicTeX?
-03 Where are the archives of MuTeX mailing list?
-04 With MusicTeX I get notes and beams, but they are badly aligned,
- beams and slurs are offset to the right etc.
-05 I obtained easily the .TEX files but the .PK and .TFM are wrong.
-06 There is no documentation with MusicTeX.
-07 I run MusicTeX on SUNOS (or some other big computer) but I have
- memory problems with MSDOS
-08 Where's the glue? it's not clear to me when to use or not use \temps
- or just what it really does.
-09 When and why do you really need to put \relax at the end of a line?
-10 What are the advantages or disadvantages of using ^ instead of \sh?
- Is one more flexible, or is it just a matter of typing style?
-11 How can I put something somewhere in the MusicTeX staffs.
-12 I cannot print notice.tex with american paper.
-13 How can I make triplets?
-14 How can I offset vertically the rests, in order to avoid collision
- with beams or other notes in polyphonic music:
-
--------------------------------------------------------------------------------
-
-This FAQ list is kept up to date by the contributions of the members of the
-mutex mailing list. To participate in mutex and musictex discussions, you
-can subscribe to (or unsubscribe from) the "mutex" mailing list at the
-address:
- mutex-request@stolaf.edu
-To send a question to the entire membership of the mutex mailing list, use
-the address:
- mutex@stolaf.edu
-
--------------------------------------------------------------------------------
-01 What is MuTeX?
-
-The MuTeX package is a set of macros allowing TeX to typeset music. It was
-written by Andrea Steinbach and Angelika Schofer, as a master's thesis at
-Rheinische Friedrich-Wilhelms University. MuTeX allows you to typeset
-single-staff music and lyrics.
-
-
-01 What is MusicTeX?
-
-Another powerful package which allows the typesetting of orchestral and
-polifonic music is MusicTeX, written by Daniel Taupin.
-
-The main difference between MuTeX and MusicTeX is that
- - MusicTeX deals with multiple staves (staffs?)
- - MuTeX produces a nicer output.
-
-The reason that MuteX produces nicer output seems to be that it can
-handle only single-staff music and therefore can easier put glue
-between the notes. A second reason is that it makes "real" slurs and not
-some sort of rotated brackets (braces, ...). But MusicTeX is getting
-better and better because Daniel Taupin maintains it whilst nearly
-nobody continues the development of MuTeX
-
--------------------------------------------------------------------------------
-02 Where can I get MuTeX and MusicTeX?
-
-Most up to date version of musictex:
-
- rsovax.ups.circe.fr directory [anonymous.musictex]
-
-Different versions of MuTeX and MusicTeX are available from many other
-sites, including:
- ftp.stolaf.edu /pub/mutex/MuTeX.tar.Z
- ftp.stolaf.edu /pub/mutex/MuTeX_doc.tar.Z
- ftp.gmd.de /music/mutex/mutex.zip
- ccadfa.cc.adfa.oz.au /pub/tex/MuTeX.tar.Z
- clouso.crim.ca /pub/MuTeX.tar.Z
- sol.cs.ruu.nl /pub/TEX/mtex.tar.Z
-
-MusicTeX
- ftp.stolaf.edu /pub/mutex/musictex-4.31.tar.Z
- ftp.gmd.de /music/musictex/musictex.zip
- /music/musictex/musictex-nnn.tar.Z
- alfred.ccs.carleton.ca /pub/tex/MusicTeX.tar.Z
- aix370.rrz.uni-koeln.de /tex/musictex.tar.Z
- bach.cs.umb.edu /pub/tex/musictex.tar.Z
- cs.dal.ca /pub/comp.archives/musictex
- emx.utexas.edu /pub/mnt/source/tex/musictex.tar.Z
- forwiss.uni-passau.de /pub/tex/macros/musictex.tar.Z
- iraun1.ira.uka.de /tex/musictex.tar.Z
- kth.se /tex/umb/musictex.tar.Z
- wraith.cs.uow.edu.au /cache/ftp.cs.umb.edu/pub/tex/musictex.tar.Z
- qed.rice.edu /pub/musictex.tar.Z
- sol.cs.ruu.nl /TEX/musictex.tar.Z
- srawgw.sra.co.jp /.a/sranha/arch/arch/comp.archives/musictex
- srawgw.sra.co.jp /.a/sranha/arch/arch/comp.archives/music/notation/musictex
-
-Other Related Stuff
- arisia.xerox.com /pub/musictexdemo.PS
- athene.uni-paderborn.de /pcsoft/amiga/tex/fonts/musictex.lzh
- nz20.rz.uni-karlsruhe.de /pub/pctex/texutl/macros/musictex.lzh
- ftp.gmd.de /music/midi2tex/... midi to MusicTeX
-
-For those without FTP access, you can e-mail to:
-
- mail-server@cs.ruu.nl TEX/musictex.tar.Z
-or
-
-(Submitted by: dgold@basso.actrix.gen.nz (Dale Gold))
-
--------------------------------------------------------------------------------
-03 Where are the archives of the MuTeX mailing list?
-
-Archives for the MuTeX mailing list are available via anonymous FTP from:
- ftp.stolaf.edu:/pub/mutex/archive (actual size: 0.5 MB!)
-
--------------------------------------------------------------------------------
-04 With MusicTeX I get notes and beams, but they are badly aligned,
- beams and slurs are offset to the right etc.
-
-Remove all unnecessary spaces, i.e. ALL (all, not most of them)
-spaces which do not follow a TeX or MusicTeX control sequence. E.g.:
-do not write \qu h | \ibu0i3 \qu b \qu c \enotes
-but \qu h|\ibu0i3\qu b\qu c\enotes
-
-\relax at the end of each line not ending with \enotes
-
-Answer thanks to TAUPIN@FRUPS51.bitnet
-
--------------------------------------------------------------------------------
-
-05 I obtained easily the .TEX files but the .PK and .TFM are wrong.
-
-You probably forgot to say BINARY to your ftp before GETting the binary files.
-As a rule the .TEX and .STY are ASCII, as well as the .MF. But the .PK, .ZIP,
-.TFM and (for VMS) .BCK files must be transferred in BINARY
-
-Answer thanks to TAUPIN@FRUPS51.bitnet
-
--------------------------------------------------------------------------------
-
-06 There is no documentation with MusicTeX.
-
-There is one, named musicdoc.tex. You may process it by plain TeX after
-installing the tfm-files from the distribution. The result is musicdoc.dvi
--- which is in the distribution, too. Print it with you favourite dvi-driver.
-If you do not have all fonts, put dummy ones and read the text. It will not
-be beautiful, but still informative...
-
--------------------------------------------------------------------------------
-
-07 I run MusicTeX on SUNOS (or some other big computer) but I have
- memory problems with MSDOS
-
-Two solutions:
- a) insert compulsory line breaks (\alaligne) and page breaks (\alapage)
- b) use Eberhardt Mattes's bigtex (btex286) (or the beta-test version
- of tex386 if you have at least a 386-machine)
-
--------------------------------------------------------------------------------
-
-08 Where's the glue? it's not clear to me when to use or not use \temps
- or just what it really does.
-
-Glue occurs each time you say \barre or \temps or \alaligne or \alapage
-\temps is used to put glue between groups of notes. You can disable it
-and look how ugly it looks...
-
--------------------------------------------------------------------------------
-
-09 When and why do you really need to put \relax at the end of a line?
-
-Put \relax at end of lines whenever the last item is not a control
-sequence. Because in this case the spaces are swallowed by TeX as a
-final part of the control sequence. Thus I use \relax when I need
-a control sequence to swallow end of line spaces (and new line code).
-
--------------------------------------------------------------------------------
-
-10 What are the advantages or disadvantages of using ^ instead of \sh?
- Is one more flexible, or is it just a matter of typing style?
-
-The ^ is used within collective coding, \sh is used outside.
-
- You may write \sh k\qu k
- or \qu$^k
-
--------------------------------------------------------------------------------
-
-11 How can I put something somewhere in the MusicTeX staffs.
-
-Read the musicdoc and use \zcharnote\244<pitch>\207\244<what-you-like>\207
-If you want it spacing use \charnote\244...\207\244...\207
-Within those macros you can put anything, including maths
-below, in the middle of, above the staffs. To be used inside
-tne \notes....\enotes.
-
--------------------------------------------------------------------------------
-
-12 I cannot print notice.tex with american paper.
-
- don't print it :-) you have an old version. New versions of
- MusicTeX contain musicdoc.dvi a LaTeX-document which fits
- on american paper.
-
--------------------------------------------------------------------------------
-
-13 How can I make triplets?
-
-It's already in musictex.tex, but without the `slur' you wanted. \xtuplet
-is the routine that puts a number under your beam, and the line:
-
- \def\triolet{\xtuplet3}%
-
-will provide you with a number under or over your beam and it could be
-adapted for sextuplets or anything else. This will make you a nice
-triplet:
-
- \Notes\ibl0j0\triolet M\qb0{jk}\tbl0\qb0j\enotes
-
--------------------------------------------------------------------------------
-
-14 How can I offset vertically the rests, in order to avoid collision
- with beams or other notes in polyphonic music:
-
-Write \raise <n>\internote\ds
- or \raise <n>\internote\soupir
-
- All rests are \hbox-es, so you can prefix them with \raise <dimension>
- The <dimension> (or <n>\internote or <n>\Interligne) can be negative.
-
--------------------------------------------------------------------------------
-
diff --git a/macros/musictex/README b/macros/musictex/README
deleted file mode 100644
index 55979dfd2d..0000000000
--- a/macros/musictex/README
+++ /dev/null
@@ -1,40 +0,0 @@
-Here you find Daniel Taupin's MusicTeX a TeX-based system to typeset music.
-
-The package consists of three parts.
-
-- the TeX-macros, -font descriptions, -fonts for 300dpi printers, font-
- definitions and the documentation as zip-file musictex.zip or as com-
- pressed tar-file musictex-nnn.tar.gz if nnn is the version number.
-
- Older versions are available too as zip-files named musictex.nnn, as well
- as zip-files containing only the differences between older versions named
- musictex.iii-nnn.zip (for the step from version iii to version nnn).
- Because some people don't bother about bandwidth and simply use "mget *"
- I've moved older versions to the directory older-versions and diff-files
- to the directory diff-files. I hope that it is not neccessary to put zip-
- and tar-files into different directories to make it not so easy to fetch
- more than one needs.
-
- If you want to use these diff-files you may have to rename them either
- when ftp'ing them or when unzip'ing them. The diff-files do not contain
- the dvi-file of the documention, because this may be produced by yourself
- from the source musicdoc.tex, which is contained if it has been changed.
-
-- some examples, compositions and arrangements by Daniel Taupin named either
- musicexa.zip or musicexa-nnn.tar.gz
- Version handling and diff-files follow the same rules as for musictex.
-
-- fonts, font-metrics, ... for (some) other resolutions than 300 dpi
- in musicpk.zip or musicpk-nnn.tar.gz
-
-The base material (the zip-files) is copied from Daniel Taupins ftp-server
-at hprib.lps.u-psud.fr. The tar- and diff-files are generated by me.
-
-There is a mailing-list for discussions about MusicTeX (and MuTeX). To
-subscribe to this list send a mail to mutex-request@gmd.de contain-
-ing the word subscribe in the body of the mail.
-
-The directory software (only at ftp.gmd.de) points at some software on
-top of MusicTeX like abc2mtex or midi2tex.
-
-Werner.Icking@gmd.de
diff --git a/macros/musictex/add-ons/harmonics.tex b/macros/musictex/add-ons/harmonics.tex
deleted file mode 100644
index f3d738c5df..0000000000
--- a/macros/musictex/add-ons/harmonics.tex
+++ /dev/null
@@ -1,120 +0,0 @@
-%
-% Harmonics in MusicTeX
-% =====================
-%
-%\input musicnft
-%\input musictex
-%\input musicsty
-\input musicvbm
-\def\musictex{Music\TeX}%
-% ________________________________________________________________________
-%
-% Harmonic quaver duplets:-
-% _____ 2 3
-% ypairu | | ypairl | |
-% | | | |
-% 2 3 -----
-%
-\def\ypairu#1#2#3% #1 is beam number, #2 and #3 are notes
-{\Ibu{#1}{#2}{#3}1\yh{#1}{#2}\tbu{#1}\yh{#1}{#3}}\relax
-%
-\def\ypairl#1#2#3% #1 is beam number, #2 and #3 are notes
-{\Ibl{#1}{#2}{#3}1\yb{#1}{#2}\tbl{#1}\yb{#1}{#3}}\relax
-%________________________________________________________________________
-\centerline{\enorme Harmonic notes in \musictex}
-\bigskip
-\bigskip
-\def\wbarno{}%
-\def\nbinstruments{1}%
-\cleftoksi={{0}{0}{0}{0}}%
-\staffbotmarg=12\Interligne%
-%
-% Note symbols by name
-%
-\def\bslash{{\tt\char'134}}%
-\def\mcra#1{\zcharnote{13}{\hbox to 1.3\Interligne{\hss\tt\bslash #1\hss}}}%
-\def\mcrb#1{\kern 10pt\mcra {#1}\kern -10pt}
-%
-\parindent 0mm%
-\debutextrait\normal\temps\NOTEs
-\qsk\qsk\hsk%
-\mcra{zd\bslash sk}\zd i\sk\qsk\mcra{du}\du i\qsk
-\mcra{dup}\dup i\qsk\mcra{dupp}\dupp i\qsk
-\mcra{duppp}\duppp i\qsk\mcra{dl}\dl i\qsk
-\mcra{dlp}\dlp i\qsk\mcra{dlpp}\dlpp i\qsk
-\mcra{dlppp}\dlppp i\enotes\finextrait
-\bigskip
-%
-\parindent 0mm%
-\debutextrait\normal\temps\NOTEs
-\qsk\qsk\hsk%
-\mcra{zy\bslash sk}\zy i\sk\qsk\mcra{yu}\yu i\qsk
-\mcra{yup}\yup i\qsk\mcra{yupp}\yupp i\qsk
-\mcra{yuppp}\yuppp i\qsk\mcra{yl}\yl i\qsk
-\mcra{ylp}\ylp i\qsk\mcra{ylpp}\ylpp i\qsk
-\mcra{ylppp}\ylppp i\enotes\finextrait
-%
-\parindent 0mm%
-\debutextrait\normal\temps\NOTEs
-\qsk\qsk\hsk%
-\mcra{ycu}\ycu i\qsk\mcra{yccu}\yccu i\qsk
-\mcra{ycccu}\ycccu i\qsk\mcra{yccccu}\yccccu i\qsk
-\mcra{ycl}\ycl i\qsk\mcra{yccl}\yccl i\qsk
-\mcra{ycccl}\ycccl i\qsk\mcra{yccccl}\yccccl i\qsk
-\enotes\finextrait
-%
-%
-\parindent 0mm%
-\debutextrait\normal\temps\NOTes
-\qsk\qsk\hsk%
-\mcrb{ypairu1cf}\ypairu1cf\sk%
-\mcrb{ypairu1eg}\ypairu1eg\sk%
-\mcrb{ypairl1jm}\ypairl1jm\sk%
-\mcrb{ypairl1ln}\ypairl1ln\sk%
-\enotes
-\finextrait
-%
-% Guitar Harmonics
-%
-\def\guitar#1#2#3% 1=note, 2=string, 3=fret
-{\zd #1\raise-12pt\hbox{\guitarsym#2#3}\sk}
-\def\lguitar#1#2#3% 1=note, 2=string, 3=fret
-{\raise-12pt\hbox{\guitarsym#2#3}\hqsk\zd #1\qsk\sk}
-%
-\centerline{\moyen Guitar harmonics}
-\medskip
-\parindent 0mm%
-%
-% ---
-% | A | B
-% ---
-%
-% A is the string number (Counting from treble E to bass E)
-% E string = 1, B = 2, G = 3, D = 4, A = 5, E = 6
-%
-% B is the fret number, counting from the nut (or the capot if one is used)
-% Thus 0 indicates an open string, 2 indicates fret 2 etc.
-%
-\font\eightrm=cmr8
-%
-\edef\catcodeat{\the\catcode`\@}\catcode`\@=11
-%
-\def\guitarsym#1#2{%
-% Modified version of \boxtext lifted from gentle.tex - A gentle intro to TeX
-\eightrm\setbox\strutbox=\hbox{\vrule height5.75pt depth0.75pt width\z@}%
-\hbox{\lower 1pt \hbox{\vbox{\hrule%
-\hbox{\strut \vrule #1\vrule}\hrule}}\hskip 0.5pt#2}}%
-%
-\catcode`\@=\catcodeat % Reset catcode of '@' to entry value
-%
-\def\sy#1#2% Inserts #2 as text #1 points to the right of the cursor
-{\kern#1pt\charnote0{#2}\kern-#1pt}%
-%
-\def\gs#1#2{\sy{-0.8}{\guitarsym{#1}{#2}}}\relax % One string
-%
-\debutextrait\normal\temps\NOtes\qsk%
-\lguitar L6{12}\lguitar a5{12}\lguitar b6{7}\lguitar d4{12}%
-\guitar e5{7}\guitar g3{12}\guitar h4{7}\guitar i2{12}%
-\guitar k3{7}\guitar l1{12}\sh m\guitar m2{7}\guitar n3{5}%
-\guitar p1{7}\guitar s1{5}\enotes\finextrait
-\bye
diff --git a/macros/musictex/musicdoc.pdf b/macros/musictex/musicdoc.pdf
deleted file mode 100644
index 4a21c2ef3d..0000000000
--- a/macros/musictex/musicdoc.pdf
+++ /dev/null
Binary files differ