summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/cooking-units
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-10-28 20:57:39 +0000
committerKarl Berry <karl@freefriends.org>2016-10-28 20:57:39 +0000
commit8289077694867928d89669029eb58b0f27fed253 (patch)
treed67f38cb497090686a383932c237450e165a7a1d /Master/texmf-dist/source/latex/cooking-units
parentf1ef2f648613f3f1de0cb26dfd78a35edf544e74 (diff)
cooking-units (28oct16)
git-svn-id: svn://tug.org/texlive/trunk@42372 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/cooking-units')
-rw-r--r--Master/texmf-dist/source/latex/cooking-units/cooking-units.dtx481
1 files changed, 364 insertions, 117 deletions
diff --git a/Master/texmf-dist/source/latex/cooking-units/cooking-units.dtx b/Master/texmf-dist/source/latex/cooking-units/cooking-units.dtx
index 826bea4642c..9824d98e6c7 100644
--- a/Master/texmf-dist/source/latex/cooking-units/cooking-units.dtx
+++ b/Master/texmf-dist/source/latex/cooking-units/cooking-units.dtx
@@ -253,6 +253,91 @@ and the derived file cooking-units.sty.
{ \paragraph{Example:} }
{ }
+%: table
+\tl_new:N \l_translation_does_not_exist_tl
+\tl_set:Nn \l_translation_does_not_exist_tl { --- }
+\tl_set_eq:NN \translationdoesnotexisttl \l_translation_does_not_exist_tl
+\tl_new:N \mytablecolumns
+\tl_set:Nn \mytablecolumns { l l l l l }
+\clist_new:N \l_list_of_units_clist
+\clist_new:N \l_list_of_textunits_clist
+\clist_set:Nn \l_list_of_textunits_clist
+ {
+ decimal-mark ,
+ one (m) ,
+ one (f) ,
+ one (n) ,
+ }
+\clist_set:Nx \l_list_of_units_clist
+ {
+ kg , dag , g , oz , lb , space ,
+ C , F , Re , K , space ,
+ d , h , min , s , space ,
+ m , dm , cm , mm , in , space ,
+ l , dl , cl , ml , space ,
+ cal , kcal , J , kJ , eV , space ,
+ pn , EL , TL , csp , dsp , ssp , Msp , space ,
+ \clist_use:Nn \l_list_of_textunits_clist { , }
+ }
+
+
+\NewDocumentCommand \CreateTableForLanguages { s m }
+ {
+ \IfBooleanTF {#1}
+ { \clist_gset_eq:NN \l_tmpa_clist \l_list_of_textunits_clist }
+ { \clist_gset_eq:NN \l_tmpa_clist \l_list_of_units_clist }
+ \CreateTableHeader {#2} \\ \midrule
+ \CreateTableRow {#2}
+ }
+
+\NewDocumentCommand \CreateTableHeader { m }
+ {
+ \meta{unit-key} & \clist_map_inline:nn {#1} { printed \ unit & unit-name & (plural) & gender }
+ }
+\NewDocumentCommand \CreateTableRow { m }
+ {
+ \clist_map_inline:Nn \l_tmpa_clist
+ {
+ \str_if_eq:nnTF { space } {##1} { \addlinespace }
+ {
+ ##1
+ \clist_map_inline:nn {#1}
+ {
+ &
+ \clist_if_in:NnTF \l_list_of_textunits_clist {##1}
+ { \l_translation_does_not_exist_tl }
+ {
+ \translatelet[to=####1]\l_tmpa_tl{ ##1 (cu-unit) }
+ \tl_if_in:NnTF \l_tmpa_tl { unit }
+ { \l_translation_does_not_exist_tl }
+ { \l_tmpa_tl }
+ }
+ &
+ \translatelet[to=####1]\l_tmpa_tl{ ##1 (cu-unitname) }
+ \tl_if_in:NnTF \l_tmpa_tl { unitname }
+ { \l_translation_does_not_exist_tl }
+ { \l_tmpa_tl }
+ &
+ \translatelet[to=####1]\l_tmpa_tl{ ##1 (cu-unitname) }
+ \translatelet[to=####1]\l_tmpb_tl{ ##1 (cu-unitname pl) }
+ \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl
+ { }
+ {
+ \tl_if_in:NnTF \l_tmpb_tl { unitname }
+ { \l_translation_does_not_exist_tl }
+ { (\l_tmpb_tl) }
+ }
+ &
+ \translatelet[to=####1]\l_tmpa_tl{ ##1 (cu-unitgender) }
+ \tl_if_in:NnTF \l_tmpa_tl { gender }
+ { \l_translation_does_not_exist_tl }
+ { \l_tmpa_tl }
+ }
+ \\
+ }
+ }
+ }
+
\ExplSyntaxOff
\lstset
@@ -368,6 +453,11 @@ and the derived file cooking-units.sty.
% \changes {2016/09/26} {1.03a} {\cs{cuaddsinglekeys} now tests if the unit exists (it didn't before).}
% \changes {2016/09/26} {1.03b} {Replaced \cs{prop_clear_new:c} by \cs{prop_clear:c}.}
% \changes {2016/09/26} {1.03b} {Recalculated all electron volt values for conversion (as 'kg' was wrong before). Let's hope they are correct this time.}
+% \changes {2016/09/26} {1.04} {New option: 'round-half'.}
+% \changes {2016/10/19} {1.04} {Use \cs{keys_set:nn} only if second argument is not empty.}
+% \changes {2016/10/19} {1.04} {'convert-to-eV' now also as optional argument available.}
+% \changes {2016/10/19} {1.04} {Option 'load-time-option' now spells 'available' correct.}
+% \changes {2016/10/19} {1.04} {Update of documentation.}
%
%
% \GetFileInfo{\jobname.sty}
@@ -537,7 +627,7 @@ and the derived file cooking-units.sty.
% \lstinline|\cuam| works like a more primitive version \mycs{cunum}
% which doesn't need a unit, but doesn't check the input like \mycs{cunum}.
% Like in \lstinline|\cunum| \texttt{\_} and \texttt{/} are used to imply a (mixed) fraction and \texttt{-{}-} is
-% used to print ranges\footnote{Note that since v1.02 \mycs{myfrac} is obsolete.}:
+% used to print ranges\footnote{Note that since v1.02 \mycs{cufrac} is obsolete.}:
%
% \begin{cuexamplecode}
% \cuam{3} \\
@@ -551,6 +641,7 @@ and the derived file cooking-units.sty.
% \label{sec:pred-units}
%
% In \vref{tab:def-units} and \vref{tab:some-more-units} you can find all predefined units.
+% In \vref{sec:Translations} all available translations are listed.
%
% I now \emph{did} include a separate key for \enquote{Messerspitze} (Msp.)
% and therefore separated \enquote{Pinch} (pn) and \enquote{Messerspitze} (Msp.).
@@ -575,7 +666,7 @@ and the derived file cooking-units.sty.
% volt} exists just for fun.}
% \begin{tabular}{ lll }
% \toprule
-% unit name & unit-key & symbol \\ \midrule
+% unitname & unit-key & symbol \\ \midrule
% \PrintUnit {kg} \\
% \PrintUnit {dag} \\
% \PrintUnit {g} \\
@@ -607,9 +698,9 @@ and the derived file cooking-units.sty.
% \PrintUnit {kcal} \\
% \PrintUnit {J} \\
% \PrintUnit {kJ} \\
-% \PrintUnit {eV} \\ \addlinespace
+% \PrintUnit {eV}
%
-% \bottomrule
+% \\ \bottomrule
% \end{tabular}
% \label{tab:def-units}
% \end{table}
@@ -622,7 +713,7 @@ and the derived file cooking-units.sty.
% (like german; at least I never heard of it). So please only use units known to you.}
% \begin{tabular}{ lll }
% \toprule
-% unit name & unit-key & symbol \\ \midrule
+% unitname & unit-key & symbol \\ \midrule
% \PrintUnit {pn} \\ \addlinespace
% \PrintUnit {EL} \\
% \PrintUnit {TL} \\
@@ -863,7 +954,7 @@ and the derived file cooking-units.sty.
% \cunum[st=g]{1}{st} \\
% \cunum[st=kg]{1}{st} \\
% \cunum[kg=st]{1}{kg} \\
-% \cunum[st=kg]{16}{st} \\
+% \cunum[st=kg]{16}{st}
% \end{cuexamplecode}
% \end{cuexample}
%
@@ -889,7 +980,7 @@ and the derived file cooking-units.sty.
% \end{lstlisting}
% \begin{cuexamplecode}
% \cunum{10}{C} \\
-% \cunum[C=Ro]{10}{C} \\
+% \cunum[C=Ro]{10}{C}
% \end{cuexamplecode}
% \end{cuexample}
%
@@ -921,7 +1012,7 @@ and the derived file cooking-units.sty.
% \cunum[st=lb]{1}{st} \\
% \cunum[st=g]{1}{st} \\
% \cunum[st=kg]{1}{st} \\
-% \cunum[kg=st]{1}{kg} \\
+% \cunum[kg=st]{1}{kg}
% \end{cuexamplecode}
% \end{cuexample}
%
@@ -930,7 +1021,7 @@ and the derived file cooking-units.sty.
% \section{Language support}
% \label{sec:language}
%
-% The unit names and symbols depend on the language. To change the
+% The unit-names and symbols depend on the language. To change the
% name depending on the language you can use \lstinline|\cudefinename|
% and to only change symbols use \lstinline|\cudefinesymbol|.
%
@@ -1211,7 +1302,36 @@ and the derived file cooking-units.sty.
% \cunum{1.23456789}{kg} \\
% \cunum{12.58}{kg} \\
% \cunum[g=kg]{194--294}{g} \\
-% \cunum[kg=g]{1.23456789}{kg} \\
+% \cunum[kg=g]{1.23456789}{kg}
+% \end{cuexamplecode}
+%
+% \begin{function}{round-half}
+% \begin{syntax}
+% round-half = \meta{default/commercial}
+% \end{syntax}
+% This option is only important for half-way numbers (e.g. $0.005$). By setting
+% it to \opt{default} the value will be rounded to the nearest even number is chosen
+% (which is the default rounding for \pkg{expl3}, hence the name).
+% Setting it to \opt{commercial} rounds the value away from zero.
+%
+% It is set to \opt{default} by \dots\ default.
+%^^A This option decides to round a value which half-way (e.g. $0.005$) between two numbers.
+%^^A \meta{choice} can be either \opt{default} or \opt{commercial}.
+%^^A First rounds the half-way number to the even multiple (\enquote{default} because
+%^^A it is the default rounding option specified by \pkg{expl3}).
+%^^A \meta{commercial} rounds up. It is set to \opt{default} by \dots\ well, default.
+% \end{function}
+%
+%
+% \begin{cuexamplecode}
+% \cusetup{round-half=default} @
+% \cunum{0.005}{kg} \\
+% \cunum{-0.005}{kg} \\
+% \cunum{1.245}{kg} \\
+% \cusetup{round-half=commercial} @
+% \cunum{0.005}{kg} \\
+% \cunum{-0.005}{kg} \\
+% \cunum{1.245}{kg}
% \end{cuexamplecode}
%
%
@@ -1238,23 +1358,23 @@ and the derived file cooking-units.sty.
% \begin{cuexamplecode}
% \cusetup{cunum-range-sign={~to~}} @
% \cunum{1--2}{kg} \\
-% \cuam{1--2}{kg} \\
+% \cuam{1--2} \\
% \cutext{1--2}{kg} \\
-% \Cutext{1--2}{kg} \\
+% \Cutext{1--2}{kg}
% \end{cuexamplecode}
% \begin{cuexamplecode}
% \cusetup{cutext-range-sign={~to~}} @
% \cunum{1--2}{kg} \\
-% \cuam{1--2}{kg} \\
+% \cuam{1--2} \\
% \cutext{1--2}{kg} \\
-% \Cutext{1--2}{kg} \\
+% \Cutext{1--2}{kg}
% \end{cuexamplecode}
% \begin{cuexamplecode}
% \cusetup{range-sign={~to~}} @
% \cunum{1--2}{kg} \\
-% \cuam{1--2}{kg} \\
+% \cuam{1--2} \\
% \cutext{1--2}{kg} \\
-% \Cutext{1--2}{kg} \\
+% \Cutext{1--2}{kg}
% \end{cuexamplecode}
%
%
@@ -1312,7 +1432,7 @@ and the derived file cooking-units.sty.
% mixed-fraction-space = \meta{length}
% \end{syntax}
% Sets the length between the fraction and the number in a mixed-fraction,
-% default is \texttt{0.1em}.
+% default is \texttt{0.1em} (because I said so).
% \end{function}
%
% \begin{cuexamplecode}
@@ -1326,7 +1446,7 @@ and the derived file cooking-units.sty.
% \cusetup{mixed-fraction-space=0em } @
% \cuam{1_2/3}{kg} \\
% \cunum{1_2/3}{kg} \\
-% \cunum{10_2/3}{kg} \\
+% \cunum{10_2/3}{kg}
% \end{cuexamplecode}
%
%
@@ -1348,7 +1468,7 @@ and the derived file cooking-units.sty.
% \cunum{X--?}{kg} \\
% \cusetup{set-special-sign={} } @
% \cunum{1}{kg} \\
-% \cunum{1--2}{kg} \\
+% \cunum{1--2}{kg}
% \end{cuexamplecode}
%
%
@@ -1378,7 +1498,7 @@ and the derived file cooking-units.sty.
% \cunum{qwertzuiop}{kg} \\
% \cutext{1}{kg} \\
% \cutext{100}{kg} \\
-% \cutext{gjfak}{kg} \\
+% \cutext{gjfak}{kg}
% \end{cuexamplecode}
%
%
@@ -1410,7 +1530,7 @@ and the derived file cooking-units.sty.
% \cutext{1}{kg} \\
% \cutext{2}{kg} \\
% \cutext{12}{kg} \\
-% \cutext{13}{kg} \\
+% \cutext{13}{kg}
% \end{cuexamplecode}
% \cusetup{ use-numerals-below=0 }
%
@@ -1457,7 +1577,7 @@ and the derived file cooking-units.sty.
%
% For example, this package implements the allowed minimum values for the
% temperatures \texttt{C}, \texttt{F}, \texttt{K} and \texttt{Re} to be checked if
-% \opt{check-temperature} is active:
+% \opt{check-temperature} is active using:
% \begin{lstlisting}
% \cusetup
% {
@@ -1510,7 +1630,7 @@ and the derived file cooking-units.sty.
% \cunum{1}{J} \\
% \cunum{1}{m} \\
% \cunum{1}{C} \\
-% \cunum{1}{s} \\
+% \cunum{1}{s}
% \end{cuexamplecode}
%
%
@@ -1535,7 +1655,7 @@ and the derived file cooking-units.sty.
% english to be precise; I managed to add french with the help of the internet,
% which is not optimal) so if you are able to speak a language not yet implemented
% and would like to help you can send me a list of the translations of the units given in
-% \vref{sec:pred-units}. I would need
+% \vref{sec:pred-units} or (for better overview) \vref{sec:Translations}. I would need
% \begin{itemize}
% \item their singular (and plural) form,
% \item the gender,
@@ -1547,6 +1667,60 @@ and the derived file cooking-units.sty.
%
%
%
+% \clearpage
+% \appendix
+%
+% \section{Translations}
+% \label{sec:Translations}
+% This section contains the list of available translations. Each table
+% shows the available translations for the printed unit, the unit-name
+% (printed if \mycs{cutext} or \mycs{Cutext} is used) and
+% the plural form (if different from the singular form).
+%
+% If a translation is not available a \enquote{\translationdoesnotexisttl} is
+% shown.
+%
+% \small
+%
+%
+% \begin{function}{English}
+% \begin{tabular}{ l l l l l }
+% \toprule
+% \CreateTableForLanguages{ English }
+% \\\bottomrule
+% \end{tabular}
+% \end{function}
+%
+% \begin{function}{AmericanEnglish}
+% Only differences from \enquote{English} are defined.
+%
+% \begin{tabular}{ l l l l l }
+% \toprule
+% \CreateTableForLanguages{ AmericanEnglish }
+% \\\bottomrule
+% \end{tabular}
+% \end{function}
+%
+% \begin{function}{German}
+% \begin{tabular}{ l l l l l }
+% \toprule
+% \CreateTableForLanguages{ German }
+% \\\bottomrule
+% \end{tabular}
+% \end{function}
+%
+% \begin{function}{French}
+% \begin{tabular}{ l l l l l }
+% \toprule
+% \CreateTableForLanguages{ French }
+% \\\bottomrule
+% \end{tabular}
+% \end{function}
+%
+%
+% \clearpage
+%
+%
%^^A \section{Notes and other stuff}
%^^A This section contains stuff which might or might not be interesting.
%^^A
@@ -1673,8 +1847,8 @@ and the derived file cooking-units.sty.
% \begin{macrocode}
\ProvidesExplPackage
{cooking-units}
- {2016/09/26}
- {1.03b}
+ {2016/10/19}
+ {1.04}
{Ein Paket fuer Kocheinheiten}
% \end{macrocode}
% Chekcing if \pkg{expl3} is uptodate, otherwise abort the loading of the package.
@@ -1742,7 +1916,7 @@ and the derived file cooking-units.sty.
\cs_generate_variant:Nn \tl_if_in:NnT { NVT }
\cs_generate_variant:Nn \fp_compare:nNnT { cNnT }
\cs_generate_variant:Nn \fp_eval:n { c }
-
+\cs_generate_variant:Nn \prop_get:cVN { cVc }
% \end{macrocode}
% \end{macro}
%
@@ -1894,6 +2068,7 @@ and the derived file cooking-units.sty.
% \end{macro}
%
%
+%
% \begin{macro}{ \l_@@_list_of_defined_keys_clist , \g_@@_list_of_defined_units_clist }
% List of defined units and keys.
% \begin{macrocode}
@@ -1918,7 +2093,6 @@ and the derived file cooking-units.sty.
% Stores units which should be tested if \opt{check-temperature} equals true.
% \begin{macrocode}
\clist_new:N \l_@@_temperatures_to_check_clist
-%\clist_set:Nn \l_@@_temperatures_to_check_clist { C , F , K , Re }
% \end{macrocode}
% \end{macro}
%
@@ -1936,7 +2110,8 @@ and the derived file cooking-units.sty.
% \l_@@_convert_to_eV_bool,
% \l_@@_cutext_uppercase_word_bool,
% \l_@@_error_for_unknown_value_bool,
-% \l_@@_parse_range_bool
+% \l_@@_parse_range_bool,
+% ^^A \l_@@_round_special_bool
% }
% Some booleans we need later.
% \begin{macrocode}
@@ -1953,6 +2128,7 @@ and the derived file cooking-units.sty.
\bool_new:N \l_@@_cutext_uppercase_word_bool
\bool_new:N \l_@@_error_for_unknown_value_bool
\bool_new:N \l_@@_parse_range_bool
+%\bool_new:N \l_@@_round_special_bool
%\bool_new:N \l_@@_unit_is_singlekey_bool
% \end{macrocode}
% \end{macro}
@@ -2147,6 +2323,7 @@ and the derived file cooking-units.sty.
% \begin{macrocode}
convert-to-eV .bool_set:N = \l_@@_convert_to_eV_bool ,
convert-to-eV .default:n = { true } ,
+ convert-to-eV .groups:n = { change-unit } ,
% \end{macrocode}
%\end{macro}
%
@@ -2184,7 +2361,43 @@ and the derived file cooking-units.sty.
}
},
% \end{macrocode}
-% Ending the definiton of keys.
+%
+%
+% \begin{macro}{ round-half }
+% Choosing between \enquote{normal} rounding to even and commercial rounding.
+% If 'default' is chosen nothing is added, if 'commercial' is used it adds a comma
+% for the rounding option.
+% \begin{macrocode}
+ round-half .choices:nn =
+ { default , commercial }
+ {
+% \bool_set_true:N \l_@@_round_special_bool
+ \cs_set:Npx \@@_round_setup:n ####1
+ {
+ \exp_not:N \l_@@_significant_figures_int
+ \int_case:nn { \l_keys_choice_int }
+ {
+ { 1 } { }
+ { 2 } { \exp_not:N, ####1 }
+ }
+ }
+ },
+ round-half .default:n = { default },
+% \end{macrocode}
+%
+%
+% \begin{macro}{ label }
+% \begin{macrocode}
+ label .code:n = { \label{cooking-units-#1} } ,
+% \end{macrocode}
+%
+% \begin{macro}{ for-persons }
+% \begin{macrocode}
+ for-persons .int_set:N = \l_@@_number_of_persons_int ,
+ for-persons .default:n = { 4 } ,
+% \end{macrocode}
+%
+% Ending the definition of keys.
% \end{macro}
}
% \begin{macrocode}
@@ -2330,7 +2543,7 @@ and the derived file cooking-units.sty.
}
{
You \ used\ a\ special\ sign\ indicating\ that\ the\ true\ amount\ of\ the\
- specific\ ingredient\ is\ (was) not\ known\ to\ you. This\ message\
+ specific\ ingredient\ is\ (was) \ not\ known\ to\ you. This\ message\
reminds\ you\ about\ that\ fact.
\msg_see_documentation_text:n {cooking-units}
}
@@ -2341,7 +2554,7 @@ and the derived file cooking-units.sty.
% \begin{macrocode}
\msg_new:nnnn { cooking - units } { load-time-option }
{
- The \ option \ '#1' \ is \ only \ avaiable \ as \ a \ load-time-option. \
+ The \ option \ '#1' \ is \ only \ available \ as \ a \ load-time-option. \
Please \ set \ it \ as \ a \ package \ option.
}
{
@@ -2373,6 +2586,8 @@ and the derived file cooking-units.sty.
'check-temperature'.
}
{
+ A \ minimum \ value \ is \ needed \ for \ testing \ if \
+ 'check-temperature' \ is \ active.
\msg_see_documentation_text:n { cooking-units }
}
% \end{macrocode}
@@ -2404,7 +2619,6 @@ and the derived file cooking-units.sty.
\cs_new:Npn \@@_error_if_unit_not_defined:n #1
{
\clist_if_in:NnF \g_@@_list_of_defined_units_clist {#1}
-% \tl_if_exist:cF { l_@@_tmpa_ #1 _tl }
{ \msg_error:nnn { cooking-units } { unknown-unit } {#1} }
}
\cs_generate_variant:Nn \@@_error_if_unit_not_defined:n { V }
@@ -2497,7 +2711,7 @@ and the derived file cooking-units.sty.
{
\deftranslation [ to=#1 ] { #2 } {#3}
}
-\cs_generate_variant:Nn \@@_deftranslation:Nnn { Vnn }
+\cs_generate_variant:Nn \@@_deftranslation:Nnn { Vnn , Vnv }
% \end{macrocode}
% \end{macro}
%
@@ -2524,6 +2738,16 @@ and the derived file cooking-units.sty.
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_deftranslation:Nnn}
+% Commands used in the option \texttt{temperature-to-check}.
+% If no value is given (first command) it raises an error. If a value
+% is given the unit is added to a check-list and a new
+% constant is defined.
+% \begin{macrocode}
+\cs_new:Npn \@@_round_setup:n #1 { \l_@@_significant_figures_int }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection {Parsing and cheking numbers}
%
% This section contains macros helping an checking the input.
@@ -2782,15 +3006,6 @@ and the derived file cooking-units.sty.
\cs_new:Npn \@@_calculate_input_and_store_in:nN #1#2
{
\fp_set:Nn \l_tmpa_fp {#1}
-% \tl_set:Nf #2
-% {
-% \fp_eval:n
-% {
-% \bool_if:NF \l_@@_unit_is_singlekey_bool
-% { \l_tmpa_fp * }
-% \tl_use:c { l_@@_tmpa_ \l_@@_tmp_unit_tl _ tl }
-% }
-% }
\tl_if_in:cnTF { l_@@_tmpa_ \l_@@_tmp_unit_tl _ tl } { \l_tmpa_fp }
{
\tl_set:Nf #2
@@ -2815,23 +3030,24 @@ and the derived file cooking-units.sty.
%
%
%
-% \begin{macro}{\@@_get_number_after_dot:n,\@@_get_number_after_dot_aux:w}
+% \begin{macro}{\@@_check_number_after_dot:n,\@@_check_number_after_dot_aux:w}
% Getting the number after the decimal point. If it doesn't exist
% the boolean is set to false, otherwise it checks how many tokens
% are within the number after the decimal point. If the number of
% tokens is greater than significant\_figures\_plus\_one the bool is
% set to true (which tells the package later that the number should
-% be rounded).
+% be rounded). This should be safe as the input was already checked.
% \begin{macrocode}
-\cs_new:Npn \@@_get_number_after_dot:n #1
+\cs_new:Npn \@@_check_number_after_dot:n #1
{
- \@@_get_number_after_dot_aux:w #1 . \q_recursion_tail .
+ \@@_check_number_after_dot_aux:w #1 . \q_recursion_tail .
\q_recursion_stop
}
-\cs_new:Npn \@@_get_number_after_dot_aux:w #1. #2 .
+\cs_new:Npn \@@_check_number_after_dot_aux:w #1. #2 .
{
\quark_if_recursion_tail_stop:n {#2}
- \int_compare:nNnF { \tl_count:n {#2} } < { \l_@@_significant_figures_plus_one_int }
+ \int_compare:nNnF
+ { \tl_count:n {#2} } < { \l_@@_significant_figures_plus_one_int }
{ \bool_set_true:N \l_tmpa_bool }
\use_none_delimit_by_q_recursion_stop:w
}
@@ -2847,21 +3063,31 @@ and the derived file cooking-units.sty.
\cs_new:Npn \@@_round_calculated_input:NN #1#2
{
\bool_set_false:N \l_tmpa_bool
- \@@_get_number_after_dot:n {#2}
+ \@@_check_number_after_dot:n {#2}
\tl_set:Nf #1
{
- \bool_if:nTF { \l_tmpa_bool || \l_@@_round_to_int_bool }
- {
- \fp_eval:n
- {
- \bool_if:NTF \l_@@_round_to_int_bool
- { round (#2) }
- {
- round( #2 , \l_@@_significant_figures_int )
- }
- }
- }
- {#2}
+ \bool_if:NTF \l_@@_round_to_int_bool
+ {
+ \fp_eval:n { round (#2) }
+ }{
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \fp_eval:n { round( #2 , \@@_round_setup:n {#2} ) }
+ }
+ {#2}
+ }
+% \bool_if:nTF { \l_tmpa_bool || \l_@@_round_to_int_bool }
+% {
+% \fp_eval:n
+% {
+% \bool_if:NTF \l_@@_round_to_int_bool
+% { round (#2) }
+% {
+% round( #2 , \@@_round_setup:n {#2} )
+% }
+% }
+% }
+% {#2}
}
}
\cs_generate_variant:Nn \@@_round_calculated_input:NN { NV }
@@ -2927,7 +3153,7 @@ and the derived file cooking-units.sty.
\cs_new_protected:Npn \@@_print_nummerical_output:N #1
{
%% \l_@@_tmpa_tl is sehr gefaehrlich hier.
- \translatelet \l_@@_tmpa_tl { decimal-mark ( cu-unit name ) }
+ \translatelet \l_@@_tmpa_tl { decimal-mark ( cu-unitname ) }
\tl_replace_once:NnV #1 { . } \l_@@_tmpa_tl
\tl_replace_once:NnV #1 { - } \c_@@_minus_tl
#1
@@ -2971,10 +3197,11 @@ and the derived file cooking-units.sty.
{
\tl_set:Nn \l_@@_tmp_unit_tl {#4}
\@@_error_if_unit_not_defined:V \l_@@_tmp_unit_tl
+ \tl_if_empty:nF {#1}
+ { \keys_set_groups:nnn { cooking-units } { change-unit } {#1} }
\bool_if:NTF \l_@@_convert_to_eV_bool
{ \@@_convert_to_eV: }
{
- \keys_set_groups:nnn { cooking-units } { change-unit } {#1}
\prop_get:NVN \l_@@_change_unit_prop \l_@@_tmp_unit_tl \l_@@_option_unit_tl
\quark_if_no_value:NT \l_@@_option_unit_tl
{
@@ -2984,7 +3211,8 @@ and the derived file cooking-units.sty.
{ cooking-units }
{ change-unit }
{ l_@@_predefined_option_ \l_@@_option_unit_tl _clist }
- \keys_set_filter:nnn { cooking-units } { change-unit } {#1}
+ \tl_if_empty:nF {#1}
+ { \keys_set_filter:nnn { cooking-units } { change-unit } {#1} }
}
\bool_set_false:N \l_@@_special_sign_bool
\bool_set_false:N \l_@@_error_bool
@@ -3173,7 +3401,7 @@ and the derived file cooking-units.sty.
% \SI{1}{\kg}&= \SI{1}{\kg} \\
% \SI{1}{\kg}&= \SI{100}{\deka\gram} \\
% \SI{1}{\kg}&= \SI{1000}{\g} \\
-% \SI{1}{\kg}&= \SI{35.27399}{oz} \\
+% \SI{1}{\kg}&= \SI{35.27399}{oz}
% \end{align*}
%
% Therefore the property list for \lstinline|kg| contains the keys and values:
@@ -3188,7 +3416,7 @@ and the derived file cooking-units.sty.
% \SI{1}{\deka\gram}&= \SI{0.01}{\kg} \\
% \SI{1}{\deka\gram}&= \SI{1}{\deka\gram} \\
% \SI{1}{\deka\gram}&= \SI{10}{\g} \\
-% \SI{1}{\deka\gram}&= \SI{0.3527399}{\oz} \\
+% \SI{1}{\deka\gram}&= \SI{0.3527399}{\oz}
% \end{align*}
%
% Same for \texttt{g}:
@@ -3197,7 +3425,7 @@ and the derived file cooking-units.sty.
% \SI{1}{\g}&= \SI{0.001}{\kg} \\
% \SI{1}{\g}&= \SI{0.1}{\deka\gram} \\
% \SI{1}{\g}&= \SI{1}{\g} \\
-% \SI{1}{\g}&= \SI{0.03527399}{oz} \\
+% \SI{1}{\g}&= \SI{0.03527399}{oz}
% \end{align*}
%
% and \texttt{oz}
@@ -3206,7 +3434,7 @@ and the derived file cooking-units.sty.
% \SI{1}{oz}&= \SI{0.0283495}{\kg} \\
% \SI{1}{oz}&= \SI{2.83495}{\deka\gram} \\
% \SI{1}{oz}&= \SI{28.3495}{\g} \\
-% \SI{1}{oz}&= \SI{1}{oz} \\
+% \SI{1}{oz}&= \SI{1}{oz}
% \end{align*}
%
% \begin{macrocode}
@@ -3218,7 +3446,6 @@ and the derived file cooking-units.sty.
\prop_put:NnV \l_tmpb_prop { Erstes Ding } \l_@@_tmp_unit_tl
\clist_map_inline:Nn \l_tmpa_clist
{
- \prop_clear:c { l_@@_cukeys_ ##1 _prop }
\prop_set_eq:cN { l_@@_cukeys_ ##1 _prop } \l_tmpb_prop
\tl_set_eq:cN { l_@@_tmpa_ ##1 _tl } \c_one_fp
\clist_map_inline:Nn \l_tmpa_clist
@@ -3271,17 +3498,19 @@ and the derived file cooking-units.sty.
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_cukeys_define_keys_and_single_key_aux:n}
+%
% \begin{macrocode}
\cs_new:Npn \@@_cukeys_define_keys_and_single_key_aux:n #1
{
- \prop_get:cVN
+ \prop_get:cVc
{ l_@@_cukeys_#1_prop }
\l_keys_choice_tl
- \l_tmpa_tl
- \tl_set:cV { l_@@_tmpa_ #1_tl } \l_tmpa_tl
+ { l_@@_tmpa_ #1_tl }
\prop_put:NnV \l_@@_change_unit_prop {#1} \l_keys_choice_tl
}
% \end{macrocode}
+% \end{macro}
%
%
% \begin{macrocode}
@@ -3323,18 +3552,12 @@ and the derived file cooking-units.sty.
% \begin{macrocode}
\cs_new:Npn \@@_cusinglekeys_create_key_prop:n #1
{
- \prop_clear:c { l_@@_cukeys_ #1 _prop }
\tl_set_eq:cN { l_@@_tmpa_ #1 _tl } \c_one_fp
% \tl_set:cn { l_@@_tmpa_ #1 _tl } { \c_one_fp }
+ \prop_set_eq:cN { l_@@_cukeys_ #1 _prop } \l_tmpa_prop
+ \prop_put:cnn { l_@@_cukeys_ #1 _prop } { Erstes Ding } {#1}
\prop_put:cnV { l_@@_cukeys_ #1 _prop } { Liste } \l_tmpa_clist
\prop_put:cnV { l_@@_cukeys_ #1 _prop } { prop } \l_tmpa_prop
- \prop_put:cnn { l_@@_cukeys_ #1 _prop } { Erstes Ding } {#1}
- \prop_map_inline:Nn \l_tmpa_prop
- {
- \prop_put:cnn { l_@@_cukeys_ #1 _prop }
- {##1}
- {##2}
- }
}
% \end{macrocode}
%
@@ -3370,7 +3593,7 @@ and the derived file cooking-units.sty.
%
% \section {Adding Keys}
%
-%
+% Question to me: Why do we need \cs{l_tmpa(b)_tl}?
% \begin{macrocode}
\NewDocumentCommand \cuaddkeys { m m }
{
@@ -3462,10 +3685,13 @@ and the derived file cooking-units.sty.
{ \clist_put_right:cn { l_@@_predefined_option_#2_clist } {##1} },
}
\prop_new:c { l_@@_cukeys_ #2 _prop }
+ \tl_new:c { l_@@_cu_unit_ #2 _tl }
\IfNoValueTF {#1}
{
+ \tl_set:cn { l_@@_cu_unit_ #2 _tl } {#2}
\newtranslation { #2 ( cu-unit ) } {#2}
}{
+ \tl_set:cn { l_@@_cu_unit_ #2 _tl } {#1}
\newtranslation { #2 ( cu-unit ) } {#1}
}
}
@@ -3482,6 +3708,7 @@ and the derived file cooking-units.sty.
\NewDocumentCommand \cutext { O{} m m }
{
\group_begin:
+ \bool_set_false:N \l_@@_cutext_uppercase_word_bool
\@@_cutext_default:nnn {#1} {#2} {#3}
\@@_cutext_print_correct_unitname:nn {#2} {#3}
\group_end:
@@ -3505,7 +3732,8 @@ and the derived file cooking-units.sty.
\cs_new:Npn \@@_cutext_default:nnn #1#2#3
{
\@@_error_if_unit_not_defined:n {#3}
- \keys_set:nn { cooking-units } {#1}
+ \tl_if_empty:nF {#1}
+ { \keys_set:nn { cooking-units } {#1} }
\bool_if:NT \l_@@_convert_to_eV_bool
{ \@@_convert_to_eV: }
\bool_if:NTF \l_@@_parse_input_bool
@@ -3515,7 +3743,6 @@ and the derived file cooking-units.sty.
{
\tl_replace_once:NVn \l_tmpb_tl \l_@@_input_range_sign_tl { \q_@@_range }
\@@_cutext_parse_range:Vn \l_tmpb_tl {#3}
-% \bool_set_true:N \l_@@_parse_range_bool
}{
\@@_cutext_print_nummerical_output:Nn \l_tmpb_tl {#3}
}
@@ -3544,7 +3771,7 @@ and the derived file cooking-units.sty.
% \begin{macrocode}
\cs_new:Npn \@@_cutext_just_print_number_correctly:N #1
{
- \translatelet \l_tmpa_tl { decimal-mark ( cu-unit name ) }
+ \translatelet \l_tmpa_tl { decimal-mark ( cu-unitname ) }
\tl_replace_once:NnV #1 { . } \l_tmpa_tl
\tl_replace_once:NnV #1 { - } \c_@@_minus_tl
#1
@@ -3608,10 +3835,10 @@ and the derived file cooking-units.sty.
% \begin{macrocode}
\NewDocumentCommand \cufrac { O{} m }
{
- \msg_error:nnnn { cooking-units } { obsolete-command } { \cufrac }
- { \cuam }
+ \msg_error:nnnn { cooking-units } { obsolete-command } { \cufrac } { \cuam }
\group_begin:
- \keys_set:nn { cooking-units } {#1}
+ \tl_if_empty:nF {#1}
+ { \keys_set:nn { cooking-units } {#1} }
\@@_cufrac:n {#2}
\group_end:
}
@@ -3670,11 +3897,14 @@ and the derived file cooking-units.sty.
% Replaces and extends \mycs{cufrac}.
% \begin{macro}{\cuam}
% \begin{macrcode}
-\NewDocumentCommand \cuam { O{} m }
+\NewDocumentCommand \cuam { s O{} m }
{
\group_begin:
- \keys_set:nn { cooking-units } {#1}
- \@@_cuam:n {#2}
+ \tl_if_empty:nF {#2}
+ { \keys_set:nn { cooking-units } {#2} }
+ \IfBooleanTF {#1}
+ { \@@_cuam_star:n {#3} }
+ { \@@_cuam_star:n {#3} }
\group_end:
}
% \end{macrcode}
@@ -3682,49 +3912,49 @@ and the derived file cooking-units.sty.
%
% \begin{macro}{\@@_cuam:n}
% \begin{macrocode}
-\cs_new:Npn \@@_cuam:n #1
+\cs_new:Npn \@@_cuam_star:n #1
{
\tl_set_rescan:Nnn \l_tmpa_tl
{
\char_set_catcode_letter:N \_ %
\char_set_catcode_ignore:N\ %
} {#1}
- \@@_cuam_parse:V \l_tmpa_tl
+ \@@_cuam_star_parse:V \l_tmpa_tl
}
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_cuam_parse:n #1
+\cs_new_protected:Npn \@@_cuam_star_parse:n #1
{
\tl_if_in:nVTF {#1} \l_@@_input_range_sign_tl
{
\tl_set:Nn \l_tmpa_tl {#1}
\tl_replace_once:NVn \l_tmpa_tl \l_@@_input_range_sign_tl { \q_@@_range }
- \@@_cuam_parse_range:V \l_tmpa_tl
+ \@@_cuam_star_parse_range:V \l_tmpa_tl
}{
\tl_if_in:nnTF {#1} { / }
{
\tl_if_in:nnTF {#1} { _ }
- { \@@_cuam_parse_mixed_frac:www #1 \q_stop }
- { \@@_cuam_parse_frac:ww #1 \q_stop }
+ { \@@_cuam_star_parse_mixed_frac:www #1 \q_stop }
+ { \@@_cuam_star_parse_frac:ww #1 \q_stop }
}{
\tl_if_in:nnTF {#1} { _ }
{ \msg_error:nnn { cooking-units } { missing-slash } {#1} }
- { \@@_cuam_parse_scale:n {#1} }
+ { \@@_cuam_star_parse_scale:n {#1} }
}
}
}
-\cs_generate_variant:Nn \@@_cuam_parse:n { V }
+\cs_generate_variant:Nn \@@_cuam_star_parse:n { V }
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new:Npn \@@_cuam_parse_range:n #1
+\cs_new:Npn \@@_cuam_star_parse_range:n #1
{
- \@@_cuam_parse_range_aux:ww #1 \q_nil
+ \@@_cuam_star_parse_range_aux:ww #1 \q_nil
}
-\cs_generate_variant:Nn \@@_cuam_parse_range:n { V }
-\cs_new:Npn \@@_cuam_parse_range_aux:ww #1 \q_@@_range #2 \q_nil
+\cs_generate_variant:Nn \@@_cuam_star_parse_range:n { V }
+\cs_new:Npn \@@_cuam_star_parse_range_aux:ww #1 \q_@@_range #2 \q_nil
{
#1 \l_@@_cunum_range_sign_tl #2
}
@@ -3732,16 +3962,16 @@ and the derived file cooking-units.sty.
%
%
% \begin{macrocode}
-\cs_new:Npn \@@_cuam_parse_scale:n #1 {#1}
+\cs_new:Npn \@@_cuam_star_parse_scale:n #1 {#1}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new:Npn \@@_cuam_parse_frac:ww #1/#2 \q_stop
+\cs_new:Npn \@@_cuam_star_parse_frac:ww #1/#2 \q_stop
{ \@@_frac:nn {#1} {#2} }
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new:Npn \@@_cuam_parse_mixed_frac:www #1_#2/#3 \q_stop
+\cs_new:Npn \@@_cuam_star_parse_mixed_frac:www #1_#2/#3 \q_stop
{
#1
\hbox_to_wd:nn { \l_@@_mixed_frac_dim } { }
@@ -3766,8 +3996,13 @@ and the derived file cooking-units.sty.
\cs_new:Npn \@@_cuname_parse_input:n #1
{
\peek_meaning_ignore_spaces:NTF [
- { \@@_cuname_parse_unit_symbol:nw {#1} }
- { \@@_cuname_parse_input_aux:nn {#1} }
+ {
+ \@@_cuname_parse_unit_symbol:nw {#1}
+ }{
+ \clist_if_in:NnTF \g_@@_allowed_unit_phrases_clist {#1}
+ { \@@_cuname_parse_input_aux:nn {#1} }
+ { \@@_cuname_parse_unit_symbol:nw {#1} [ \q_no_value ] }
+ }
}
% \end{macrocode}
%
@@ -3778,8 +4013,14 @@ and the derived file cooking-units.sty.
\quark_if_recursion_tail_stop_do:nn {#2}
{ \msg_error:nn { cooking-units } { missing-argument } }
\@@_error_if_unit_not_defined:n {#1}
-% \deftranslation [ to=\l_@@_language_tl ] { #1 ( cu-unit ) } {#2}
- \@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unit ) } {#2}
+ \quark_if_no_value:nTF {#2}
+ {
+ \@@_deftranslation:Vnv
+ \l_@@_language_tl { #1 ( cu-unit ) } { l_@@_cu_unit_ #1 _tl }
+ }
+ {
+ \@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unit ) } {#2}
+ }
\@@_cuname_parse_input_aux:nn {#1}
}
% \end{macrocode}
@@ -3793,7 +4034,6 @@ and the derived file cooking-units.sty.
{ \msg_error:nn { cooking-units } { missing-argument } }
\clist_if_in:NnF \g_@@_allowed_unit_phrases_clist {#1}
{ \@@_error_if_unit_not_defined:n {#1} }
-% \deftranslation [ to=\l_@@_language_tl ] { #1 (cu-unitname) } {#2}
\@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unitname ) } {#2}
\peek_meaning_ignore_spaces:NTF [
{ \@@_cuname_parse_bracket:nw {#1} }
@@ -3805,7 +4045,10 @@ and the derived file cooking-units.sty.
\cs_new:Npn \@@_cuname_parse_bracket:nw #1 [#2]
{
% \deftranslation [ to=\l_@@_language_tl ] { #1 ( cu-unitname pl ) } {#2}
- \@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unitname pl ) } {#2}
+ \clist_if_in:NnF \g_@@_allowed_unit_phrases_clist {#1}
+ {
+ \@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unitname pl ) } {#2}
+ }
\peek_meaning_ignore_spaces:NTF <
{ \@@_cuname_parse_arrows:nw {#1} }
{ \@@_cuname_parse_arrows:nw {#1} <m> }
@@ -3841,10 +4084,13 @@ and the derived file cooking-units.sty.
\quark_if_recursion_tail_stop:n {#1}
\quark_if_recursion_tail_stop_do:nn {#2}
{ \msg_error:nn { cooking-units } { missing-argument } }
- \clist_if_in:NnF \g_@@_allowed_unit_phrases_clist {#1}
- { \@@_error_if_unit_not_defined:n {#1} }
-% \deftranslation [ to=\l_@@_language_tl ] { #1 ( cu-unit ) } {#2}
- \@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unit ) } {#2}
+ \clist_if_in:NnTF \g_@@_allowed_unit_phrases_clist {#1}
+ {
+ \@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unitname ) } {#2}
+ }{
+ \@@_error_if_unit_not_defined:n {#1}
+ \@@_deftranslation:Vnn \l_@@_language_tl { #1 ( cu-unit ) } {#2}
+ }
\@@_cuprint_define_printed_unit:nn
}
% \end{macrocode}
@@ -4093,7 +4339,8 @@ and the derived file cooking-units.sty.
{ m } { m\`{e}tre } [ m\`{e}tres ]
{ dm } { d\'{e}cim\`{e}tre } [ d\'{e}cim\`{e}tres ]
{ cm } { centim\`{e}tre } [ centim\`{e}tres ]
- { mm } { millim\`{e}tre } [ millim\`{e}tre ]
+ { mm } { millim\`{e}tre } [ millim\`{e}tres ]
+ { in } [ po ] { pouce } [ pouces ]
% \end{macrocode}
% \begin{macrocode}
{ l } [ L ] { litre } [ litres ]