summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/enumext/enumext.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/enumext/enumext.dtx')
-rw-r--r--macros/latex/contrib/enumext/enumext.dtx1428
1 files changed, 1006 insertions, 422 deletions
diff --git a/macros/latex/contrib/enumext/enumext.dtx b/macros/latex/contrib/enumext/enumext.dtx
index 5cc3a17b60..ea8cc0f159 100644
--- a/macros/latex/contrib/enumext/enumext.dtx
+++ b/macros/latex/contrib/enumext/enumext.dtx
@@ -272,6 +272,14 @@
{
\textcolor{\l_userdoc_meta_brackcolor_tl}{#1}
}
+% Rewrite \textborn | textasteriskcentered
+\DeclareTextSymbol{\textbornstd}{TS1}{98}
+\UndeclareTextCommand{\textborn}{TS1}
+\makeatletter
+\DeclareTextCommandDefault{\textbornstd}{\tc@check@symbol2\textbornstd}
+\makeatother
+\DeclareRobustCommand{\textborn}{{\fontfamily{lmr}\selectfont\textbornstd}}
+\newcommand{\oldtextasteriskcentered}{{\fontfamily{lmr}\selectfont\textasteriskcentered}}
% \envexamp{m}
\newsavebox{\boxexaenv}
\tl_new:N \l_tempc_tl
@@ -594,7 +602,7 @@
multicolsep,leftmargini,leftmarginii, hfill, small, vspace, par, parbox, value, noindent, makebox, textcolor, %
itemindent, labelwidth, leftmarginiii,leftmarginiv,itemindent, itemsep, strutbox, raggedright, cs_new_eq, N, NN,%
labelwidth, fbox, addvspace, Alph, alph, arabic, Roman, roman, partopsep, baselineskip, mode_leave_vertical,%
- textbullet, textendash, textasteriskcentered, textperiodcentered, raggedleft, peek_remove_spaces, skip_horizontal, %
+ textborn, textbullet, textendash, textasteriskcentered, textperiodcentered, raggedleft, peek_remove_spaces, skip_horizontal, %
triangleright, diamond, circ, parleft, star, centering, ast, hyperlink,hypertarget,IfHyperBoolean,newtheorem, %
aux_i, aux_ii, aux_iii, w, n, N, if@noitemarg, if, if@hyper@item, hyper, noitemarg, skip_vertical, },%
% Other words 3
@@ -615,9 +623,9 @@
keywords = [6]{save-ans,wrap-ans,save-ref,show-pos,show-ans,columns,list-offset, eunumXi,%
nosep,before,after,start, right, item-sym, item-sep, hyperfootnotes, item-star, %
scale,wrap-label,font,first,widest,mini-env,list-indent, no-store, save-key,%
- store-env, print-env, write-out, force-eol, write-env, overwrite, unknown, %
+ store-env, print-env, write-out, force-eol, write-env, overwrite, unknown, base-fix,%
midsep, wrapper,label-pos,label-sep, layout-sty, layout-sep, layout-top, lang,%
- pdfversion, pdfstandard, testphase, alt},%
+ pdfversion, pdfstandard, testphase, alt, mark-sep, wrap-ans*, mark-ans, mark-sep},%
% Reserved words 7 (label values)
keywordstyle = [7]{\color{MediumOrchid}},%
keywords = [7]{m,s,M,VIII,viii,v,E,t,l,A,XXIII,true, false,test,sample,above,below,ua-2,phase-III,%
@@ -805,16 +813,54 @@
{\strut\smash{\parbox[t]{\labelwidth}{\raggedright{#2}}}}%
{\strut\smash{\parbox[t]{\labelwidth}{\raggedleft{#2}}}}%
}
-%%%\ExplSyntaxOn
-%%5\NewDocumentCommand \labelbx { s +m }
-%% {
-%% %% \tag_suspend:n {\parbox}
-%% \IfBooleanTF{#1}
-%% { \parbox[t]{\labelwidth}{\raggedright{#2}} }
-%% { \parbox[t]{\labelwidth}{\raggedleft{#2}} }
-%% %% \tag_resume:n {\parbox}
-%% }
-%%%\ExplSyntaxOff
+% For azetina sample
+\newlength{\itemwd}
+\settowidth{\itemwd}{\bfseries 10.} % max width
+\NewDocumentCommand \rating { }{8.5a, KSC}
+\ExplSyntaxOn
+\bool_new:N \l_azetina_rating_bool
+\NewDocumentCommand \showrating { m }
+ {
+ \str_case:nn {#1}
+ {
+ { true }
+ {
+ \bool_set_true:N \l_azetina_rating_bool
+ \setenumext{show-ans=true,save-sep={ }}
+ }
+ { false }
+ {
+ \bool_set_false:N \l_azetina_rating_bool
+ \setenumext{show-ans=false,save-sep={ }}
+ }
+ }
+ }
+\NewDocumentCommand \myans { m +m }
+ {
+ \bool_if:NTF \l_azetina_rating_bool
+ {
+ \item*[(#1)] \textcolor{red}{#2}
+ }
+ {
+ \item*[(#1)] \textcolor{black}{#2}
+ }
+ }
+\NewDocumentCommand \azwrapp { m }
+ {
+ \bool_if:NTF \l_azetina_rating_bool
+ {
+ \makebox[\dim_eval:n{\marginparwidth}][r]
+ {
+ \textcolor{red}{\bfseries\footnotesize\rating}
+ }
+ \hspace{\marginparsep}\textbf{#1}
+ }
+ {
+ \makebox[\dim_eval:n{\marginparwidth+\marginparsep}][l]{ }\textbf{#1}
+ }
+ }
+\ExplSyntaxOff
+\setenumextmeta[enumext,1]{azetinasty}{label={\arabic*.},labelwidth={\marginparwidth+\marginparsep+\itemwd},list-offset={-\marginparwidth-\marginparsep},}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
@@ -910,7 +956,7 @@
%
% \section{Introduction}
%
-% In the \hologo{LaTeX} world world there are many useful packages and
+% In the \hologo{LaTeX} world there are many useful packages and
% classes for creating \emph{\enquote{lists of exercises}}, \emph{\enquote{worksheets}} or
% \emph{\enquote{multiple choice questions}}, classes like \myclass{exam}\cite{exam}
% and packages like \mypkg{xsim}\cite{xsim} do the job perfectly, but
@@ -952,7 +998,7 @@
%
% \smallskip
%
-% \begin{enumext}[save-ans=worksheet,columns=2,show-ans=true,nosep,save-ref=true]
+% \begin{enumext}[save-ans=worksheet,mark-ans={\oldtextasteriskcentered},columns=2,show-ans=true,nosep,save-ref=true]
% \item Factor $x^{2}-2x+1$ \anskey{$\left(x-1\right)^{2}$}
% \item Factor $3x+3y+3z$ \anskey{$3(x+y+z)$}
% \item True False
@@ -1042,7 +1088,7 @@
% \anspic*[A duck]{\includegraphics[scale=0.30]{example-image-duck}}
% \end{keyanspic}
%
-% \item Question with image on left side:
+% \item Question with image on right side:
%
% \begin{keyans}[mini-env=0.5\linewidth, columns=1,noitemsep]
% \item value
@@ -1534,7 +1580,7 @@
%
% \subsubsection{Keys for \cs[no-index]{item*}}
%
-% \keyexamp{item-sym\textcolor{MediumOrchid}{*}}{symbol}{\textbackslash{}textasteriskcentered}
+% \keyexamp{item-sym\textcolor{MediumOrchid}{*}}{symbol}{\textbackslash{}textborn}
% Sets the \emph{symbol} to be displayed in the \emph{\enquote{left}} of the
% box containing the current \mymeta{label} set by \mykey{labelwidth} key for \ics*{item*} in
% \myenv*{enumext} and \myenv*{enumext*}. The \emph{symbol} can be in
@@ -1744,8 +1790,9 @@
%
% \smallskip
%
-% Sets the \mymeta{label} that will be printed at the \emph{current
-% level}. The default value for the first level of the environments
+% Sets the \mymeta{label} that will be printed at the \emph{current level}
+% and default value for \mykey{labelwidth} key.
+% The default value for the first level of the environments
% \myenv*{enumext} and \myenv*{enumext*} are \ilabel{arabic*.}, for
% second level are \ilabel*{alph*)}, for third level are \ilabel{roman*.}
% and for fourth level are \ilabel{Alph*.}. For \myenv*{keyans}
@@ -1775,12 +1822,14 @@
% \smallskip
%
% \keyexamp{labelwidth}{rigid length}{by label}
-% Sets the \emph{width} of the box containing the current \mymeta{label} set
-% by \mykey{label} key. Internally sets the value of \ics{labelwidth} for the current
-% level. The default values are calculated by means of the \emph{width}
-% of a box by setting a \emph{value} to the current counter using ‘\mydim{0}’ for
-% \ilabel{arabic*}, ‘|M|’ for \ilabel{Alph*}, ‘|m|’ for \ilabel{alph*}, ‘|VIII|’
-% for \ilabel{Roman*} and ‘|viii|’ for \ilabel{roman*}.
+% Sets the \emph{width} of the box containing the current \mymeta{label}
+% set by the \mykey{label} key.
+% Internally sets the value of \ics{labelwidth} for the current level.
+% The default values are calculated by means of the \emph{width} of a box
+% by setting a \emph{value} to the current counter set by \mykey{label}
+% key using ‘\mydim{0}’ for \ilabel{arabic*}, ‘|M|’ for \ilabel{Alph*},
+% ‘|m|’ for \ilabel{alph*}, ‘|VIII|’ for \ilabel{Roman*} and ‘|viii|’
+% for \ilabel{roman*}.
%
% \smallskip
%
@@ -1815,12 +1864,13 @@
%
% \smallskip
%
-% Wraps the \emph{current} \mymeta{label} defined by \mykey{label} key referenced by |{#1}|.
-% The \mymarg{code} must be passed between braces.
-% This key does not modify the value set by the \mykey{labelwidth} key
-% and is applied only on \ics*{item} and \ics*{item*}.
+% Wraps the \emph{current} \mymeta{label} defined by \mykey{label} key
+% referenced by |{#1}| after executing the \mykey{align} and \mykey{font}
+% keys. The \mymarg{code} must be passed between braces and this does not
+% modify the value set by the \mykey{labelwidth} key and is applied \emph{only}
+% on \ics*{item} and \ics*{item*}.
% When using it in the \ics*{setenumext} command it is necessary to use the
-% \emph{double hash} ‘|{##1}|’. For example |wrap-label={\fbox{#1}}|
+% \emph{double} ‘|{##1}|’. For example |wrap-label={\fbox{#1}}|
% or you can create a command:
%
% \iffalse
@@ -2302,8 +2352,11 @@
% \smallskip
%
% Set the \emph{number of columns} to be used by the \myenv{multicols}
-% environment within the environment. The value must be a positive
+% environment within the environments \myenv*{enumext} and \myenv*{keyans}. The value must be a positive
% integer less than or equal to \mydim{10}.
+% In the \myenv*{enumext*} and \myenv*{keyans*} environments they
+% correspond to the default number of columns (without joining) and
+% internally adjust the value of |\itemwidth|.
%
% \smallskip
%
@@ -2312,10 +2365,13 @@
% \smallskip
%
% Set the \emph{space between} columns used by the \myenv{multicols}
-% environment within the environment. Internally sets the value of
+% environment within the environments \myenv*{enumext} and \myenv*{keyans}. Internally sets the value of
% \ics{columnsep}, by default its value is equal to the sum of the
% values set in the keys \mykey{labelwidth} and \mykey{labelsep} of the
% current level.
+% In the \myenv*{enumext*} and \myenv*{keyans*} environments they
+% correspond to the \emph{space between} columns (without joining) and
+% internally adjust the value of |\itemwidth|.
%
% \subsection{Keys for \env{minipage}}\label{key:mini}
%
@@ -2446,14 +2502,12 @@
%
% \smallskip
%
-%^^A \begin{important}*
-% For security reasons the \emph{optional argument} of the inner levels
-% or the nested environment are \emph{filtered} by excluding all \mymeta{keys}
-% related to the \emph{\enquote{storage system}} (\S\ref{subsec:storage-keys})
-% along with the keys \mykey{mini-env}, \mykey{mini-sep}, \mykey{mini-right},
-% \mykey{mini-right*}, \mykey{series}, \mykey{resume} and \mykey{resume*}
-% when storing in \emph{sequence} \mymarg{store name} set by \mykey{save-ans} key.
-%^^A \end{important}
+% For security reasons the \emph{optional argument} of the inner levels
+% or the nested environment are \emph{filtered} by excluding all \mymeta{keys}
+% related to the \emph{\enquote{storage system}} (\S\ref{subsec:storage-keys})
+% along with the keys \mykey{mini-env}, \mykey{mini-sep}, \mykey{mini-right},
+% \mykey{mini-right*}, \mykey{series}, \mykey{resume} and \mykey{resume*}
+% when storing in \emph{sequence} \mymarg{store name} set by \mykey{save-ans} key.
%
% \subsection{Keys for storage system}\label{subsec:storage-keys}
%
@@ -2522,6 +2576,22 @@
% affects the \emph{\enquote{stored content}} and not what is displayed
% when using the \mykey{show-ans} or \mykey{show-pos} keys.
%
+% \smallskip
+%
+% \keyexamp*{no-store}{value forbidden}{not used}
+%
+% \smallskip
+%
+% This is a \emph{\enquote{switch-key}} that does not receive an argument
+% and disables the \emph{\enquote{storing content}} in the \emph{sequence}
+% and \emph{prop list} \mymarg{store name} set by \mykey{save-ans} key at
+% the entire level or a nested environment in which it runs. This key
+% is intended for use in internal levels or nested \myenv*{enumext} or
+% \myenv*{enumext*} environments in which you want to use \myenv*{enumext}
+% or \myenv*{enumext*} but \emph{\enquote{without}} using the \ics*{anskey}
+% command or use \myenv*{anskey*} environment and \emph{\enquote{without}}
+% interfering with the \mykey{check-ans} key.
+%
% \subsubsection{Keys for \texttt{label} and \texttt{ref}}\label{subsec:label-ref}
%
% \keyexamp{save-ref}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false}
@@ -2539,7 +2609,7 @@
%
% \smallskip
%
-% \keyexamp{mark-ref}{symbol}{\textbackslash{}\textreferencemark}
+% \keyexamp{mark-ref}{symbol}{\textbackslash{}textreferencemark}
% Sets the \emph{symbol} that will be displayed by the \ics*{printkeyans}
% command only if the \mypkg{hyperref} package is detected and the
% \mykey{save-ref} key are active.
@@ -2547,17 +2617,136 @@
% in which the \mykey{save-ans} key was used and the place where the
% command is executed.
%
-% \subsubsection{Keys for \texttt{wrap} and \texttt{display}}\label{subsec:wrap-display}
+% \subsubsection{Keys for \texttt{wrap} and \texttt{marks}}\label{subsec:wrap-display}
+%
+% The \mypkg*{enumext} package provides a set of \mymeta{keys} to set and
+% manipulate \emph{\enquote{symbol marks}} associated with
+% \emph{\enquote{answers}} ​​and how they are displayed and stored in the
+% \emph{sequence} and \emph{prop list}.
+%
+% \smallskip
+%
+% The \mymeta{keys} available for the |\anskey| command and the
+% \myenv*{anskey*} environment can be passed \emph{\enquote{only}} in the
+% \emph{optional argument} in the \emph{\enquote{first level}} of the
+% \myenv*{enumext} or \myenv*{enumext*} environment.
+%
+% \smallskip
+%
+% The \mymeta{keys} available for the \myenv*{keyans} and
+% \myenv*{keyans*} environments can be passed locally in the
+% \emph{optional argument}, at the \emph{\enquote{first level}} of the
+% \myenv*{enumext} or \myenv*{enumext*} environment or via the
+% |\setenumext| command with one minor difference, when \mymeta{keys} are passed
+% through the \emph{\enquote{first level}} of the \myenv*{enumext} or
+% \myenv*{enumext*} environment they are set in \emph{\enquote{both}}
+% environments, but when they are passed using the |\setenumext| command
+% they are set \emph{\enquote{individually}} in each environment.
+%
+% \smallskip
+%
+% \keyexamp{show-ans}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false}
+%
+% Display the \emph{symbol} set by the \mykey{mark-ans} key to the left of
+% the \emph{mandatory argument} \mymeta{content} passed to the |\anskey|
+% command and \mymeta{body} for the \myenv*{anskey*} environment using
+% the \mykey{wrap-ans} key if set.
+%
+% For \ics*{item*} and \ics*{anspic}|*| the \myenv*{keyans},
+% \myenv*{keyans*} and \myenv*{keyanspic} environments it will display
+% the \emph{symbol} set by the \mykey{mark-ans*} key to the left of the
+% current \mymeta{label} and \emph{optional argument}. If the
+% \emph{optional argument} is present in \ics*{item*} or \ics*{anspic}|*|
+% it will be shown using \mykey{wrap-opt} key.
+%
+% \subsubsection*{Keys for \texttt{\textbackslash{}anskey} and \texttt{anskey*}}
+%
+% \keyexamp{mark-ans}{symbol}{\textbackslash{}textasteriskcentered}
+% Sets the \emph{symbol} to be displayed in the left margin for
+% \ics*{anskey} command and \myenv*{anskey*} environment when using the
+% key \mykey{show-ans}. The \emph{\enquote{symbol}} is placed in a box
+% of width equal to the value of \mykey{labelwidth} at the current level,
+% separated by the value of the key \mykey{mark-sep} and aligned by
+% the value of the key \mykey{mark-pos}. This key is not affected by the
+% keys \mykey{font} or \mykey{wrap-label} so if you want to apply
+% \emph{styling} you have to do it directly, for example: |mark-ans={\textcolor{red}{\textbf{\textasteriskcentered}}|
+%
+% \smallskip
+%
+% \keyexamp{mark-pos}{left \textnormal{\textcolor{lightgray}{\textbar}} right \textnormal{\textcolor{lightgray}{\textbar}} center}{left}
+% Sets the \emph{aligned} of the \emph{\enquote{symbol}} defined by
+% \mykey{mark-ans} key for \ics*{anskey} command and \myenv*{anskey*}
+% environment. The \emph{\enquote{symbol}} is aligned in a box with the
+% same dimensions of the label box defined by \mykey{labelwidth} key
+% on the current level and separated by the value of the \mykey{mark-sep}
+% key.
+%
+% \smallskip
+%
+% \keyexamp{mark-sep}{rigid length}{labelsep}
+% Sets the \emph{horizontal space} between the box containing the
+% \emph{\enquote{symbol}} defined by \mykey{mark-ans} key and the
+% \emph{mandatory argument} \mymeta{content} passed to the \ics*{anskey}
+% command and the \emph{body} in \myenv*{anskey*} environment.
+%
+% \smallskip
%
% \keyexamp{wrap-ans}{code{} \space\usebox{\hashbox} more code}{\textbackslash{}fbox+\textbackslash{}parbox\{\#1\}}
-% Wraps the \emph{argument} passed to the \ics*{anskey} and the \emph{body} in \myenv*{anskey*} environment
-% referenced by |{#1}| when using the \mykey{show-ans} or \mykey{show-pos} keys.
-% The \mymarg{code} must be passed between braces and only affects the
-% \emph{argument} or \emph{body} and NOT the \emph{\enquote{stored
+% Wraps the \emph{mandatory argument} \mymeta{content} passed to the \ics*{anskey}
+% and the \mymeta{body} in \myenv*{anskey*} environment referenced by |{#1}|
+% when using the \mykey{show-ans} or \mykey{show-pos} keys.
+% The \mymarg{code} must be passed between braces and only affects how the
+% \emph{argument} or \emph{body} is displayed and NOT the \emph{\enquote{stored
% content}} in the \emph{sequence} and \emph{prop list} \mymarg{store
% name} set by \mykey{save-ans} key. If this key is passed using
% \ics*{setenumext} it is necessary to use double ‘|{##1}|’.
%
+% \subsubsection*{Keys for \texttt{keyans}, \texttt{keyans*} and \texttt{keyanspic}}
+%
+% \keyexamp{mark-ans\textcolor{MediumOrchid}{*}}{symbol}{\textbackslash{}textasteriskcentered}
+% Sets the \emph{symbol} to be displayed in the left margin for
+% \ics*{item*} and \ics*{anspic}|*| for the \myenv*{keyans}, \myenv*{keyans*}
+% and \myenv*{keyanspic} environments when using the key \mykey{show-ans}.
+% The \emph{\enquote{symbol}} is placed in a box of width equal to the value of
+% \mykey{labelwidth} of the environment in which it is executed, separated by the value of the
+% key \mykey{mark-sep*} and aligned by the value of the key
+% \mykey{mark-pos*}. This key is not affected by the keys \mykey{font} or
+% \mykey{wrap-label} so if you want to apply \emph{styling} you have to do it
+% directly, for example: |mark-ans*={\textcolor{red}{\textbf{\textasteriskcentered}}|.
+%
+% \smallskip
+%
+% \keyexamp{mark-pos\textcolor{MediumOrchid}{*}}{left \textnormal{\textcolor{lightgray}{\textbar}} right \textnormal{\textcolor{lightgray}{\textbar}} center}{left}
+% Sets the \emph{aligned} of the \emph{\enquote{symbol}} defined by
+% \mykey{mark-ans*} key for the \myenv*{keyans}, \myenv*{keyans*}
+% and \myenv*{keyanspic} environments. The \emph{\enquote{symbol}} is
+% aligned in a box with the same dimensions of the label box defined by
+% \mykey{labelwidth} key of the environment in which it is executed and
+% separated by the value of the \mykey{mark-sep*} key.
+%
+% \smallskip
+%
+% \keyexamp{mark-sep\textcolor{MediumOrchid}{*}}{rigid length}{labelsep}
+% Sets the \emph{horizontal space} between the box containing the
+% \emph{\enquote{symbol}} defined by \mykey{mark-ans*} key and the current \mymeta{label} for
+% \ics*{item*} and \ics*{anspic}|*| in the \myenv*{keyans}, \myenv*{keyans*}
+% and \myenv*{keyanspic} environments.
+%
+% \smallskip
+%
+% \keyexamp{wrap-ans\textcolor{MediumOrchid}{*}}{code{} \space\usebox{\hashbox} more code}{not used}
+% Wraps the \emph{current} \mymeta{label} when using the \mykey{show-ans}
+% key for \ics*{item*} and \ics*{anspic}|*| referenced by |{#1}| in the
+% \myenv*{keyans}, \myenv*{keyans*} and \myenv*{keyanspic} environments
+% after executing the \mykey{align} and \mykey{font} keys.
+% The \mymarg{code} must be passed between braces and \emph{only} affects
+% how the \mymeta{label} is displayed and NOT the \emph{\enquote{stored label}}
+% in the \emph{sequence} and \emph{prop list} \mymarg{store name} set by
+% \mykey{save-ans} key. This key overwrites the key \mykey{wrap-label}
+% and if is passed using \ics*{setenumext} it is necessary to use double ‘|{##1}|’.
+% For example, if you want the \mymeta{label} to be displayed in red when
+% using \mykey{show-ans} you just set |wrap-ans*={\textcolor{red}{#1}}|.
+%
% \smallskip
%
% \keyexamp{wrap-opt}{code{} \space\usebox{\hashbox} more code}{[\{\#1\}]}
@@ -2571,30 +2760,6 @@
% \mymarg{store name} set by \mykey{save-ans} key.
% If this key is passed using \ics*{setenumext} it is necessary to use double ‘|{##1}|’.
%
-% \smallskip
-%
-% \keyexamp{show-ans}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false}
-% Displays the \emph{argument} passed to the \ics*{anskey}, the
-% \emph{body} for \myenv*{anskey*} environment, the \mymeta{label}
-% for \ics*{item*} and \ics*{anspic}|*| at the place where it is executed.
-% If the \emph{optional argument} is present in \ics*{item*} or \ics*{anspic}|*| it will
-% be shown using \mykey{wrap-opt} key.
-%
-% \smallskip
-%
-% \keyexamp{mark-ans}{symbol}{\textbackslash{}textasteriskcentered}
-% Sets the \emph{symbol} to be displayed in the left margin for
-% \ics*{anskey}, \myenv*{anskey*}, \ics*{item*} and \ics*{anspic}|*| in the place
-% where they are executed when using the key \mykey{show-ans}.
-%
-% \smallskip
-%
-% \keyexamp{mark-pos}{left \textnormal{\textcolor{lightgray}{\textbar}} right}{left}
-% Sets the \emph{aligned} of the symbol defined by \mykey{mark-ans} key. The
-% \emph{\enquote{symbol}} is aligned in a box with the same dimensions of the label box
-% defined by \mykey{labelwidth} key on the current level and separated by the value of the
-% \mykey{labelsep} key.
-%
% \subsubsection{Keys for debug and checking}
%
% \keyexamp{show-pos}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false}
@@ -2621,23 +2786,6 @@
% or \myenv*{anskey*}. It is intended to be used in conjunction with the
% \mykey{no-store} key.
%
-% \smallskip
-%
-% \keyexamp*{no-store}{value forbidden}{not used}
-%
-% \smallskip
-%
-% This is a \emph{\enquote{switch-key}} that does not receive an argument
-% and disables the \emph{\enquote{stored structure}} in the \emph{sequence}
-% \mymarg{store name} set by \mykey{save-ans} key at the entire level
-% or a nested environment in which it runs. This key
-% is intended for use in internal levels or nested \myenv*{enumext} or
-% \myenv*{enumext*} environments in which
-% you want to use \myenv*{enumext} or \myenv*{enumext*} but \emph{\enquote{without}} using
-% the \ics*{anskey},\emph{\enquote{without}} use \myenv*{anskey*}, \emph{\enquote{without}} interfering with the
-% \mykey{check-ans} key and \emph{\enquote{without}} storing an unwanted
-% structure in the \emph{sequence} \mymarg{store name}.
-%
% \subsection{The command \cs[no-index]{anskey}}
% \label{sec:anskey}
%
@@ -2673,11 +2821,10 @@
%
% \subsubsection{Keys for \cs[no-index]{anskey}}
%
-% By default the \mymarg{content} passed to |\anskey| when
-% \emph{\enquote{storing}} in the \emph{sequence} \mymarg{store name} has
-% the form |\item| \mymeta{content}, the following \mymeta{keys} allow
-% modifying the way in which it is \emph{\enquote{stored}} in the
-% \emph{sequence}.
+% By default the \emph{mandatory argument} \mymeta{content} passed to |\anskey|
+% when \emph{\enquote{storing}} in the \emph{sequence} \mymarg{store name}
+% has the form |\item| \mymeta{content}, the following \mymeta{keys} allow
+% modifying the way in which it is \emph{\enquote{stored}} in the \emph{sequence}.
%
% \smallskip
%
@@ -2743,7 +2890,7 @@
%</example>
% \fi
%
-% \begin{enumext}[save-ans=test,show-ans=true,columns=2,nosep]
+% \begin{enumext}[save-ans=test,mark-ans={\oldtextasteriskcentered},show-ans=true,columns=2,nosep]
% \item* Text containing our instructions or questions.\anskey{first answer}
% \item Text containing our instructions or questions.
% \begin{enumext}
@@ -2767,17 +2914,26 @@
% key are active and the \mypkg{hyperref}\cite{hyperref} package is
% detected |\hyperlink| and |\hypertarget| will be used, otherwise the
% usual \emph{\enquote{label and ref}} system provided by \hologo{LaTeX} will be used.
-% By design the environment cannot be nested but full supports \emph{\enquote{verbatim material}} in the
-% body and it is assumed that each numbered|\item| or |\item*| within the
-% environment in which it is active it has a \emph{\enquote{single
-% execution}} unless |\item| or |\item*| open a nested level
-% or use the \mykey{no-store} key.
% \end{function}
%
+% \smallskip
+%
+% By design the environment cannot be nested but full supports
+% \emph{\enquote{verbatim material}} in the \mymeta{body} and it is assumed
+% that \emph{\enquote{each numbered}} |\item| or |\item*| within the
+% environment in which it is active it has a \emph{\enquote{single
+% execution}} unless |\item| or |\item*| open a nested level
+% or use the \mykey{no-store} key.
+%
+% \smallskip
+%
% The \myenv*{anskey*} environment is implemented using the \mypkg{scontents}
-% package, for the correct operation |\begin{anskey*}| and |\end{anskey*}|
-% must be in different lines, all \mymeta{keys} must be passed separated by
-% commas and \enquote{without separation} of the start of the environment.
+% package, |\begin{anskey*}| and |\end{anskey*}| must be in different lines,
+% all \mymeta{keys} must be passed separated by commas and \enquote{without separation}
+% of the start of the environment.
+%
+% \smallskip
+%
% Comments \enquote{\textcolor{gray}{\%}} or \enquote{any character}
% after |\begin{anskey*}| or \myoarg{key \textnormal{\textcolor{gray}{=}} val}
% on the same line are NOT supported, the package \mypkg{scontents} will return an
@@ -2789,8 +2945,8 @@
% \subsubsection{Keys for \texttt{anskey*}}
%
% The \myenv*{anskey*} environment uses the same \mymeta{keys} as the
-% \ics*{anskey} command next to the keys inherited from package \mypkg{scontents}.
-% The environment is available for all levels of the
+% \ics*{anskey} command next to the \mymeta{keys} inherited from package
+% \mypkg{scontents}. The environment is available for all levels of the
% \myenv*{enumext} environment and the \myenv*{enumext*} environment, but
% it is disabled for the \myenv*{keyans}, \myenv*{keyans*} and
% \myenv*{keyanspic} environments.
@@ -2812,7 +2968,7 @@
% Sets whether the \mymeta{file.ext} generated by \mykey{write-env}
% from the \myenv*{anskey*} environment will be rewritten.
%
-% \smallskip
+% \newpage
%
% \keyexampenv{force-eol}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false}
%
@@ -2841,6 +2997,7 @@
\begin{examplecode}[frame=single]
\begin{enumext}[save-ans=test,show-pos=true,start=5]
\item* Text containing our instructions or questions.
+
\begin{anskey*}[item-star]
`\mymeta{first answer}`
\end{anskey*}
@@ -2855,11 +3012,13 @@
\end{enumext}
\item Text containing our instructions or questions.
+
\begin{anskey*}
`\mymeta{third answer}`
\end{anskey*}
\item Text containing our instructions or questions.
+
\begin{anskey*}
`\mymeta{fourth answer}`
\end{anskey*}
@@ -2952,6 +3111,12 @@
% as the \emph{\enquote{second level}} of the \myenv*{enumext} environment
% with the difference in the \mymeta{label} which will be set to \mykey{label}=\ilabel{Alph*)}.
%
+% \smallskip
+%
+% The keys \mykey{mark-ans*}, \mykey{mark-pos*}, \mykey{mark-sep*}, \mykey{save-sep},
+% \mykey{wrap-opt}, \mykey{wrap-ans*}, \mykey{show-ans} and \mykey{show-pos}
+% are available for both environments.
+%
% \subsubsection[The \texttt{\textbackslash item*} in \texttt{keyans}]{The \cs[no-index]{item*} in \texttt{keyans} and \texttt{keyans*}}
%
% \vspace*{-\baselineskip}
@@ -3009,7 +3174,7 @@
%</example>
% \fi
%
-% \begin{enumext}[save-ans=test,show-ans=true,columns=2,nosep]
+% \begin{enumext}[save-ans=test,mark-ans*={\oldtextasteriskcentered},show-ans=true,columns=2,nosep]
% \item Text containing a question.
%
% \begin{keyans*}[nosep,columns=2]
@@ -3126,9 +3291,9 @@
%
% \smallskip
%
-% This environment cannot be nested and must always be at the
+% This environment cannot be nested and must \emph{always} be at the
% \emph{\enquote{first level}} of the \myenv*{enumext} environment, the
-% \ics*{item} command is disabled and keys cannot be set using
+% \ics*{item} command is disabled and \mymeta{keys} cannot be set using
% |\setenumext|.
%
% \subsubsection{Keys for \texttt{keyanspic}}
@@ -3182,6 +3347,12 @@
% Set the \emph{vertical space} added to both the top and bottom of the environment.
% Internally adjust the value of \mykey{topsep} taken from \myenv*{keyans} environment.
%
+% \smallskip
+%
+% The keys \mykey{mark-ans*}, \mykey{mark-pos*}, \mykey{mark-sep*}, \mykey{save-sep},
+% \mykey{wrap-opt}, \mykey{wrap-ans*}, \mykey{show-ans} and \mykey{show-pos}
+% are available for this environment.
+%
% \subsubsection{The command \cs[no-index]{anspic}}
%
% \vspace*{-\baselineskip}
@@ -3211,7 +3382,7 @@
%<*example>
% \fi
\begin{examplecode}[frame=single]
-\begin{enumext}[save-ans=test,show-ans,nosep]
+\begin{enumext}[save-ans=test,show-ans=true,nosep]
\item Question with images and labels below.
\begin{keyanspic}[layout-sty={3,2}]
@@ -3241,13 +3412,16 @@
\anspic{\includegraphics[scale=0.15]{example-image-a}}
\anspic*[note]{\includegraphics[scale=0.15]{example-image-a}}
\end{keyanspic}
+
\end{enumext}
\end{examplecode}
% \iffalse
%</example>
% \fi
%
-% \begin{enumext}[save-ans=test,show-ans=true,nosep, before={\setenumext[keyans]{nosep,parsep=5mm}}]
+% \newpage
+%
+% \begin{enumext}[save-ans=test, mark-ans*={\oldtextasteriskcentered},show-ans=true,nosep, before={\setenumext[keyans]{nosep,parsep=5mm}}]
% \item Question with images and labels below.
% \begin{keyanspic}[layout-sty={3,2}]
% \anspic{\includegraphics[scale=0.15]{example-image-a}}
@@ -3257,7 +3431,7 @@
% \anspic*[note]{\includegraphics[scale=0.15]{example-image-a}}
% \end{keyanspic}
% \item Question with images and labels above.
-% \begin{keyanspic}[label-pos=above, layout-sty={3,2},layout-sep=0.25cm]
+% \begin{keyanspic}[label-pos=above, layout-sty={3,2},layout-sep=0.25cm,layout-top=10pt]
% \anspic{\includegraphics[scale=0.15]{example-image-a}}
% \anspic{\includegraphics[scale=0.15]{example-image-b}}
% \anspic{\includegraphics[scale=0.15]{example-image-a}}
@@ -3265,7 +3439,7 @@
% \anspic*[note]{\includegraphics[scale=0.15]{example-image-a}}
% \end{keyanspic}
% \item Question with images and labels below on a single line.
-% \begin{keyanspic}
+% \begin{keyanspic}[layout-top=10pt]
% \anspic{\includegraphics[scale=0.15]{example-image-a}}
% \anspic{\includegraphics[scale=0.15]{example-image-b}}
% \anspic{\includegraphics[scale=0.15]{example-image-a}}
@@ -3296,6 +3470,9 @@
% in \emph{prop list} \mymarg{store name} defined by
% \mykey{save-ans} key in the \mymeta{position} returned by the
% \mykey{show-pos} key.
+%
+% \smallskip
+%
% The \emph{\enquote{stored content}} can only be accessed \emph{after}
% it is stored, if \mymarg{store name} does not exist the command
% will return an error.
@@ -3496,7 +3673,7 @@ all the worksheets are as follows:
%</example>
% \fi
%
-% \begin{enumext}[save-ans=sampleXX,columns=1,show-pos=true,nosep,save-ref=true]
+% \begin{enumext}[save-ans=sampleXX,columns=1,show-pos=true,save-ref=true]
% \item Factor $3x+3y+3z$. \anskey{$3(x+y+z)$}
% \item True False
% \begin{enumext}[nosep]
@@ -3605,7 +3782,7 @@ $ pdfdetach -saveall enumext.pdf
% \textattachfile[color=red,print=false]{enumext-exa-1.tex}{\faFile*[regular]}.
%
% \setenumext[keyans]{label=\Alph*,font=\small,nosep,wrap-label={\fbox{\makebox[\height]{##1}}}}
-% \begin{enumext}[columns=2,save-ans=sabastiano,itemsep=0pt, topsep=0pt,below*={8pt}]
+% \begin{enumext}[columns=2,save-ans=sabastiano,itemsep=2pt, topsep=5pt,below*={8pt}]
% \item La velocità di \SI{1,00e2}{m/s} espressa in \si{km/h} è:
%
% \begin{keyans}
@@ -3647,7 +3824,7 @@ $ pdfdetach -saveall enumext.pdf
% \end{keyans}
% \end{enumext}
%
-% \printkeyans[columns=4]{sabastiano}
+% \printkeyans[columns=1]{sabastiano}
%
% \subsubsection*{Example 2}
%
@@ -3660,7 +3837,7 @@ $ pdfdetach -saveall enumext.pdf
% arara: clean: { extensions: [ aux, log, out] }
\documentclass{article}
\usepackage[colorlinks]{hyperref}
-\usepackage{siunitx,amssymb,tikz,enumext}
+\usepackage{siunitx,amssymb,tikz,enumext,libertinus}
\usetikzlibrary{shapes.geometric}
\sisetup{output-decimal-marker={,}}
\DeclareSIUnit{\angstrom}{\textup{\AA}}
@@ -3672,7 +3849,7 @@ $ pdfdetach -saveall enumext.pdf
\pagestyle{empty}
\begin{document}
\setenumext[keyans]{label=\Alph*,font=\small,nosep,wrap-label={\mySquared{##1}}}
-\begin{enumext}[columns=1,save-ans=sabastiano2,mark-pos=left,mark-ans=$\checkmark$,save-ref=true,show-ans=true,itemsep=0pt]
+\begin{enumext}[columns=1,save-ans=sabastiano2,mark-sep*=2pt,mark-ans*={\textcolor{gray}{✔}},save-ref=true,show-ans=true,itemsep=0pt]
\item La velocità di \qty{1,00e2}{m/s} espressa in \unit{km/h} è:
\begin{keyans}
\item \qty{36}{km/h}.
@@ -3722,7 +3899,7 @@ $ pdfdetach -saveall enumext.pdf
% Adapted from the response given by Florent Rougon in \href{https://tex.stackexchange.com/q/529034/7832}{Multiple choice questions with proposed answers in random order — addition of automatic correction (cross mark)}
% \textattachfile[color=red,print=false]{enumext-exa-2.tex}{\faFile*[regular]}.
% \setenumext[keyans]{label=\Alph*,font=\small,nosep,wrap-label={\mySquared{##1}}}
-% \begin{enumext}[columns=2,save-ans=sabastiano2,mark-pos=left,mark-ans=$\checkmark$,save-ref=true,show-ans=true,itemsep=0pt]
+% \begin{enumext}[columns=2,save-ans=sabastiano2,mark-sep*=2pt,mark-ans*={\textcolor{gray}{✔}},save-ref=true,show-ans=true,itemsep=0pt]
% \item La velocità di \SI{1,00e2}{m/s} espressa in \si{km/h} è:
% \begin{keyans}
% \item \SI{36}{km/h}.
@@ -3791,7 +3968,7 @@ $ pdfdetach -saveall enumext.pdf
\setenumextmeta[enumext,2]{myarabic}{no-store,list-offset=0.5cm,label=(\arabic*),noitemsep}
\begin{enumext}[mode-box,save-ans=simplemc,columns=1,nosep,save-ref=true]
\item First type of questions
- \begin{keyans*}[columns=1,noitemsep]
+ \begin{keyans*}[columns=2,noitemsep]
\item value
\item*[$x=5$] correct
\item value
@@ -3832,7 +4009,7 @@ $ pdfdetach -saveall enumext.pdf
\anspic*[A duck]{\includegraphics[scale=0.32]{example-image-duck}}
\end{keyanspic}
-\item Question with image on left side:
+\item Question with image on right side:
\begin{keyans}[mini-env=0.5\linewidth, columns=1,noitemsep]
\item value
\item value
@@ -3856,10 +4033,10 @@ Test keys
% \fi
%
% A \emph{\enquote{simple multiple choice}} test \textattachfile[color=red,print=false]{enumext-exa-3.tex}{\faFile*[regular]}.
-% \setenumext[keyans]{label=\Alph*,font=\small,nosep,wrap-label={\myCircled{##1}}}
-% \begin{enumext}[save-ans=simplemc,columns=1,nosep,save-ref=true]
+% \setenumext[keyans]{labelsep=8pt,label=\Alph*,font=\small,nosep,wrap-label={\myCircled{##1}}}
+% \begin{enumext}[mode-box,save-ans=simplemc,columns=1,nosep,save-ref=true]
% \item First type of questions
-% \begin{keyans*}[columns=2,noitemsep]
+% \begin{keyans*}[labelsep=8pt,label=\Alph*,font=\small,nosep,wrap-label={\myCircled{#1}},columns=2]
% \item value
% \item*[$x=5$] correct
% \item value
@@ -3892,7 +4069,7 @@ Test keys
% \end{keyans}
%
% \item Question with image and label below:
-% \begin{keyanspic}
+% \begin{keyanspic}[label-sep=3pt]
% \anspic{\includegraphics[scale=0.15]{example-image-a}}
% \anspic{\includegraphics[scale=0.15]{example-image-b}}
% \anspic{\includegraphics[scale=0.15]{example-image-a}}
@@ -3900,7 +4077,7 @@ Test keys
% \anspic*[A duck]{\includegraphics[scale=0.32]{example-image-duck}}
% \end{keyanspic}
%
-% \item Question with image on left side:
+% \item Question with image on right side:
% \begin{keyans}[mini-env=0.5\linewidth, columns=1,noitemsep]
% \item value
% \item value
@@ -4110,6 +4287,166 @@ to \ref{simplews:3} is \getkeyans{simplews:3}.
%
% \printkeyans[columns=4]{stylesat}
%
+% \subsubsection*{Example 6}
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{filecontents*}[overwrite]{enumext-exa-6.tex}
+% arara: lualatex: { branch: developer, draft: true }
+% arara: lualatex: { branch: developer, draft: true }
+% arara: lualatex: { branch: developer }
+% arara: clean: { extensions: [ aux, log, out] }
+\documentclass[letterpaper,twoside]{article}
+\usepackage{xcolor,enumext,libertinus}
+\newlength{\itemwd}
+\settowidth{\itemwd}{\bfseries 10.} % max width
+\NewDocumentCommand \rating { }{8.5a, KSC}
+\ExplSyntaxOn
+\bool_new:N \l_azetina_rating_bool
+\NewDocumentCommand \showrating { m }
+ {
+ \str_case:nn {#1}
+ {
+ { true }
+ {
+ \bool_set_true:N \l_azetina_rating_bool
+ \setenumext{show-ans=true,save-sep={ }}
+ }
+ { false }
+ {
+ \bool_set_false:N \l_azetina_rating_bool
+ \setenumext{show-ans=false,save-sep={ }}
+ }
+ }
+ }
+\NewDocumentCommand \myans { m +m }
+ {
+ \bool_if:NTF \l_azetina_rating_bool
+ {
+ \item*[(#1)] \textcolor{red}{#2}
+ }
+ {
+ \item*[(#1)] \textcolor{black}{#2}
+ }
+ }
+\NewDocumentCommand \azwrapp { m }
+ {
+ \bool_if:NTF \l_azetina_rating_bool
+ {
+ \makebox[\dim_eval:n{\marginparwidth}][r]
+ {
+ \textcolor{red}{\bfseries\footnotesize\rating}
+ }
+ \hspace{\marginparsep}\textbf{#1}
+ }
+ {
+ \makebox[\dim_eval:n{\marginparwidth+\marginparsep}][l]{ }\textbf{#1}
+ }
+ }
+\ExplSyntaxOff
+\setenumextmeta[enumext,1]{azetinasty}{label={\arabic*.},labelwidth={\marginparwidth+\marginparsep+\itemwd},list-offset={-\marginparwidth-\marginparsep},}
+\setenumext[keyans]{
+ label={\Alph*},
+ font={\bfseries},
+ wrap-ans*={\textcolor{red}{\bfseries##1}},
+ mark-ans*={\textcolor{red}{✔}},
+ wrap-opt={ },
+ }
+\begin{document}
+
+\showrating{true}
+\begin{enumext}[azetinasty,start=10,wrap-label={\azwrapp{#1}},save-ans=test2024]
+ \item sample
+ \begin{keyans}
+ \item sample
+ %\item*[(8.5a, KSC)] answer
+ \myans{8.5a, KSC}{answer}
+ \item sample
+ \item sample
+ \end{keyans}
+ % Renew \rating here
+ \RenewDocumentCommand \rating { }{9.5a, KSC}
+ \item sample
+ \begin{keyans}
+ \item sample
+ \item sample
+ \item sample
+ %\item*[(9.5a, KSC)] answer
+ \myans{9.5a, KSC}{answer}
+ \end{keyans}
+\end{enumext}
+\showrating{false}
+\RenewDocumentCommand \rating { }{10.5a, KSC}
+\begin{enumext}[resume*,save-ans=test2024]
+ \item sample
+ \begin{keyans}
+ \item sample
+ %\item*[(10.5a, KSC)] answer
+ \myans{10.5a, KSC}{answer}
+ \item sample
+ \item sample
+ \end{keyans}
+ % Renew \rating here
+ \RenewDocumentCommand \rating { }{11.5a, KSC}
+ \item sample
+ \begin{keyans}
+ \item sample
+ \item sample
+ \item sample
+ %\item*[(11.5a, KSC)] answer
+ \myans{11.5a, KSC}{answer}
+ \end{keyans}
+\end{enumext}
+\printkeyans[start=10]{test2024}
+\end{document}
+\end{filecontents*}
+% \iffalse
+%</example>
+% \fi
+%
+% Adapted from the response to \href{https://tex.stackexchange.com/q/728584}{Environment for enumerate environment}
+% \textattachfile[color=red,print=false]{enumext-exa-6.tex}{\faFile*[regular]}.
+% \setenumext[keyans]{label={\Alph*},font={\bfseries},wrap-ans*={\textcolor{red}{\bfseries##1}},mark-ans*={\textcolor{red}{✔}},wrap-opt={ },}
+% \showrating{true}
+% \begin{enumext}[azetinasty,start=10,wrap-label={\azwrapp{#1}},save-ans=test2024,save-sep={ }]
+% \item sample
+% \begin{keyans}
+% \item sample
+% \item*[(8.5a, KSC)] answer
+% \item sample
+% \item sample
+% \end{keyans}
+% \RenewDocumentCommand \rating { }{9.5a, KSC}
+% \item sample
+% \begin{keyans}
+% \item sample
+% \item sample
+% \item sample
+% \item*[(9.5a, KSC)] answer
+% \end{keyans}
+% \end{enumext}
+% \showrating{false}
+% \RenewDocumentCommand \rating { }{10.5a, KSC}
+% \begin{enumext}[resume*,save-ans=test2024]
+% \item sample
+% \begin{keyans}
+% \item sample
+% \item*[(10.5a, KSC)] answer
+% \item sample
+% \item sample
+% \end{keyans}
+% \RenewDocumentCommand \rating { }{11.5a, KSC}
+% \item sample
+% \begin{keyans}
+% \item sample
+% \item sample
+% \item sample
+% \item*[(11.5a, KSC)] answer
+% \end{keyans}
+% \end{enumext}
+% \printkeyans[start=10]{test2024}
+%
% \section{Tagged PDF examples}
%
% This section is just to show the compatibility of \mypkg*{enumext} with
@@ -4448,7 +4785,7 @@ Some text here
\item Question B. \anskey{Answer B}
\item Question C.
\begin{anskey*}
- Answer whit \verb+code+ and more
+ Answer with \verb+code+ and more
\begin{verbatim}
Some code here
\end{verbatim}
@@ -4469,7 +4806,7 @@ Some text here
\item Question B. \anskey{Answer B}
\item Question C.
\begin{anskey*}
- Answer whit \verb+code+ and more
+ Answer with \verb+code+ and more
\begin{verbatim}
Some code here
\end{verbatim}
@@ -5169,10 +5506,17 @@ Some text here
%
% \setlist[itemize,1]{label=\textendash,wide=0.5em,nosep,noitemsep,leftmargin=10pt}
% \newlength\descrwidth
-% \settowidth{\descrwidth}{\textsf{v1.0a, --- 2023-08-18} }
+% \settowidth{\descrwidth}{\textsf{v1.0, (ctan), 2024-11-01} }
%
% \begin{description}[font=\small\sffamily,wide=0pt,style=multiline,leftmargin=1.1\descrwidth,nosep,noitemsep]
-% \item [\fileversion{} \, \filedate]
+% \item [\fileversion{} (ctan), \filedate]
+% \begin{itemize}
+% \item Fixed implementation for |font| and |base-fix| keys.
+% \item Added new keys for symbol marks.
+% \item Update and improvements in the internal code.
+% \item Adjustments in the documentation.
+% \end{itemize}
+% \item [v1.0 (ctan), 2024-11-01]
% \begin{itemize}
% \item First public release.
% \end{itemize}
@@ -5273,7 +5617,7 @@ Some text here
% \end{macrocode}
% Now declare the \mypkg*{enumext} package.
% \begin{macrocode}
-\ProvidesExplPackage {enumext} {2024-11-01} {1.0} {Enumerate exercise sheets}
+\ProvidesExplPackage {enumext} {2024-11-14} {1.1} {Enumerate exercise sheets}
% \end{macrocode}
% Finally check if the \mypkg{multicol} and \mypkg{scontents} packages
% are loaded, if not we load it.
@@ -5622,13 +5966,16 @@ Some text here
%
%
% \begin{variable}[int]{\l_@@_print_keyans_starred_tl, \l_@@_print_keyans_star_bool,
-% \l_@@_mark_position_str, \g_@@_item_symbol_aux_tl,
-% \l_@@_print_keyans_X_tl, \l_@@_store_save_key_X_tl,
-% \l_@@_store_save_key_X_bool, \l_@@_store_upper_level_X_bool,}
-% Internal variables used by command \ics*{printkeyans}
-% (\S\ref{cmd:printkeyans}), \mykey{show-pos} key (\S\ref{int:storage-system}),
-% \mykey{item-sym*} key (\S\ref{key:item-starred}), \mykey{save-key} key
-% (\S\ref{key:save-key}) and \emph{\enquote{storing structure}}.
+% \l_@@_mark_position_str, \l_@@_mark_position_v_str,
+% \l_@@_mark_position_viii_str, \l_@@_mark_sep_tmpa_dim,
+% \l_@@_mark_sep_tmpb_dim, \l_@@_show_pos_tmp_int,
+% \g_@@_item_symbol_aux_tl, \l_@@_print_keyans_X_tl,
+% \l_@@_store_save_key_X_tl, \l_@@_store_save_key_X_bool,
+% \l_@@_store_upper_level_X_bool,}
+% Internal variables used by command \ics*{printkeyans}
+% (\S\ref{cmd:printkeyans}), \mykey{show-pos}, \mykey{show-ans}, \mykey{mark-pos}, \mykey{mark-sep} keys (\S\ref{int:storage-system}),
+% \mykey{item-sym*} key (\S\ref{key:item-starred}), \mykey{save-key} key
+% (\S\ref{key:save-key}) and \emph{\enquote{storing structure}}.
% \iffalse
%% Variables used by |\printkeyans|, |mark-pos|, |item-sym*|, |save-key| and storing structure in |enumext| and |enumext*|.
% \fi
@@ -5636,6 +5983,11 @@ Some text here
\tl_new:N \l_@@_print_keyans_starred_tl
\bool_new:N \l_@@_print_keyans_star_bool
\str_new:N \l_@@_mark_position_str
+\str_new:N \l_@@_mark_position_v_str
+\str_new:N \l_@@_mark_position_viii_str
+\dim_new:N \l_@@_mark_sep_tmpa_dim
+\dim_new:N \l_@@_mark_sep_tmpb_dim
+\int_new:N \l_@@_show_pos_tmp_int
\tl_new:N \g_@@_item_symbol_aux_tl
\cs_set_protected:Npn \@@_tmp:n #1
{
@@ -5651,7 +6003,7 @@ Some text here
% \begin{variable}{\l_@@_anspic_args_seq, \l_@@_anspic_mini_width_dim,
% \l_@@_anspic_above_int,\l_@@_anspic_below_int,
% \l_@@_anspic_label_above_bool, \l_@@_anspic_mini_pos_str,
-% \g_@@_keyans_pic_parsep_skip, \l_@@_anspic_label_box, \l_@@_anspic_body_box,
+% \l_@@_anspic_label_box, \l_@@_anspic_body_box,
% \l_@@_anspic_label_htdp_dim, \l_@@_anspic_body_htdp_dim,}
% Internal variables used by \myenv*{keyanspic} environment and
% \ics*{anspic} command (\S\ref{env:keyanspic}).
@@ -5665,7 +6017,6 @@ Some text here
\int_new:N \l_@@_anspic_below_int
\bool_new:N \l_@@_anspic_label_above_bool
\str_new:N \l_@@_anspic_mini_pos_str
-\skip_new:N \g_@@_keyans_pic_parsep_skip
\box_new:N \l_@@_anspic_label_box
\box_new:N \l_@@_anspic_body_box
\dim_new:N \l_@@_anspic_label_htdp_dim
@@ -5674,21 +6025,23 @@ Some text here
% \end{variable}
%
% \begin{variable}{\l_@@_check_answers_bool,\g_@@_check_ans_key_bool,
-% \l_@@_check_start_line_env_tl, \g_@@_check_starred_cmd_int,
-% \g_@@_item_anskey_int, \g_@@_item_number_int,
-% \g_@@_item_number_bool, \g_@@_item_answer_diff_int,}
-% Internal variables used by \emph{\enquote{internal check answer}} mechanism
-% (\S\ref{int:check-answer}) used by the \mykey{check-ans} and
-% \mykey{no-store} keys and check for starred commands \ics*{item*}
-% in \myenv*{keyans} and \myenv*{keyans*} environments and \ics*{anspic*}
-% in \myenv*{keyanspic} environment.
+% \l_@@_check_start_line_env_tl, \l_@@_item_wrap_key_bool,
+% \g_@@_check_starred_cmd_int, \g_@@_item_anskey_int,
+% \g_@@_item_number_int, \g_@@_item_number_bool,
+% \g_@@_item_answer_diff_int,}
+% Internal variables used by \emph{\enquote{internal check answer}} mechanism
+% (\S\ref{int:check-answer}) used by the \mykey{check-ans}, \mykey{no-store}, \mykey{wrap-ans*}
+% keys and check for starred commands \ics*{item*} in \myenv*{keyans} and
+% \myenv*{keyans*} environments and \ics*{anspic*}
+% in \myenv*{keyanspic} environment.
% \iffalse
-%% Variables used by check-answer mechanism, |check-ans| and |no-store| keys.
+%% Variables used by check-answer mechanism, |check-ans|, |wrap-ans*| and |no-store| keys.
% \fi
% \begin{macrocode}
\bool_new:N \l_@@_check_answers_bool
\bool_new:N \g_@@_check_ans_key_bool
\tl_new:N \l_@@_check_start_line_env_tl
+\bool_new:N \l_@@_item_wrap_key_bool
\int_new:N \g_@@_check_starred_cmd_int
\int_new:N \g_@@_item_anskey_int
\int_new:N \g_@@_item_number_int
@@ -5698,11 +6051,10 @@ Some text here
% \end{variable}
%
% \begin{variable}[int]{\l_@@_hyperref_bool, \l_@@_footnotes_key_bool,}
-% The boolean variable \cs{l_@@_hyperref_bool} will determine if the
-% \mypkg{hyperref} package is present or load in memory
-% (\S\ref{pkg:hyperref}). The boolean variable \cs{l_@@_footnotes_key_bool}
-% determine if \mypkg{hyperref} is load with key |hyperfootnotes=true|.
-%
+% The boolean variable \cs{l_@@_hyperref_bool} will determine if the
+% \mypkg{hyperref} package is present or load in memory
+% (\S\ref{pkg:hyperref}). The boolean variable \cs{l_@@_footnotes_key_bool}
+% determine if \mypkg{hyperref} is load with key |hyperfootnotes=true|.
% \iffalse
%% Variables used for hyperref detection.
% \fi
@@ -5714,17 +6066,16 @@ Some text here
%
% \begin{variable}[int]{ \l_@@_newlabel_arg_one_tl, \l_@@_newlabel_arg_two_tl,
% \l_@@_write_aux_file_tl, \l_@@_label_copy_X_tl, }
+% Internal variables used by \mykey{save-ref} key (\S\ref{int:storage-system}).
+% The variables \myvarenv{l__@@_label_copy_X_tl} correspond to temporary
+% copies of the \mymeta{labels} defined by level on which operations will be performed.
%
-% Internal variables used by \mykey{save-ref} key (\S\ref{int:storage-system}).
-% The variables \myvarenv{l__@@_label_copy_X_tl} correspond to temporary
-% copies of the \mymeta{labels} defined by level on which operations will be performed.
-%
-% \smallskip
+% \smallskip
%
-% The variables \cs{l_@@_newlabel_arg_one_tl} and \cs{l_@@_newlabel_arg_two_tl}
-% will be used to form the arguments passed to the function
-% \cs{@@_newlabel:nn} (\S\ref{fun:newlabel}) and the variable \cs{l_@@_write_aux_file_tl}
-% will be in charge of executing the writing code in the |.aux| file.
+% The variables \cs{l_@@_newlabel_arg_one_tl} and \cs{l_@@_newlabel_arg_two_tl}
+% will be used to form the arguments passed to the function
+% \cs{@@_newlabel:nn} (\S\ref{fun:newlabel}) and the variable \cs{l_@@_write_aux_file_tl}
+% will be in charge of executing the writing code in the |.aux| file.
% \iffalse
%% Variables used by |save-ref| key (internal label and ref).
% \fi
@@ -6833,9 +7184,9 @@ Some text here
% \subsubsection{Define and set \texttt{label} and \texttt{ref} keys for \env{enumext} environment}
%
% \begin{macro}[int]{label,ref,\l_@@_label_i_tl,\l_@@_label_ii_tl, \l_@@_label_iii_tl, \l_@@_label_iv_tl}
-% Here we set the default \mymeta{labels} of the \emph{four levels} of
-% \myenv*{enumext} environment, along with the default value for
-% \mykey{labelwidth} key and \mykey{ref} key.
+% Here we set the default \mymeta{labels} of the \emph{four levels} of
+% \myenv*{enumext} environment, along with the default value for
+% \mykey{labelwidth} key and \mykey{ref} key.
% \iffalse
%% Define and set |label| and |ref| keys for |enumext|.
% \fi
@@ -6864,14 +7215,14 @@ Some text here
% \end{macro}
%
% \begin{macro}[int]{\@@_standar_ref:n, \@@_standar_ref:,}
-% The \cs{@@_standar_ref:n} first we will pass the key argument to
-% \cs{l_@@_ref_key_arg_tl} and we will analyze its state, if it is not
-% \emph{empty} we will make a copy of the current counter in \cs{l_@@ _ref_the_count_tl}
-% and we will execute the function \cs{@@_regex_counter_style:} which
-% will return the modified \cs{l_@@_ref_key_arg_tl} and we make the
-% value of \cs{l_@@_ref_the_count_tl} the same as that \myvarenv{l__@@_the_counter_X_tl}
-% which contains |\theenumX| and finally we set \myvarenv{l__@@_renew_the_count_X_tl}
-% with the renewed command.
+% The \cs{@@_standar_ref:n} first we will pass the key argument to
+% \cs{l_@@_ref_key_arg_tl} and we will analyze its state, if it is not
+% \emph{empty} we will make a copy of the current counter in \cs{l_@@_ref_the_count_tl}
+% and we will execute the function \cs{@@_regex_counter_style:} which
+% will return the modified \cs{l_@@_ref_key_arg_tl} and we make the
+% value of \cs{l_@@_ref_the_count_tl} the same as that \myvarenv{l__@@_the_counter_X_tl}
+% which contains |\theenumX| and finally we set \myvarenv{l__@@_renew_the_count_X_tl}
+% with the renewed command.
% \iffalse
%% Internal function used by |ref| key in enumext environment.
% \fi
@@ -6931,7 +7282,7 @@ Some text here
\@@_label_style:cvn { l_@@_label_#2_tl }
{ l_@@_counter_#2_tl } {##1}
\dim_set_eq:cN { l_@@_labelwidth_#2_dim }
- \l_@@_current_widest_dim
+ \l_@@_current_widest_dim
},
label .initial:n = #3,
label .value_required:n = true,
@@ -7019,11 +7370,11 @@ Some text here
%
% \begin{macro}[int]{label, ref}
% \begin{macro}{\l_@@_label_v_tl,\l_@@_label_vi_tl,}
-% Here we set the default \mymeta{label} for \myenv*{keyans}
-% and \myenv*{keyanspic} environment, along with the default value for
-% \mykey{labelwidth} and \mykey{ref} key. The \myenv*{keyanspic}
-% environment use the same \mymeta{label} as the \myenv*{keyans}
-% environment.
+% Here we set the default \mymeta{label} for \myenv*{keyans}
+% and \myenv*{keyanspic} environment, along with the default value for
+% \mykey{labelwidth} if it has not been established and \mykey{ref} key.
+% The \myenv*{keyanspic} environment use the same \mymeta{label} as
+% the \myenv*{keyans} environment.
% \iffalse
%% Define and set |label| and |ref| keys for |keyans| and |keyanspic|.
% \fi
@@ -7033,12 +7384,10 @@ Some text here
label .code:n = {
\@@_label_style:cvn { l_@@_label_v_tl }
{ l_@@_counter_v_tl } {#1}
- \dim_set_eq:cN { l_@@_labelwidth_v_dim }
- \l_@@_current_widest_dim
\@@_label_style:cvn { l_@@_label_vi_tl }
- { l_@@_counter_vi_tl } {#1}
- \dim_set_eq:cN { l_@@_labelwidth_v_dim }
- \l_@@_current_widest_dim
+ { l_@@_counter_vi_tl } {#1}
+ \dim_set_eq:NN
+ \l_@@_labelwidth_v_dim \l_@@_current_widest_dim
},
label .initial:n = \Alph*),
label .value_required:n = true,
@@ -7313,6 +7662,13 @@ Some text here
% to apply it within the document in which case the variable
% \cs{l_@@_print_keyans_star_bool} set by the |\printkeyans| command is
% false and the variable \cs{l_@@_base_line_fix_bool} is true.
+%
+% \smallskip
+%
+% We set the values ​​of the keys \mykey{topsep}, \mykey{above}
+% and \mykey{above*} for the \emph{\enquote{first level}} of \myenv*{enumext}
+% environment equal to \mydim{0pt} and finally set the variable \cs{l_@@_base_line_fix_bool}
+% to false.
% \iffalse
%% Internal function for |base-fix| key in |enumext| environment.
% \fi
@@ -7328,6 +7684,10 @@ Some text here
{
\mode_leave_vertical:
\vspace { -\dim_eval:n { \baselineskip + \parsep } }
+ \keys_set:nn { enumext / level-1 }
+ {
+ topsep = 0pt, above = 0pt, above* = 0pt,
+ }
}
% \end{macrocode}
% When we are running the |\printkeyans| command with the \emph{starred
@@ -7341,16 +7701,10 @@ Some text here
\mode_leave_vertical:
\skip_vertical:n { -\baselineskip }
\skip_vertical:N \c_zero_skip
- }
-% \end{macrocode}
-% Finally we set the values ​​of the keys \mykey{topsep}, \mykey{above}
-% and \mykey{above*} for the \emph{\enquote{first level}} of \myenv*{enumext}
-% environment equal to \mydim{0pt} and set the variable \cs{l_@@_base_line_fix_bool}
-% to false.
-% \begin{macrocode}
- \keys_set:nn { enumext / level-1 }
- {
- topsep = 0pt, above = 0pt, above* = 0pt,
+ \keys_set:nn { enumext / level-1 }
+ {
+ topsep = 0pt, above = 0pt, above* = 0pt,
+ }
}
\bool_set_false:N \l_@@_base_line_fix_bool
}
@@ -9276,7 +9630,7 @@ Some text here
% \ics*{anskey} command and the \myenv*{anskey*}, \myenv*{keyans},
% \myenv*{keyans*} and \myenv*{keyanspic} environments and will set
% to \enquote{true} the variable \cs{l_@@_check_answers_bool} used for
-% intenal checking answers mechanism set by the \mykey{check-ans} and \mykey{no-store}
+% internal checking answers mechanism set by the \mykey{check-ans} and \mykey{no-store}
% keys, copy \mymarg{store name} into the variable \cs{g_@@_store_name_tl}
% and execute the function \cs{@@_anskey_env_make:V} creating the environment
% \myenv*{anskey*} (\S\ref{env:anskey}).
@@ -9640,86 +9994,146 @@ Some text here
%
% \subsection{Keys and functions associated with storage}\label{int:storage-system}
%
-% \begin{macro}[int]{wrap-ans, wrap-opt, save-sep,mark-ans, mark-pos, show-ans, mark-ref, save-ref}
-% We add the keys \mykey{wrap-ans}, \mykey{wrap-opt}, \mykey{save-sep},
-% \mykey{mark-ans}, \mykey{mark-pos}, \mykey{show-ans}, \mykey{show-pos},
-% \mykey{mark-ref} and \mykey{save-ref} related to the \emph{\enquote{storage system}}
-% and internal mechanism of \emph{\enquote{label and ref}} only at
-% the \emph{first level} of \myenv*{enumext} and \myenv*{enumext*}.
+% \subsubsection{Keys for \texttt{marks}, \texttt{wrapp} and \texttt{show}}
+%
+% The \mypkg*{enumext} package provides a set of \mymeta{keys} for
+% manipulating \emph{\enquote{symbol marks}} associated with \emph{\enquote{answers}}
+% and how they are displayed and stored in the \emph{sequence} and \emph{prop list}
+% as well as an internal \emph{\enquote{label and ref}} system.
+%
+% \begin{macro}[int]{mark-ans*, mark-pos*, mark-sep*, wrap-ans*, wrap-opt,
+% save-sep, show-ans, show-pos}
+% For the \myenv*{keyans} and \myenv*{keyans*} environments we will
+% only add the keys \mykey{mark-ans*}, \mykey{mark-pos*}, \mykey{mark-sep*},
+% \mykey{wrap-ans*}, \mykey{wrap-opt}, \mykey{save-sep}, \mykey{show-ans}
+% and \mykey{show-pos}.
% \iffalse
-%% Add keys associated with storage on first level of |enumext| and |enumext*|.
+%% Add the keys for marks style and show for |keyans| and |keyans*| environments.
% \fi
% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:n #1
+\cs_set_protected:Npn \@@_tmp:nn #1 #2
{
\keys_define:nn { enumext / #1 }
{
- wrap-ans .cs_set_protected:Np = \@@_anskey_wrapper:n ##1,
- wrap-ans .initial:n =
- {
- \fbox{\parbox[t]{\dimeval{\itemwidth -2\fboxsep -2\fboxrule}}{##1}}
- },
- wrap-ans .value_required:n = true,
- wrap-opt .cs_set_protected:Np = \@@_keyans_wrapper_opt:n ##1,
+ mark-ans* .tl_set:c = { l_@@_mark_answer_sym_#2_tl },
+ mark-ans* .initial:n = \textasteriskcentered,
+ mark-ans* .value_required:n = true,
+ mark-pos* .choice:,
+ mark-pos* / left .code:n = \str_set:cn { l_@@_mark_position_#2_str } { l },
+ mark-pos* / right .code:n = \str_set:cn { l_@@_mark_position_#2_str } { r },
+ mark-pos* / center .code:n = \str_set:cn { l_@@_mark_position_#2_str } { c },
+ mark-pos* / unknown .code:n =
+ \msg_error:nneee { enumext } { unknown-choice }
+ { mark-pos } { left, ~ right, ~ center } { \exp_not:n {##1} },
+ mark-pos* .initial:n = right,
+ mark-pos* .value_required:n = true,
+ mark-sep* .dim_set:c = { l_@@_mark_sym_sep_#2_dim },
+ mark-sep* .value_required:n = true,
+ wrap-ans* .cs_set_protected:cp = { @@_keyans_wrapper_item_#2:n } ##1,
+ wrap-ans* .value_required:n = true,
+ wrap-opt .cs_set_protected:cp = { @@_keyans_wrapper_opt_#2:n } ##1,
wrap-opt .initial:n = [{##1}],
wrap-opt .value_required:n = true,
- save-sep .tl_set:N = \l_@@_store_keyans_item_opt_sep_tl,
+ save-sep .tl_set:c = { l_@@_store_keyans_item_opt_sep_#2_tl },
save-sep .initial:n = {, ~ },
save-sep .value_required:n = true,
- mark-ans .tl_set:N = \l_@@_mark_answer_sym_tl,
- mark-ans .initial:n = \textasteriskcentered,
- mark-ans .value_required:n = true,
- mark-pos .choice:,
- mark-pos / left .code:n = \str_set:Nn \l_@@_mark_position_str { l },
- mark-pos / right .code:n = \str_set:Nn \l_@@_mark_position_str { r },
- mark-pos / unknown .code:n =
- \msg_error:nneee { enumext } { unknown-choice }
- { mark-pos } { left, ~ right } { \exp_not:n {##1} },
- mark-pos .initial:n = right,
- mark-pos .value_required:n = true,
show-ans .bool_set:N = \l_@@_show_answer_bool,
- show-ans .initial:n = false,
+ show-ans .initial:n = false,
show-ans .value_required:n = true,
show-pos .bool_set:N = \l_@@_show_position_bool,
- show-pos .initial:n = false,
+ show-pos .initial:n = false,
show-pos .value_required:n = true,
- mark-ref .tl_set:N = \l_@@_mark_ref_sym_tl,
- mark-ref .initial:n = \textreferencemark,
- mark-ref .value_required:n = true,
- save-ref .bool_set:N = \l_@@_store_ref_key_bool,
- save-ref .initial:n = false,
- save-ref .value_required:n = true,
}
}
-\clist_map_inline:nn { level-1, enumext* } { \@@_tmp:n {#1} }
+\clist_map_inline:nn { {keyans}{v}, {keyans*}{viii} } { \@@_tmp:nn #1 }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{mark-pos, show-ans, show-pos}
-% For the \myenv*{keyans} and \myenv*{keyans*} environments we will
-% only add the keys \mykey{mark-pos}, \mykey{show-ans} and \mykey{show-pos}.
+% \begin{macro}[int]{mark-ref, save-ref, show-ans, show-pos, mark-ans,
+% mark-pos, mark-sep, wrap-ans, mark-ans*, mark-pos*,
+% mark-sep*, wrap-ans*, wrap-opt, save-sep,}
+% We add the \mymeta{keys} \mykey{mark-ref} and \mykey{save-ref} related to the
+% \emph{\enquote{storage system}} and internal mechanism of
+% \emph{\enquote{label and ref}} along with the \mymeta{keys} \mykey{show-ans},
+% \mykey{show-pos} and the\mymeta{keys} \mykey{mark-ans}, \mykey{mark-pos},
+% \mykey{mark-sep} and \mykey{wrap-ans} for the command |\anskey|,
+% the environment \myenv*{anskey*} and the the \mymeta{keys} for environments
+% \myenv*{keyans} and \myenv*{keyans*} only at the \emph{first level}
+% of \myenv*{enumext} and \myenv*{enumext*}.
% \iffalse
-%% Add keys |mark-pos|, |show-pos| and |show-ans| keys for |keyans| and |keyans*| environments.
+%% Add keys associated with mark and internal label/ref on first level of |enumext| and |enumext*| environments.
% \fi
% \begin{macrocode}
\cs_set_protected:Npn \@@_tmp:n #1
{
\keys_define:nn { enumext / #1 }
{
- mark-pos .choice:,
- mark-pos / left .code:n = \str_set:Nn \l_@@_mark_position_str { l },
- mark-pos / right .code:n = \str_set:Nn \l_@@_mark_position_str { r },
- mark-pos .initial:n = right,
- mark-pos .value_required:n = true,
- show-ans .bool_set:N = \l_@@_show_answer_bool,
- show-ans .initial:n = false,
- show-ans .value_required:n = true,
- show-pos .bool_set:N = \l_@@_show_position_bool,
- show-pos .initial:n = false,
- show-pos .value_required:n = true,
+ mark-ref .tl_set:N = \l_@@_mark_ref_sym_tl,
+ mark-ref .initial:n = \textreferencemark,
+ mark-ref .value_required:n = true,
+ save-ref .bool_set:N = \l_@@_store_ref_key_bool,
+ save-ref .initial:n = false,
+ save-ref .value_required:n = true,
+ show-ans .bool_set:N = \l_@@_show_answer_bool,
+ show-ans .initial:n = false,
+ show-ans .value_required:n = true,
+ show-pos .bool_set:N = \l_@@_show_position_bool,
+ show-pos .initial:n = false,
+ show-pos .value_required:n = true,
+ mark-ans .tl_set:N = \l_@@_mark_answer_sym_tl,
+ mark-ans .initial:n = \textasteriskcentered,
+ mark-ans .value_required:n = true,
+ mark-sep .dim_set:N = \l_@@_mark_sym_sep_dim,
+ mark-sep .value_required:n = true,
+ mark-pos .choice:,
+ mark-pos / left .code:n = \str_set:Nn \l_@@_mark_position_str { l },
+ mark-pos / right .code:n = \str_set:Nn \l_@@_mark_position_str { r },
+ mark-pos / center .code:n = \str_set:Nn \l_@@_mark_position_str { c },
+ mark-pos / unknown .code:n =
+ \msg_error:nneee { enumext } { unknown-choice }
+ { mark-pos } { left, ~ right, ~ center } { \exp_not:n {##1} },
+ mark-pos .initial:n = right,
+ mark-pos .value_required:n = true,
+
+ wrap-ans .cs_set_protected:Np = \@@_anskey_wrapper:n ##1,
+ wrap-ans .initial:n =
+ {
+ \fbox{\parbox[t]{\dimeval{\itemwidth -2\fboxsep -2\fboxrule}}{##1}}
+ },
+ wrap-ans .value_required:n = true,
+ mark-ans* .code:n = {
+ \keys_set:nn { enumext / keyans } { mark-ans* = {##1} }
+ \keys_set:nn { enumext / keyans* } { mark-ans* = {##1} }
+ },
+ mark-ans* .value_required:n = true,
+ mark-pos* .code:n = {
+ \keys_set:nn { enumext / keyans } { mark-pos* = {##1} }
+ \keys_set:nn { enumext / keyans* } { mark-pos* = {##1} }
+ },
+ mark-pos* .value_required:n = true,
+ mark-sep* .code:n = {
+ \keys_set:nn { enumext / keyans } { mark-sep* = {##1} }
+ \keys_set:nn { enumext / keyans* } { mark-sep* = {##1} }
+ },
+ mark-sep* .value_required:n = true,
+ wrap-ans* .code:n = {
+ \keys_set:nn { enumext / keyans } { wrap-ans* = {##1} }
+ \keys_set:nn { enumext / keyans* } { wrap-ans* = {##1} }
+ },
+ wrap-ans* .value_required:n = true,
+ wrap-opt .code:n = {
+ \keys_set:nn { enumext / keyans } { wrap-opt = {##1} }
+ \keys_set:nn { enumext / keyans* } { wrap-opt = {##1} }
+ },
+ wrap-opt .value_required:n = true,
+ save-sep .code:n = {
+ \keys_set:nn { enumext / keyans } { save-sep = {##1} }
+ \keys_set:nn { enumext / keyans* } { save-sep = {##1} }
+ },
+ save-sep .value_required:n = true,
}
}
-\clist_map_inline:nn { keyans, keyans* } { \@@_tmp:n {#1} }
+\clist_map_inline:nn { level-1, enumext* } { \@@_tmp:n {#1} }
% \end{macrocode}
% \end{macro}
%
@@ -9828,7 +10242,8 @@ Some text here
%
% \subsubsection{Internal functions to store optional arguments}
%
-% \begin{macro}{\@@_filter_save_key:n, \@@_filter_save_key_key:n, \@@_filter_save_key_pair:nn}
+% \begin{macro}{\@@_filter_save_key:n, \@@_filter_save_key_key:n,
+% \@@_filter_save_key_pair:nn}
% The function \cs{@@_filter_save_key:n} will be in charge of
% \emph{\enquote{filtering keys}} we want to \emph{stored} in
% \emph{sequence} where |{#1}| represents the \emph{optional argument}
@@ -9862,20 +10277,23 @@ Some text here
% \end{macrocode}
% The function \cs{@@_filter_save_key_pair:nn} will be responsible for
% \emph{\enquote{filtering keys}} that are passed \emph{\enquote{with value}} by
-% excluding the \mykey{series}, \mykey{resume}, \mykey{save-ans}, \mykey{save-ref}, \mykey{check-ans},
-% \mykey{show-ans}, \mykey{save-pos}, \mykey{wrap-ans}, \mykey{mark-ans},
-% \mykey{wrap-opt}, \mykey{save-sep}, \mykey{mark-ref}, \mykey{mini-env}, \mykey{mini-sep},
-% \mykey{mini-right} and \mykey{mini-right*} keys.
+% excluding the \mykey{series}, \mykey{resume}, \mykey{save-ans}, \mykey{save-ref},
+% \mykey{save-key}, \mykey{check-ans}, \mykey{show-ans}, \mykey{save-pos},
+% \mykey{mark-ans}, \mykey{mark-pos}, \mykey{mark-sep}, \mykey{wrap-ans},
+% \mykey{mark-ans*}, \mykey{mark-pos*}, \mykey{mark-sep*}, \mykey{wrap-ans*},
+% \mykey{wrap-opt}, \mykey{save-sep}, \mykey{mark-ref}, \mykey{mini-env},
+% \mykey{mini-sep}, \mykey{mini-right} and \mykey{mini-right*} keys.
% \begin{macrocode}
\cs_new:Npn \@@_filter_save_key_pair:nn #1#2
{
\str_case:nnF {#1}
{
- { series } {} { resume } {} { save-ans } {} { save-ref } {}
- { save-key } {} { check-ans } {} { show-ans } {} { show-pos } {}
- { wrap-ans } {} { mark-ans } {} { wrap-opt } {} { save-sep } {}
- { mark-ref } {} { mini-env } {} { mini-sep } {} { mini-right } {}
- { mini-right* } {}
+ { series } {} { resume } {} { save-ans } {} { save-ref } {}
+ { save-key } {} { check-ans } {} { show-ans } {} { show-pos } {}
+ { mark-ans } {} { mark-pos } {} { mark-sep } {} { wrap-ans } {}
+ { mark-ans* } {} { mark-pos* } {} { mark-sep* } {} { wrap-ans* } {}
+ { wrap-opt } {} { save-sep } {} { mark-ref } {} { mini-env } {}
+ { mini-sep } {} { mini-right } {} { mini-right* } {}
}
{ , { \exp_not:n {#1} } = { \exp_not:n {#2} } }
}
@@ -10050,7 +10468,7 @@ Some text here
{
\mode_leave_vertical:
\skip_horizontal:n { -\dim_use:N #2 }
- \makebox[0pt][ r ]
+ \hbox_overlap_left:n
{
\makebox[ \dim_use:N #1 ][ \l_@@_mark_position_str ]
{
@@ -10285,7 +10703,7 @@ Some text here
% \begin{macro}{\@@_anskey_show_wrap_arg:n,}
% The function \cs{@@_anskey_show_wrap_arg:n} \emph{\enquote{wraps}}
% the \mymarg{argument} passed to \ics*{anskey} and the \mymeta{body}
-% for \myenv*{anskey*} when using the \mykey{wrap-ans} key.
+% for \myenv*{anskey*} when using the \mykey{wrap-ans} and \mykey{wrap-sep} keys.
% \iffalse
%% Internal |wrap-ans| implementation for |\anskey| and |anskey*|.
% \fi
@@ -10295,13 +10713,23 @@ Some text here
\par
\bool_if:NTF \l_@@_starred_bool
{
+ \dim_compare:nNnT { \l_@@_mark_sym_sep_dim } = { \c_zero_dim }
+ {
+ \dim_set:Nn \l_@@_mark_sym_sep_dim { \l_@@_labelsep_vii_dim }
+ }
\@@_print_keyans_box:NN
- \l_@@_labelwidth_vii_dim \l_@@_labelsep_vii_dim
+ \l_@@_labelwidth_vii_dim \l_@@_mark_sym_sep_dim
}
{
+ \dim_compare:nNnT { \l_@@_mark_sym_sep_dim } = { \c_zero_dim }
+ {
+ \dim_set:Nn \l_@@_mark_sym_sep_dim
+ {
+ \dim_use:c {l_@@_labelsep_ \@@_level: _dim }
+ }
+ }
\@@_print_keyans_box:cc
- { l_@@_labelwidth_ \@@_level: _dim }
- { l_@@_labelsep_ \@@_level: _dim }
+ { l_@@_labelwidth_ \@@_level: _dim } { l_@@_mark_sym_sep_dim }
}
\@@_anskey_wrapper:n { #1 }
}
@@ -10358,9 +10786,10 @@ Some text here
% behaviour to that of |\item| in the \myenv*{enumext} and \myenv*{enumext*}
% environments executed as follows \ics*{anskey}\myoarg{key \textnormal{\textcolor{gray}{=}} val}\mymarg{content}.
%
-% \begin{macro}{\@@_anskey_unknown:n, \@@_anskey_unknown:nn}
-% First we'll add the keys \mykeycmd{break-col}, \mykeycmd{item-join},
-% \mykeycmd{item-star}, \mykeycmd{item-sym*} and \mykeycmd{item-pos*}.
+% \begin{macro}[int]{break-col, item-join, item-star, item-sym*, item-pos*,
+% unknown, \@@_anskey_unknown:n, \@@_anskey_unknown:nn}
+% First we'll add the keys \mykeycmd{break-col}, \mykeycmd{item-join},
+% \mykeycmd{item-star}, \mykeycmd{item-sym*} and \mykeycmd{item-pos*}.
% \iffalse
%% Add |key=val| for |\anskey|.
% \fi
@@ -10578,7 +11007,7 @@ Some text here
% a not numbered |\item| or if it is in \emph{math mode} returning
% the appropriate messages.
% \iffalse
-%% Hooks for |anskey*| inside the |keyans|, |keyans*| and |keyanspic| environments, math-mode ans not number |\item|.
+%% Hooks for |anskey*| inside the |keyans|, |keyans*| and |keyanspic| environments, math-mode and not number |\item|.
% \fi
% \begin{macrocode}
\@@_before_env:nn { anskey* }
@@ -10977,11 +11406,11 @@ Some text here
% \begin{macrocode}
\tl_if_novalue:nF { #1 }
{
- \tl_if_empty:NF \l_@@_store_keyans_item_opt_sep_tl
+ \tl_if_empty:NF \l_@@_store_keyans_item_opt_sep_v_tl
{
\tl_put_right:Ne \l_@@_store_current_label_tl
{
- \l_@@_store_keyans_item_opt_sep_tl
+ \l_@@_store_keyans_item_opt_sep_v_tl
}
}
\tl_put_right:Ne \l_@@_store_current_label_tl { #1 }
@@ -11106,11 +11535,11 @@ Some text here
}
\tl_if_novalue:nF { #1 }
{
- \tl_if_empty:NF \l_@@_store_keyans_item_opt_sep_tl
+ \tl_if_empty:NF \l_@@_store_keyans_item_opt_sep_v_tl
{
\tl_put_right:Ne \l_@@_store_current_label_tl
{
- \l_@@_store_keyans_item_opt_sep_tl
+ \l_@@_store_keyans_item_opt_sep_v_tl
}
}
\tl_put_right:Ne \l_@@_store_current_label_tl { #1 }
@@ -11154,33 +11583,48 @@ Some text here
%
% \subsubsection{The \texttt{show-ans} and \texttt{show-pos} keys for \env{keyans} and \env{keyanspic}}
%
-% The code is very similar to the \ics*{anskey} code, but, if I change
-% the order of the operations the counter off \mymeta{label} are incorrect.
-%
-% \begin{macro}{\@@_keyans_show_left:n,\@@_keyans_show_ans:, \@@_keyans_show_pos:, \@@_keyans_show_item_opt:,}
-% Common function to show \emph{starred commands} |\item*| and \mymeta{position} of
-% stored content in \emph{prop list} for \myenv*{keyans} and
-% \myenv*{keyanspic}. Need add |1| to \myvarenv{g__@@_\mymeta[cf=gray]{store name}_prop} for \mykey{show-pos} key.
+% \begin{macro}{\@@_keyans_save_item_opt:n,\@@_keyans_show_item_opt:,
+% \@@_keyans_show_item_opt_viii:, }
+% The function \cs{@@_keyans_save_item_opt:n} will save the optional
+% argument of |\item*| and |\anspic*| in the variable
+% \cs{l_@@_store_current_opt_arg_tl}.
% \iffalse
-%% Function for |show-ans| and |show-pos| keys for |keyans| and |keyanspic| environments.
+%% Function for |wrap-opt| key for |keyans|, |keyanspic| and |keyans*| environments.
% \fi
% \begin{macrocode}
-\cs_new_protected:Npn \@@_keyans_show_left:n #1
+\cs_new_protected:Npn \@@_keyans_save_item_opt:n #1
{
\tl_if_novalue:nF { #1 }
{
\tl_set:Ne \l_@@_store_current_opt_arg_tl { #1 }
}
- \bool_if:NT \l_@@_show_answer_bool
- {
- \@@_keyans_show_ans:
- }
- \bool_if:NT \l_@@_show_position_bool
+ }
+% \end{macrocode}
+% The function \cs{@@_keyans_show_item_opt:} will print the optional
+% arguments of |\item*| and |\anspic*| when the \mykey{show-ans} or
+% \mykey{show-pos} keys are set next to the key \mykey{wrap-opt} in
+% \myenv*{keyans} and \myenv*{keyanspic} environments.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_keyans_show_item_opt:
+ {
+ \tl_if_empty:NF \l_@@_store_current_opt_arg_tl
{
- \@@_keyans_show_pos:
+ \bool_lazy_or:nnT
+ { \bool_if_p:N \l_@@_show_answer_bool }
+ { \bool_if_p:N \l_@@_show_position_bool }
+ {
+ \@@_keyans_wrapper_opt_v:n
+ { \l_@@_store_current_opt_arg_tl } \c_space_tl
+ }
}
}
-\cs_new_protected:Nn \@@_keyans_show_item_opt:
+% \end{macrocode}
+% The function \cs{@@_keyans_show_item_opt_viii:} will print the optional
+% argument of |\item*| when the \mykey{show-ans} or \mykey{show-pos}
+% keys are set next to the key \mykey{wrap-opt} in \myenv*{keyans*}
+% environment.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_keyans_show_item_opt_viii:
{
\tl_if_empty:NF \l_@@_store_current_opt_arg_tl
{
@@ -11188,61 +11632,107 @@ Some text here
{ \bool_if_p:N \l_@@_show_answer_bool }
{ \bool_if_p:N \l_@@_show_position_bool }
{
- \@@_keyans_wrapper_opt:n { \l_@@_store_current_opt_arg_tl } \c_space_tl
+ \@@_keyans_wrapper_opt_viii:n
+ { \l_@@_store_current_opt_arg_tl } \c_space_tl
}
}
}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_keyans_pos_mark_set:, \@@_keyans_show_ans:, \@@_keyans_show_pos:}
+% The function \cs{@@_keyans_pos_mark_set:} adjusts the horizontal
+% spaces for the \mykey{mark-sep*} key taking into account the value of
+% the \mykey{align} key and the width of \mymeta{label}.
+% \iffalse
+%% Function for |mark-sep*|, |show-ans| and |show-pos| keys for |keyans| and |keyanspic| environments.
+% \fi
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_keyans_pos_mark_set:
+ {
+ \@@_label_width_by_box:Nn
+ \l_@@_mark_sep_tmpa_dim { \l_@@_label_v_tl }
+ \str_case:Vn \l_@@_align_label_pos_v_str
+ {
+ { l }
+ {
+ \dim_set:Nn \l_@@_mark_sep_tmpb_dim { \c_zero_dim }
+ }
+ { r }
+ {
+ \dim_set:Nn \l_@@_mark_sep_tmpb_dim
+ { \l_@@_labelwidth_v_dim - \l_@@_mark_sep_tmpa_dim }
+ }
+ { c }
+ {
+ \dim_set:Nn \l_@@_mark_sep_tmpb_dim
+ { 0.5\l_@@_labelwidth_v_dim - 0.5\l_@@_mark_sep_tmpa_dim }
+ }
+ }
+% \end{macrocode}
+% Here we set the default values for the key \mykey{mark-ans*}, \mykey{mark-sep*} and \mykey{mark-pos*}.
+% \begin{macrocode}
+ \dim_compare:nNnT { \l_@@_mark_sym_sep_v_dim } = { \c_zero_dim }
+ {
+ \dim_set:Nn \l_@@_mark_sym_sep_v_dim { \l_@@_labelsep_v_dim }
+ }
+ \tl_set_eq:NN \l_@@_mark_answer_sym_tl \l_@@_mark_answer_sym_v_tl
+ \dim_add:Nn \l_@@_mark_sym_sep_v_dim { \l_@@_mark_sep_tmpb_dim }
+ \str_set_eq:NN \l_@@_mark_position_str \l_@@_mark_position_v_str
+ }
+% \end{macrocode}
+% The function \cs{@@_keyans_show_ans:} will print the \mymeta{symbol}
+% set by the \mykey{mark-ans*} key when the \mykey{show-ans} key is active.
+% \begin{macrocode}
\cs_new_protected:Nn \@@_keyans_show_ans:
{
- \bool_if:NT \l_@@_starred_bool
+ \bool_lazy_all:nT
{
- \dim_set_eq:NN \l_@@_labelwidth_i_dim \l_@@_labelwidth_vii_dim
- \dim_set_eq:NN \l_@@_labelsep_i_dim \l_@@_labelsep_vii_dim
+ { \bool_if_p:N \l_@@_show_answer_bool }
+ { \bool_if_p:N \l_@@_item_wrap_key_bool }
}
- \tl_put_left:Nn \l_@@_label_v_tl
{
+ \@@_keyans_pos_mark_set:
\@@_print_keyans_box:NN
- \l_@@_labelwidth_i_dim \l_@@_labelsep_i_dim
+ \l_@@_labelwidth_v_dim \l_@@_mark_sym_sep_v_dim
}
}
+% \end{macrocode}
+% The function \cs{@@_keyans_show_pos:} will print the \mymeta{position}
+% of the stored content in \emph{prop list}. Need add |1| to
+% \myvarenv{g__@@_\mymeta[cf=gray]{store name}_prop} for \myenv*{keyans}
+% environment.
+% \begin{macrocode}
\cs_new_protected:Nn \@@_keyans_show_pos:
{
- \bool_if:NT \l_@@_starred_bool
+ \int_compare:nNnTF { \l_@@_keyans_level_int } = { 1 }
{
- \dim_set_eq:NN \l_@@_labelwidth_i_dim \l_@@_labelwidth_vii_dim
- \dim_set_eq:NN \l_@@_labelsep_i_dim \l_@@_labelsep_vii_dim
+ \int_incr:N \l_@@_show_pos_tmp_int
}
- \int_compare:nNnTF { \l_@@_keyans_pic_level_int } = { 1 }
{
- \tl_set:Ne \l_@@_mark_answer_sym_tl
- {
- \group_begin:
- \exp_not:N \normalfont
- \exp_not:N \footnotesize [ \int_eval:n
- {
- \prop_count:c { g_@@_ \l_@@_store_name_tl _prop }
- }
- ]
- \group_end:
- }
+ \int_zero:N \l_@@_show_pos_tmp_int
}
+ \bool_lazy_all:nT
{
- \tl_set:Ne \l_@@_mark_answer_sym_tl
+ { \bool_if_p:N \l_@@_show_position_bool }
+ { \bool_if_p:N \l_@@_item_wrap_key_bool }
+ }
+ {
+ \tl_set:Ne \l_@@_mark_answer_sym_v_tl
{
\group_begin:
- \exp_not:N \normalfont
- \exp_not:N \footnotesize [ \int_eval:n
- {
- \prop_count:c { g_@@_ \l_@@_store_name_tl _prop } + 1
- }
+ \exp_not:N \normalfont
+ \exp_not:N \footnotesize [ \int_eval:n
+ {
+ \prop_count:c { g_@@_ \l_@@_store_name_tl _prop }
+ + \l_@@_show_pos_tmp_int
+ }
]
\group_end:
}
- }
- \tl_put_left:Nn \l_@@_label_v_tl
- {
+ \@@_keyans_pos_mark_set:
\@@_print_keyans_box:NN
- \l_@@_labelwidth_i_dim \l_@@_labelsep_i_dim
+ \l_@@_labelwidth_v_dim \l_@@_mark_sym_sep_v_dim
}
}
% \end{macrocode}
@@ -11281,7 +11771,7 @@ Some text here
% by the key \mykey{wrap-label*} and execute \cs{@@_item_std:w} with
% the \emph{optional argument} and the key \mykey{itemindent}.
% \iffalse
-%% Internal function for |\item| whit check-answer mechanism in |enumext| environment.
+%% Internal function for |\item| with check-answer mechanism in |enumext| environment.
% \fi
% \begin{macrocode}
\cs_new_protected:Npn \@@_default_item:n #1
@@ -11306,7 +11796,7 @@ Some text here
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{\@@_starred_item:nn, \@@_item_star_exec:,}
+% \begin{macro}[int]{\@@_item_starred_exec:nn, \@@_item_starred_exec:,}
% The \ics*{item*}, \ics*{item*}\myoarg{symbol} and \ics*{item*}\myoarg{symbol}\myoarg{offset}
% works like the \emph{numbered} |\item|, but placing a \mymeta{symbol}
% to the \emph{\enquote{left}} of the \mymeta{label} separated from
@@ -11327,10 +11817,10 @@ Some text here
% \myvarenv{l__@@_wrap_label_X_bool} to \enquote{true} for the key \mykey{wrap-label}
% and execute \cs{@@_item_std:w} and the key \mykey{itemindent}.
% \iffalse
-%% Internal function for |\item*[symb][sep]| whit check-answer mechanism in |enumext| environment.
+%% Internal function for |\item*[symb][sep]| with check-answer mechanism in |enumext| environment.
% \fi
% \begin{macrocode}
-\cs_new_protected:Npn \@@_starred_item:nn #1 #2
+\cs_new_protected:Npn \@@_item_starred_exec:nn #1 #2
{
\tl_if_novalue:nTF {#1}
{
@@ -11358,13 +11848,13 @@ Some text here
\@@_item_std:w \tl_use:c { l_@@_fake_item_indent_ \@@_level: _tl }
}
% \end{macrocode}
-% The function \cs{@@_item_star_exec:} will be responsible for
+% The function \cs{@@_item_starred_exec:} will be responsible for
% executing |\item*| for the \myenv*{enumext} environment.
% \iffalse
%% Function for |\item*[sym][sep]| in |\makelabel| for |enumext| environment.
% \fi
% \begin{macrocode}
-\cs_new_protected:Nn \@@_item_star_exec:
+\cs_new_protected:Nn \@@_item_starred_exec:
{
\tl_if_empty:cF { l_@@_item_symbol_ \@@_level: _tl }
{
@@ -11392,7 +11882,7 @@ Some text here
{
\bool_if:nTF {##1}
{
- \@@_starred_item:nn {##2} {##3}
+ \@@_item_starred_exec:nn {##2} {##3}
}
{ \@@_default_item:n {##2} }
}
@@ -11436,10 +11926,10 @@ Some text here
\RenewDocumentCommand \makelabel { m }
{
\tl_use:c { l_@@_label_fill_left_ \@@_level: _tl }
+ \@@_item_starred_exec:
\tl_use:c { l_@@_label_font_style_ \@@_level: _tl }
\bool_if:cTF { l_@@_wrap_label_ \@@_level: _bool }
{
- \@@_item_star_exec:
\use:c { @@_wrapper_label_ \@@_level: :n } { ##1 }
}
{ ##1 }
@@ -11471,10 +11961,10 @@ Some text here
[ \dim_use:c { l_@@_labelwidth_ \@@_level: _dim } ]
[ \str_use:c { l_@@_align_label_pos_ \@@_level: _str } ]
{
+ \@@_item_starred_exec:
\tl_use:c { l_@@_label_font_style_ \@@_level: _tl }
\bool_if:cTF { l_@@_wrap_label_ \@@_level: _bool }
{
- \@@_item_star_exec:
\use:c { @@_wrapper_label_ \@@_level: :n } { ##1 }
}
{ ##1 }
@@ -11506,7 +11996,7 @@ Some text here
{
item-sym* .tl_set:c = { l_@@_item_symbol_#2_tl },
item-sym* .value_required:n = true,
- item-sym* .initial:n = {\textasteriskcentered},
+ item-sym* .initial:n = {\textborn},
item-pos* .dim_set:c = { l_@@_item_symbol_sep_#2_dim },
item-pos* .value_required:n = true,
}
@@ -11521,17 +12011,26 @@ Some text here
%
% \subsection{Handling unknown keys}\label{key:unknown-keys}
%
-% At this point in the code I already know that I will not add more
-% \mymeta{keys} and since I have already been quite \emph{paranoid and
+% At this point in the code I already know that I will NOT add more
+% \mymeta{keys} for and since I have already been quite \emph{paranoid and
% restrictive} with the definitions of environments and commands, the
% only thing left to do is do it with the \mymeta{keys} (you have to be
% consistent in life).
%
+% \smallskip
+%
+% \begin{important}*
+% Well, the paragraph above is not so real, after all I had to add more
+% \mymeta{keys} than I had planned, not everything turns out the way one thinks in
+% life.
+% \end{important}
+%
% \subsubsection{Handling unknown keys for \env{keyans}, \env{keyans*} and \env{keyanspic}}\label{key:unknown-keys-keyans}
%
% \begin{macro}[int]{unknown, \@@_keyans_unknown_keys:n, \@@_keyans_unknown_keys:nn}
% Define and set |unknown| key for \myenv*{keyans}, \myenv*{keyans*}
-% and \myenv*{keyanspic} environments.
+% and \myenv*{keyanspic} environments. Here it is necessary to set
+% \cs{l_@@_envir_name_tl} in case an |unknown| key is passed using |\setenumext|.
% \iffalse
%% Add keys |unknown| for |keyans|, |keyans*| and |keyanspic| environments.
% \fi
@@ -11540,7 +12039,10 @@ Some text here
{
\keys_define:nn { enumext / #1 }
{
- unknown .code:n = { \@@_keyans_unknown_keys:n {##1} }
+ unknown .code:n = {
+ \tl_set:Nn \l_@@_envir_name_tl {#1}
+ \@@_keyans_unknown_keys:n {##1}
+ },
}
}
\clist_map_inline:nn { keyans, keyans*, keyanspic } { \@@_tmp:n {#1} }
@@ -11555,10 +12057,10 @@ Some text here
{
\tl_if_blank:nTF {#2}
{
- \msg_error:nnn { enumext } { keyans-unknown-key } {#1}
+ \msg_error:nne { enumext } { keyans-unknown-key } {#1}
}
{
- \msg_error:nnnn { enumext } { keyans-unknown-key-value } {#1} {#2}
+ \msg_error:nnee { enumext } { keyans-unknown-key-value } {#1} {#2}
}
}
% \end{macrocode}
@@ -11574,7 +12076,7 @@ Some text here
% \begin{macrocode}
\keys_define:nn { enumext / enumext* }
{
- unknown .code:n = { \@@_starred_unknown_keys:n {#1} }
+ unknown .code:n = { \@@_starred_unknown_keys:n {#1} },
}
% \end{macrocode}
% Internal functions for handling |unknown| key.
@@ -11608,7 +12110,7 @@ Some text here
{
\keys_define:nn { enumext / #1 }
{
- unknown .code:n = { \@@_standar_unknown_keys:n {##1} }
+ unknown .code:n = { \@@_standar_unknown_keys:n {##1} },
}
}
\clist_map_inline:nn { level-1,level-2,level-3,level-4 } { \@@_tmp:n {#1} }
@@ -11661,31 +12163,27 @@ Some text here
% \end{macro}
%
% \begin{macro}{\@@_keyans_starred_item:n}
-% The function \cs{@@_keyans_starred_item:n} which will make a temporary
-% copy of the current \mymeta{label}, execute the \mykey{show-ans}
-% or \mykey{show-pos} keys using the function \cs{@@_keyans_show_left:n}
-% and will display the \mymeta{contents} of that item using the internal
-% copy \cs{@@_item_std:w}, this is necessary to prevent incrementing
-% the current \emph{\enquote{counter}} of the original \mymeta{label},
-% followed by this it will execute function \cs{@@_keyans_show_item_opt:}
-% handled by \mykey{wrap-opt} key.
+% The function \cs{@@_keyans_starred_item:n} will take as argument |#1|
+% the \emph{optional argument} \myoarg{content} passed to |\item*| and
+% save it via the \cs{@@_keyans_save_item_opt:n} function, then activate
+% the \mykey{wrap-label} key, execute |\item| using \cs{@@_item_std:w},
+% the \mykey{itemindent} key and print the \emph{optional argument} using
+% the \cs{@@_keyans_show_item_opt:} function handled by the
+% \mykey{wrap-opt} key.
% \begin{macrocode}
\cs_new_protected:Npn \@@_keyans_starred_item:n #1
{
- \tl_set_eq:NN \l_@@_store_current_label_tmp_tl \l_@@_label_v_tl
- \@@_keyans_show_left:n { #1 }
+ \@@_keyans_save_item_opt:n { #1 }
\bool_set_true:N \l_@@_wrap_label_v_bool
\@@_item_std:w \tl_use:N \l_@@_fake_item_indent_v_tl
\@@_keyans_show_item_opt:
% \end{macrocode}
-% Recover the original value of the current \mymeta{label} and \emph{store}
-% it first in the \emph{prop list} (including the \emph{optional argument}),
-% run the internal \emph{\enquote{label and ref}} system if the
-% \mykey{save-ref} key is active, \emph{store} it in the \emph{sequence}
-% and finally increments \cs{g_@@_check_starred_cmd_int} for internal
-% check system.
+% Now \emph{store} the current \mymeta{label} first in the \emph{prop list}
+% (including the \emph{optional argument}), run the internal \emph{\enquote{label and ref}}
+% system if the \mykey{save-ref} key is active, then \emph{store} in the \emph{sequence}
+% and finally increments \cs{g_@@_check_starred_cmd_int} for internal
+% check system.
% \begin{macrocode}
- \tl_set_eq:NN \l_@@_label_v_tl \l_@@_store_current_label_tmp_tl
\@@_keyans_addto_prop:n { #1 }
\@@_keyans_store_ref:
\@@_keyans_addto_seq:n { #1 }
@@ -11695,14 +12193,16 @@ Some text here
% \end{macro}
%
% \begin{macro}{\item*,\@@_keyans_redefine_item:}
-% The function \cs{@@_keyans_redefine_item:} is responsible for adding
-% the \emph{starred argument} and \emph{optional argument} by the
-% \cs{@@_list_arg_two_v:} function in the definition of the
-% \myenv*{keyans} environment. Here we need to use
-% |\peek_remove_spaces:n| to prevent an unwanted space when using
-% |\item*| in conjunction with the \mykey{itemindent} key.
-% This function are passed to \myvarenv{__@@_list_arg_two_v:} used
-% in the definition of the \myenv*{keyans} environment (\S\ref{ltx:second-arg}).
+% The function \cs{@@_keyans_redefine_item:} is responsible for adding
+% the \emph{starred argument} and \emph{optional argument} by the
+% \cs{@@_list_arg_two_v:} function in the definition of the
+% \myenv*{keyans} environment. Here we will set to true the variable
+% \cs{l_@@_item_wrap_key_bool} used by the \mykey{wrap-ans*} key
+% only when |\item*| is executed and additionally we need to use
+% |\peek_remove_spaces:n| to avoid an unwanted space when using
+% |\item*| together with the \mykey{itemindent} key.
+% This function are passed to \myvarenv{__@@_list_arg_two_v:} used
+% in the definition of the \myenv*{keyans} environment (\S\ref{ltx:second-arg}).
% \iffalse
%% Redefine |\item| for |keyans| environment.
% \fi
@@ -11713,12 +12213,14 @@ Some text here
{
\bool_if:nTF {##1}
{
+ \bool_set_true:N \l_@@_item_wrap_key_bool % wrap-ans*
\peek_remove_spaces:n
{
\@@_keyans_starred_item:n {##2}
}
}
{
+ \bool_set_false:N \l_@@_item_wrap_key_bool
\@@_keyans_default_item:n {##2}
}
}
@@ -11726,11 +12228,12 @@ Some text here
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_keyans_make_label:,\@@_keyans_make_label_std:,\@@_keyans_make_label_box:}
+% \begin{macro}{\@@_keyans_make_label:,\@@_keyans_wrapper_label:n,
+% \@@_keyans_make_label_std:,\@@_keyans_make_label_box:}
% The function \cs{@@_keyans_make_label:} redefine \ics{makelabel}
% for the keys \mykey{mode-box}, \mykey{align}, \mykey{font},
-% \mykey{wrap-label}, \mykey{wrap-label*} and |\item*| for \myenv*{keyans}
-% environment.
+% \mykey{wrap-label}, \mykey{wrap-label*}, \mykey{wrap-ans*} and |\item*|
+% for \myenv*{keyans} environment.
% This function are passed to \myvarenv{__@@_list_arg_two_v:} used
% in the definition of the \myenv*{keyans} environment (\S\ref{ltx:second-arg}).
% \iffalse
@@ -11754,6 +12257,28 @@ Some text here
}
}
% \end{macrocode}
+% We added conditionals to the \cs{@@_keyans_wraper_label:n} function
+% to handle the keys \mykey{wrap-ans*}, \mykey{wrap-label} and \mykey{wrap-label*}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_keyans_wrapper_label:n #1
+ {
+ \bool_lazy_all:nT
+ {
+ { \bool_if_p:N \l_@@_wrap_label_v_bool }
+ { \bool_if_p:N \l_@@_show_answer_bool }
+ { \bool_if_p:N \l_@@_item_wrap_key_bool }
+ { \cs_if_exist_p:N \@@_keyans_wrapper_item_v:n }
+ }
+ {
+ \cs_set_eq:NN \@@_wrapper_label_v:n \@@_keyans_wrapper_item_v:n
+ }
+ \bool_if:NTF \l_@@_wrap_label_v_bool
+ {
+ \@@_wrapper_label_v:n { #1 }
+ }
+ { #1 }
+ }
+% \end{macrocode}
% Standard definition when |\DocumentMetadata| is not active.
% \begin{macrocode}
\cs_new_protected:Nn \@@_keyans_make_label_std:
@@ -11761,12 +12286,10 @@ Some text here
\RenewDocumentCommand \makelabel { m }
{
\tl_use:N \l_@@_label_fill_left_v_tl
+ \@@_keyans_show_ans:
+ \@@_keyans_show_pos:
\tl_use:N \l_@@_label_font_style_v_tl
- \bool_if:NTF \l_@@_wrap_label_v_bool
- {
- \@@_wrapper_label_v:n { ##1 }
- }
- { ##1 }
+ \@@_keyans_wrapper_label:n { ##1 }
\tl_use:N \l_@@_label_fill_right_v_tl
}
}
@@ -11782,12 +12305,10 @@ Some text here
{
\makebox[ \l_@@_labelwidth_v_dim ][ \l_@@_align_label_pos_v_str ]
{
+ \@@_keyans_show_ans:
+ \@@_keyans_show_pos:
\tl_use:N \l_@@_label_font_style_v_tl
- \bool_if:NTF \l_@@_wrap_label_v_bool
- {
- \@@_wrapper_label_v:n { ##1 }
- }
- { ##1 }
+ \@@_keyans_wrapper_label:n { ##1 }
}
}
}
@@ -11797,11 +12318,11 @@ Some text here
%
% \subsection{Second argument of the lists}\label{ltx:second-arg}
%
-% At this point of the code we have already programmed most the necessary
-% tools to create a custom \myenv{list} environment, remember that the function
-% \cs{@@_start_list:nn} takes two arguments, the first one we have
-% ready, the second one we will define for all the levels of the
-% environment \myenv*{enumext} and the environment \myenv*{keyans}.
+% At this point of the code we have already programmed most the necessary
+% tools to create a custom \myenv{list} environment, remember that the function
+% \cs{@@_start_list:nn} takes two arguments, the first one we have
+% ready, the second one we will define for all the levels of the
+% environment \myenv*{enumext} and the environment \myenv*{keyans}.
%
% \subsubsection{Calculation of \cs{leftmargin} and \cs{itemindent}}\label{int:leftmargin}
%
@@ -12879,7 +13400,8 @@ Some text here
% \subsubsection{The environment \env{keyanspic}}\label{env:keyanspic}
%
% \begin{macro}[int]{label-pos, label-sep, layout-sty, layout-sep,
-% layout-top,}
+% layout-top, mark-ans, mark-pos, mark-sep, save-sep,
+% wrap-opt, wrap-ans*, show-ans, show-pos}
% First we define the key that allows us to process the position of the
% \mymeta{label} centered \enquote{above} or \enquote{below} which will be \mykey{label-pos},
% the vertical separation of these from \emph{drawing or tabular} will be
@@ -12914,13 +13436,30 @@ Some text here
label-sep .value_required:n = true,
layout-sty .tl_set:N = \l_@@_anspic_layout_style_tl,
layout-sty .value_required:n = true,
- layout-sep .code:n = \keys_set:nn { enumext / keyans }
- { parsep = #1 },
+ layout-sep .code:n = \keys_set:nn { enumext / keyans } { parsep = #1 },
layout-sep .value_required:n = true,
- layout-top .code:n = \keys_set:nn { enumext / keyans }
- { topsep = #1 },
+ layout-top .code:n = \keys_set:nn { enumext / keyans } { topsep = #1 },
layout-top .value_required:n = true,
- unknown .code:n = { \@@_keyans_unknown_keys:n {#1} }
+ mark-ans .code:n = \keys_set:nn { enumext / keyans } { mark-ans = #1 },
+ mark-ans .value_required:n = true,
+ mark-pos .code:n = \keys_set:nn { enumext / keyans } { mark-pos = #1 },
+ mark-pos .value_required:n = true,
+ mark-sep .code:n = \keys_set:nn { enumext / keyans } { mark-sep = #1 },
+ mark-sep .value_required:n = true,
+ save-sep .code:n = \keys_set:nn { enumext / keyans } { save-sep = #1 },
+ save-sep .value_required:n = true,
+ wrap-opt .code:n = \keys_set:nn { enumext / keyans } { wrap-opt = #1 },
+ wrap-opt .value_required:n = true,
+ wrap-ans* .code:n = \keys_set:nn { enumext / keyans } { wrap-ans* = #1 },
+ wrap-ans* .value_required:n = true,
+ show-ans .code:n = \keys_set:nn { enumext / keyans } { show-ans = #1 },
+ show-ans .value_required:n = true,
+ show-pos .code:n = \keys_set:nn { enumext / keyans } { show-pos = #1 },
+ show-pos .value_required:n = true,
+ unknown .code:n = {
+ \tl_set:Nn \l_@@_envir_name_tl { keyanspic }
+ \@@_keyans_unknown_keys:n {#1}
+ },
}
% \end{macrocode}
% \end{macro}
@@ -13008,7 +13547,8 @@ Some text here
% then set |\listparindent|, |\partopsep| and |\itemsep| to zero so that
% the \emph{horizontal} and \emph{vertical} space is not affected.
% \begin{macrocode}
- \dim_add:Nn \leftmargin { -\labelwidth - \labelsep }
+ \dim_add:Nn \leftmargin { -\l_@@_labelwidth_v_dim - \l_@@_labelsep_v_dim }
+ \ignorespaces
\skip_add:Nn \topsep { 0.5\box_dp:N \strutbox }
\dim_zero:N \listparindent
\skip_zero:N \partopsep
@@ -13186,7 +13726,7 @@ Some text here
% to the command. Here we will store the \mymeta{label} and
% \emph{optional argument} in \emph{prop list} and \emph{sequence}
% and execute the \mykey{show-ans}, \mykey{show-pos}, \mykey{font},
-% \mykey{wrap-label} and \mykey{wrap-opt} keys.
+% \mykey{wrap-label}, \mykey{wrap-ans*} and \mykey{wrap-opt} keys.
% \iffalse
%% Process and store label and [opt] for |\anspic|.
% \fi
@@ -13195,24 +13735,30 @@ Some text here
{
\makebox[ \l_@@_anspic_mini_width_dim ][ c ]
{
- \bool_if:nT { #1 }
+ \bool_if:nTF { #1 }
{
+ \bool_set_true:N \l_@@_item_wrap_key_bool
+ \bool_set_true:N \l_@@_wrap_label_v_bool
+ \@@_keyans_save_item_opt:n { #2 }
\@@_keyans_addto_prop:n { #2 }
\@@_keyans_store_ref:
\@@_keyans_addto_seq:n { #2 }
\int_gincr:N \g_@@_check_starred_cmd_int
- \bool_lazy_or:nnT
- { \bool_if_p:N \l_@@_show_answer_bool }
- { \bool_if_p:N \l_@@_show_position_bool }
+ \@@_keyans_show_ans:
+ \@@_keyans_show_pos:
+ \makebox[ \l_@@_labelwidth_v_dim ][c]
{
- \tl_set_eq:NN \l_@@_label_v_tl \l_@@_label_vi_tl
- \@@_keyans_show_left:n { #2 }
- \tl_set_eq:NN \l_@@_label_vi_tl \l_@@_label_v_tl
+ \tl_use:N \l_@@_label_font_style_v_tl
+ \@@_keyans_wrapper_label:n { \l_@@_label_vi_tl }
}
+ \skip_horizontal:n { \l_@@_labelsep_v_dim }
+ \@@_keyans_show_item_opt:
+ }
+ {
+ \bool_set_false:N \l_@@_item_wrap_key_bool
+ \tl_use:N \l_@@_label_font_style_v_tl
+ \@@_wrapper_label_v:n { \l_@@_label_vi_tl }
}
- \tl_use:N \l_@@_label_font_style_v_tl
- \@@_wrapper_label_v:n { \l_@@_label_vi_tl }
- \@@_keyans_show_item_opt:
}
}
% \end{macrocode}
@@ -13625,7 +14171,7 @@ Some text here
% \cs{@@_after_list_vii:} function in the second part of the \myenv*{enumext*}
% environment definition (\S\ref{env:starred}).
% \iffalse
-%% Stop support for |mini-env| key ans stop |list| in |enumext*| environment.
+%% Stop support for |mini-env| key and stop |list| in |enumext*| environment.
% \fi
% \begin{macrocode}
\cs_new_protected:Nn \@@_stop_mini_vii:
@@ -14490,9 +15036,9 @@ Some text here
% \end{macrocode}
% The function \cs{@@_item_peek_args_viii:} will handle the \ics*{item}\myparg{number}.
% Look for the argument \enquote{\textcolor{MediumOrchid}{\ttfamily (}}, if it is
-% present we will call the function \cs{@@_joined_item_viii:w} \myparg{number}, which is in charge of joining the item's
-% in the same row, in case they are not present we will set the default
-% value \textcolor{gray}{\ttfamily(\mydim{1})}.
+% present we will call the function \cs{@@_joined_item_viii:w} \myparg{number},
+% which is in charge of joining the item's in the same row, in case they
+% are not present we will set the default value \textcolor{gray}{\ttfamily(\mydim{1})}.
% \iffalse
%% Peek argument for \item(number)*[opt] for |keyans*| environment.
% \fi
@@ -14518,7 +15064,7 @@ Some text here
{
\@@_starred_joined_item_viii:n {#1}
\peek_meaning_remove:NTF *
- { \@@_starred_item_viii:w }
+ { \@@_starred_item_viii:w }
{ \@@_standar_item_viii:w }
}
% \end{macrocode}
@@ -14540,6 +15086,7 @@ Some text here
\cs_new_protected:Npn \@@_standar_item_viii:w
{
\bool_set_false:N \l_@@_item_starred_viii_bool
+ \bool_set_false:N \l_@@_item_wrap_key_bool
\peek_meaning:NTF [
{
\bool_set_eq:NN \l_@@_wrap_label_viii_bool \l_@@_wrap_label_opt_viii_bool
@@ -14555,7 +15102,7 @@ Some text here
% \end{macro}
%
% \begin{macro}{\@@_starred_item_viii:w, \@@_starred_item_viii_aux_i:w,
-% \@@_starred_item_viii_aux_ii:w, \@@_starred_item_exec:}
+% \@@_starred_item_viii_aux_ii:w, \@@_keyans_starred_item_star:}
% The function \cs{@@_starred_item_viii:w} together with the specified
% auxiliary functions |aux_i:w| and |aux_ii:w| execute \ics*{item*}
% and \ics*{item*}\myoarg{content}.
@@ -14566,6 +15113,7 @@ Some text here
\cs_new_protected:Npn \@@_starred_item_viii:w
{
\bool_set_true:N \l_@@_item_starred_viii_bool
+ \bool_set_true:N \l_@@_item_wrap_key_bool
\bool_set_true:N \l_@@_wrap_label_viii_bool
\peek_meaning:NTF [
{ \@@_starred_item_viii_aux_i:w }
@@ -14583,11 +15131,11 @@ Some text here
\tl_clear:N \l_@@_store_current_label_tl
\tl_if_novalue:nF { #1 }
{
- \tl_if_empty:NF \l_@@_store_keyans_item_opt_sep_tl
+ \tl_if_empty:NF \l_@@_store_keyans_item_opt_sep_viii_tl
{
\tl_put_right:Ne \l_@@_store_current_label_tl
{
- \l_@@_store_keyans_item_opt_sep_tl
+ \l_@@_store_keyans_item_opt_sep_viii_tl
}
\tl_put_right:Ne \l_@@_store_current_label_tl { #1 }
}
@@ -14601,17 +15149,17 @@ Some text here
\@@_start_item_viii:w [ \l_@@_label_viii_tl ] \ignorespaces
}
% \end{macrocode}
-% The function \cs{@@_starred_item_exec:} will be in charge of storing
+% The function \cs{@@_keyans_starred_item_star:} will be in charge of storing
% the current \mymeta{label} for \ics*{item*} followed by the
% \myoarg{content} for \ics*{item*}\myoarg{content} if
% present in the \emph{sequence} and \emph{prop list} set by the
% \mykey{save-ans} key. In this same function the keys \mykey{show-ans},
-% \mykey{show-pos} and \mykey{save-ref} are implemented.
+% \mykey{show-pos}, \mykey{mark-sep} and \mykey{save-ref} are implemented.
% \iffalse
%% Set \item*[content] for |keyans*| environment.
% \fi
% \begin{macrocode}
-\cs_new_protected:Nn \@@_starred_item_exec:
+\cs_new_protected:Nn \@@_keyans_starred_item_star:
{
\tl_put_left:Ne \l_@@_store_current_label_tl { \l_@@_label_viii_tl }
\@@_store_addto_prop:V \l_@@_store_current_label_tl
@@ -14619,9 +15167,16 @@ Some text here
\tl_put_left:Ne \l_@@_store_current_label_tl { \item }
\@@_keyans_addto_seq_link:
\int_gincr:N \g_@@_check_starred_cmd_int
+ \dim_compare:nNnT { \l_@@_mark_sym_sep_viii_dim } = { \c_zero_dim }
+ {
+ \dim_set:Nn \l_@@_mark_sym_sep_viii_dim { \l_@@_labelsep_viii_dim }
+ }
\bool_if:NT \l_@@_show_answer_bool
{
- \@@_print_keyans_box:NN \l_@@_labelwidth_i_dim \l_@@_labelsep_i_dim
+ \tl_set_eq:NN \l_@@_mark_answer_sym_tl \l_@@_mark_answer_sym_viii_tl
+ \str_set_eq:NN \l_@@_mark_position_str \l_@@_mark_position_viii_str
+ \@@_print_keyans_box:NN
+ \l_@@_labelwidth_viii_dim \l_@@_mark_sym_sep_viii_dim
}
\bool_if:NT \l_@@_show_position_bool
{
@@ -14636,19 +15191,40 @@ Some text here
]
\group_end:
}
- \@@_print_keyans_box:NN \l_@@_labelwidth_i_dim \l_@@_labelsep_i_dim
+ \str_set_eq:NN \l_@@_mark_position_str \l_@@_mark_position_viii_str
+ \@@_print_keyans_box:NN
+ \l_@@_labelwidth_viii_dim \l_@@_mark_sym_sep_viii_dim
}
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_fake_make_label_viii:n}
+% \begin{macro}{\@@_keyans_wraper_label_viii:n, \@@_fake_make_label_viii:n}
% The implementation at this is very similar to that of the
% \myenv*{enumext*} environment.
% \iffalse
%% Define a fake |\makelabel| for |keyans*| environment.
% \fi
% \begin{macrocode}
+\cs_new_protected:Npn \@@_keyans_wraper_label_viii:n #1
+ {
+ \bool_lazy_all:nT
+ {
+ { \bool_if_p:N \l_@@_wrap_label_viii_bool }
+ { \bool_if_p:N \l_@@_show_answer_bool }
+ { \bool_if_p:N \l_@@_item_wrap_key_bool }
+ { \cs_if_exist_p:N \@@_keyans_wrapper_item_viii:n }
+ }
+ {
+ \cs_set_eq:NN
+ \@@_wrapper_label_viii:n \@@_keyans_wrapper_item_viii:n
+ }
+ \bool_if:NTF \l_@@_wrap_label_viii_bool
+ {
+ \@@_wrapper_label_viii:n {#1}
+ }
+ { #1 }
+ }
\cs_new_protected_nopar:Npn \@@_fake_make_label_viii:n #1
{
\legacy_if:nT { @noitemarg }
@@ -14661,16 +15237,12 @@ Some text here
}
\bool_if:NT \l_@@_item_starred_viii_bool
{
- \@@_starred_item_exec:
+ \@@_keyans_starred_item_star:
}
\makebox[ \l_@@_labelwidth_viii_dim ][ \l_@@_align_label_viii_str ]
{
\tl_use:N \l_@@_label_font_style_viii_tl
- \bool_if:NTF \l_@@_wrap_label_viii_bool
- {
- \@@_wrapper_label_viii:n {#1}
- }
- { #1 }
+ \@@_keyans_wraper_label_viii:n {#1}
}
\skip_horizontal:N \l_@@_labelsep_viii_dim \ignorespaces
}
@@ -14708,7 +15280,7 @@ Some text here
\tl_use:N \l_@@_fake_item_indent_viii_tl
\bool_if:NT \l_@@_item_starred_viii_bool
{
- \@@_keyans_show_item_opt:
+ \@@_keyans_show_item_opt_viii:
}
\tl_use:N \l_@@_after_list_args_viii_tl
}
@@ -14844,27 +15416,39 @@ Some text here
print* .code:n = \keys_precompile:neN { enumext / enumext* }
{ \@@_filter_save_key:n {#1} }
\l_@@_print_keyans_starred_tl, % starred cmd
- print* .initial:n = { nosep, label=\arabic*., columns=2, first=\small, font=\small },
+ print* .initial:n = { labelwidth=0pt, labelsep=0.3333em, itemindent=0pt, list-offset=0pt,
+ rightmargin=0pt, listparindent=0pt, nosep, label=\arabic*.,
+ columns=2, first=\small, font=\small },
print-1 .code:n = \keys_precompile:neN { enumext / level-1 }
{ \@@_filter_save_key:n {#1} }
\l_@@_print_keyans_i_tl,
- print-1 .initial:n = { nosep, label=\arabic*., columns=2, first=\small, font=\small },
+ print-1 .initial:n = { labelwidth=0pt, labelsep=0.3333em, itemindent=0pt, list-offset=0pt,
+ rightmargin=0pt, listparindent=0pt, nosep, label=\arabic*.,
+ columns=2, first=\small, font=\small },
print-2 .code:n = \keys_precompile:neN { enumext / level-2 }
{ \@@_filter_save_key:n {#1} }
\l_@@_print_keyans_ii_tl,
- print-2 .initial:n = { nosep, label=(\alph*), first=\small, font=\small },
+ print-2 .initial:n = { labelwidth=0pt, labelsep=0.3333em, itemindent=0pt, list-offset=0pt,
+ rightmargin=0pt, listparindent=0pt, nosep, label=(\alph*),
+ first=\small, font=\small },
print-3 .code:n = \keys_precompile:neN { enumext / level-3 }
{ \@@_filter_save_key:n {#1} }
\l_@@_print_keyans_iii_tl,
- print-3 .initial:n = { nosep, label=\roman*., first=\small, font=\small },
+ print-3 .initial:n = { labelwidth=0pt, labelsep=0.3333em, itemindent=0pt, list-offset=0pt,
+ rightmargin=0pt, listparindent=0pt, nosep, label=\roman*.,
+ first=\small, font=\small },
print-4 .code:n = \keys_precompile:neN { enumext / level-4 }
{ \@@_filter_save_key:n {#1} }
\l_@@_print_keyans_iv_tl,
- print-4 .initial:n = { nosep, label=\Alph*., first=\small, font=\small },
+ print-4 .initial:n = { labelwidth=0pt, labelsep=0.3333em, itemindent=0pt, list-offset=0pt,
+ rightmargin=0pt, listparindent=0pt, nosep, label=\Alph*.,
+ first=\small, font=\small },
print-* .code:n = \keys_precompile:neN { enumext / enumext* }
{ \@@_filter_save_key:n {#1} }
\l_@@_print_keyans_vii_tl, % starred nested
- print-* .initial:n = { nosep, label=\arabic*., first=\small, font=\small },
+ print-* .initial:n = { labelwidth=0pt, labelsep=0.3333em, itemindent=0pt, list-offset=0pt,
+ rightmargin=0pt, listparindent=0pt, nosep, label=\arabic*.,
+ first=\small, font=\small },
}
% \end{macrocode}
%