summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/diffcoeff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-01-01 22:50:44 +0000
committerKarl Berry <karl@freefriends.org>2019-01-01 22:50:44 +0000
commit98890e60b2f71ab52763c5ddeb6b68160de110c2 (patch)
treeb778a8eba370002f1d492f853cece1d95010ed9b /Master/texmf-dist/tex/latex/diffcoeff
parent866a54256a3e665b4272e65691b8ebe5c1f97fb6 (diff)
diffcoeff (1jan19)
git-svn-id: svn://tug.org/texlive/trunk@49571 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/diffcoeff')
-rw-r--r--Master/texmf-dist/tex/latex/diffcoeff/diffcoeff-doc.def19
-rw-r--r--Master/texmf-dist/tex/latex/diffcoeff/diffcoeff.sty446
2 files changed, 236 insertions, 229 deletions
diff --git a/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff-doc.def b/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff-doc.def
index 34a03b2c7f2..8b6b415acfa 100644
--- a/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff-doc.def
+++ b/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff-doc.def
@@ -108,14 +108,13 @@
subscr-nudge = -3 mu
}
-% partial, scriptstyle
-\diffdef { pscr }
+% partial, wide sep of terms
+\diffdef { pwide }
{
- op-symbol = \partial,
- op-order-sep = 0 mu ,
- denom-term-sep = 0 mu ,
- left-delim = \left ( ,
- right-delim = \right ),
- subscr-nudge = -3 mu
- }
-
+ op-symbol = \partial,
+ denom-term-sep = 3 mu ,
+ /-denom-term-sep = 3 mu ,
+ left-delim = \left ( ,
+ right-delim = \right ),
+ subscr-nudge = -6 mu
+ } \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff.sty b/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff.sty
index 65e09470687..63be1a33dbc 100644
--- a/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff.sty
+++ b/Master/texmf-dist/tex/latex/diffcoeff/diffcoeff.sty
@@ -9,7 +9,7 @@
%
\RequirePackage{expl3}
\RequirePackage{xparse,l3keys2e,xtemplate}
-\ProvidesExplPackage {diffcoeff} {2018/12/05} {2.1}
+\ProvidesExplPackage {diffcoeff} {2019/01/01} {3}
{Write differential coefficients consistently and easily.}
%
\keys_define:nn { diffcoeff }
@@ -23,15 +23,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_generate_variant:Nn \tl_if_eq:nnTF { nV }
-\tl_new:N \l__diffcoeff_op_tl
-\tl_new:N \l__diffcoeff_op_alt_tl
-\tl_new:N \l__diffcoeff_ldelim_tl
-\tl_new:N \l__diffcoeff_rdelim_tl
\tl_new:N \l__diffcoeff_oporder_tl
\tl_new:N \l__diffcoeff_differentiand_tl
\tl_new:N \l__diffcoeff_type_tl
-\tl_new:N \l__diffcoeff_order_spec_tl
-\tl_new:N \l__diffcoeff_denom_tl
\tl_new:N \l__diffcoeff_tot_order_tl
\tl_new:N \l__diffcoeff_curr_num_tl
\tl_new:N \l__diffcoeff_curr_var_tl
@@ -50,27 +44,16 @@
\bool_new:N \l__diffcoeff_op_left_bool
\bool_new:N \l__diffcoeff_single_var_bool
\bool_new:N \l__diffcoeff_opwrap_bool
+\bool_new:N \l__diffcoeff_integ_bool
+\int_new:N \l__diffcoeff_vars_int
\int_new:N \l__diffcoeff_format_int
\int_new:N \l__diffcoeff_curr_tok_int
\int_new:N \l__diffcoeff_curr_state_int
\int_new:N \l__diffcoeff_nos_int
\int_new:N \l__diffcoeff_parenvar_int
-\muskip_new:N \l__diffcoeff_oporder_muskip
-\muskip_new:N \l__diffcoeff_opnudge_muskip
-\muskip_new:N \l__diffcoeff_elbowrm_muskip
-\muskip_new:N \l__diffcoeff_subnudge_muskip
-\muskip_new:N \l__diffcoeff_varsep_muskip
-\muskip_new:N \l_tmpc_muskip
-\muskip_new:N \l_tmpd_muskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Derivatives
-% #1 order spec(seqvar)
-% #2 order override(tlvar)
-% #3 differentiand(tlvar)
-% #4 denominator(seqvar)
-% #5 subscript(tlvar)
\DeclareObjectType { derivative } { 5 }
% defaults: ordinary deriv. values
@@ -84,9 +67,10 @@
*-italic-nudge : muskip = 3 mu ,
*/-op-wrap : boolean = true ,
long-var-wrap : choice { dv, d(v), (dv) }
- = d(v) ,
+ = d(v) ,
denom-term-sep : muskip = 2 mu ,
/-denom-term-sep : muskip = 1 mu ,
+ term-sep-adjust : muskip = -1 mu ,
left-delim : tokenlist = \left . ,
right-delim : tokenlist = \right |,
elbowroom : muskip = 0 mu ,
@@ -94,9 +78,11 @@
/-left-delim : tokenlist = ( ,
/-right-delim : tokenlist = ) ,
/-elbowroom : muskip = 0 mu ,
- /-subscr-nudge : muskip = 0 mu
+ /-subscr-nudge : muskip = 0 mu
}
-
+% #1 order spec(seqvar); #2 order override(tlvar)
+% #3 differentiand(tlvar); #4 denominator(seqvar)
+% #5 subscript(tlvar)
\DeclareTemplateCode { derivative } { DERIV } { 5 }
{
op-symbol = \l__diffcoeff_op_tl ,
@@ -107,17 +93,18 @@
*-italic-nudge = \l__diffcoeff_opnudge_muskip ,
*/-op-wrap = \l__diffcoeff_opwrap_bool ,
long-var-wrap = {
- dv = \cs_set_eq:NN \__diffcoeff_wrap_longvars:NN
- \__diffcoeff_wrap_none:NN,
- d(v) = \cs_set_eq:NN \__diffcoeff_wrap_longvars:NN
- \__diffcoeff_wrap_var:NN ,
- (dv) = \cs_set_eq:NN \__diffcoeff_wrap_longvars:NN
- \__diffcoeff_wrap_dvar:NN,
- unknown = \cs_set_eq:NN \__diffcoeff_wrap_longvars:NN
- \__diffcoeff_wrap_var:NN
+ dv = \cs_set:Npn \__diffcoeff_wrap_longvars:nn #1#2
+ { \l__diffcoeff_op_alt_tl {#2}^{#1} },
+ d(v) = \cs_set:Npn \__diffcoeff_wrap_longvars:nn #1#2
+ { \l__diffcoeff_op_alt_tl {(#2)}^{#1} },
+ (dv) = \cs_set:Npn \__diffcoeff_wrap_longvars:nn #1#2
+ { (\l__diffcoeff_op_alt_tl {#2)}^{#1} },
+ unknown = \cs_set:Npn \__diffcoeff_wrap_longvars:nn #1#2
+ { \l__diffcoeff_op_alt_tl {(#2)}^{#1} }
} ,
denom-term-sep = \l__diffcoeff_varsep_muskip ,
/-denom-term-sep = \l_tmpb_muskip ,
+ term-sep-adjust = \l__diffcoeff_sep_adj_muskip ,
left-delim = \l__diffcoeff_ldelim_tl ,
right-delim = \l__diffcoeff_rdelim_tl ,
elbowroom = \l__diffcoeff_elbowrm_muskip ,
@@ -129,9 +116,13 @@
}
{
\AssignTemplateKeys
- \int_compare:nNnT { \l__diffcoeff_format_int } > { 1 }
- { \__diffcoeff_slash_vals: }
- \__diffcoeff_build:NNNNN #1#2#3#4#5
+
+ \bool_if:NF\l__diffcoeff_integ_bool
+ {
+ \int_compare:nNnT { \l__diffcoeff_format_int } > { 1 }
+ { \__diffcoeff_slash_vals: }
+ \__diffcoeff_build:NNNNN #1#2#3#4#5
+ }
}
%%%%%%%%%%
\cs_new:Npn \__diffcoeff_slash_vals:
@@ -150,9 +141,13 @@
\exp_args:NV\tl_if_novalue:nF #5
{ \l__diffcoeff_ldelim_tl \mkern \l__diffcoeff_elbowrm_muskip }
\bool_if:NTF \l__diffcoeff_single_var_bool
- { \__diffcoeff_single:NNN #2 #3 #4 }
{
- \seq_mapthread_function:NNN #1 #4 \__diffcoeff_map_orders:nn
+ \tl_set:Nx \l_tmpa_tl { \seq_use:Nn #4 { , } }
+ \__diffcoeff_single:NNN #2 #3 \l_tmpa_tl
+ }
+ {
+ \int_zero:N \l_tmpa_int
+ \seq_mapthread_function:NNN #1 #4 \__diffcoeff_map_orders:nn
\__diffcoeff_mixed:NNN #2 #3 \l__diffcoeff_denom_seq
}
\exp_args:NV\tl_if_novalue:nF #5
@@ -166,8 +161,8 @@
}
}
%%%%%%%%%%%%%%%%%%%%
-% (ptl) form denom from #1 orders, & #2 vars, seqs
-\cs_new:Npn \__diffcoeff_map_orders:nn #1#2
+% (ptl) form denom from #1 orders seq & #2 vars seq
+\cs_new_protected:Npn \__diffcoeff_map_orders:nn #1#2
{
\tl_if_eq:nnTF { #1 } { 1 }
{ \seq_put_right:Nn \l__diffcoeff_denom_seq { \l__diffcoeff_op_alt_tl #2 } }
@@ -178,12 +173,12 @@
{ \l__diffcoeff_op_alt_tl #2^{ #1 } }
}
{
- \seq_put_right:Nx \l__diffcoeff_denom_seq
- { \__diffcoeff_wrap_longvars:NN { #1 } { #2 } }
+ \seq_put_right:Nn \l__diffcoeff_denom_seq
+ { \__diffcoeff_wrap_longvars:nn { #1\vphantom{)} } { #2 } }
}
}
}
-% #1 order(tlvar) ; #2 diff'iand(tlvar); % #3 denom(tlvar)
+% #1 order(tlvar) ; #2 diff'iand(tlvar); #3 denom(tlvar)
\cs_new:Npn \__diffcoeff_single:NNN #1#2#3
{
\__diffcoeff_numer:N { #1 }
@@ -192,19 +187,35 @@
\l__diffcoeff_differentiand_tl
{ \__diffcoeff_denom_single:NN #1 #3 }
}
-% #1 total order
-% #2 differentiand
-% #3 denominator seq
-\cs_new:Npn \__diffcoeff_mixed:NNN #1#2#3
+% #1 total order; #2 differentiand; #3 denom seq
+\cs_new_protected:Npn \__diffcoeff_mixed:NNN #1#2#3
{
\__diffcoeff_numer:N #1
\__diffcoeff_form_deriv:NNn
\l__diffcoeff_oporder_tl
\l__diffcoeff_differentiand_tl
- { \seq_use:Nn #3 { \mskip \l__diffcoeff_varsep_muskip } }
+ { \__diffcoeff_denom_sep:N #3 }
+ }
+\cs_new:Npn \__diffcoeff_denom_sep:N #1
+ {
+ \int_zero:N \l_tmpa_int
+ \seq_map_inline:Nn #1
+ {
+ \int_incr:N \l_tmpa_int ##1
+ \int_compare:nNnT { \l_tmpa_int } < { \l__diffcoeff_vars_int }
+ {
+ \seq_pop:NN \l__diffcoeff_orders_seq \l_tmpa_tl
+ \str_if_eq:VnTF \l_tmpa_tl { 1 }
+ { \mkern \l__diffcoeff_varsep_muskip }
+ {
+ \mkern \muskip_eval:n { \l__diffcoeff_varsep_muskip +
+ \l__diffcoeff_sep_adj_muskip }
+ }
+ }
+ }
}
% #1(tl) total order
-\cs_new:Npn \__diffcoeff_numer:N #1
+\cs_new_protected:Npn \__diffcoeff_numer:N #1
{
\bool_if:NTF \l__diffcoeff_op_left_bool
{
@@ -222,23 +233,16 @@
{ \tl_put_right:Nn \l__diffcoeff_oporder_tl { \hfill } }
}
% #1 order; #2 var
-\cs_new:Npn \__diffcoeff_denom_single:NN #1#2
+\cs_new_protected:Npn \__diffcoeff_denom_single:NN #1#2
{
\tl_if_eq:nVTF { 1 } #1
{ \l__diffcoeff_op_alt_tl #2 }
{
\int_compare:nNnTF { \tl_count:N #2 } = { 1 }
{ \l__diffcoeff_op_alt_tl #2^{ #1 } }
- { \__diffcoeff_wrap_longvars:NN #1 #2 }
+ { \__diffcoeff_wrap_longvars:nn { #1\vphantom) } { #2 } }
}
}
-\cs_new:Npn \__diffcoeff_wrap_none:NN #1#2
- { \l__diffcoeff_op_alt_tl #2^{#1} }
-\cs_new:Npn \__diffcoeff_wrap_var:NN #1#2
- { \l__diffcoeff_op_alt_tl (#2)^{#1} }
-\cs_new:Npn \__diffcoeff_wrap_dvar:NN #1#2
- { (\l__diffcoeff_op_alt_tl #2)^{#1} }
-
% #1 op+order; #2 diff'iand; #3 denom
% 0 frac; 1 frac append; 2 slash ; 3 slash append
\cs_new:Npn \__diffcoeff_form_deriv:NNn #1#2#3
@@ -252,112 +256,60 @@
{ 4 } { #1 / #3 { #2 } }
}
}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% create new instances or edit existing ones
-% #1 = name; #2 = key-value list
-\NewDocumentCommand \diffdef { > { \TrimSpaces } m m }
- {
- \tl_if_empty:nTF { #1 }
- {
- \EditTemplateDefaults { derivative }
- { DERIV } { #2 }
- \EditInstance { derivative } { ord } { #2 }
- }
- {
- \IfInstanceExistTF { derivative } { ord.#1 }
- { \EditInstance { derivative } { ord.#1 } { #2 } }
- {
- \DeclareInstance { derivative } { ord.#1 }
- { DERIV } { #2 }
- }
- }
- }
-% superseded relic from version 1
-\NewDocumentCommand \diffset { o }
- { \msg_warning:nn { diffcoeff } { obsolete } }
-
-% ordinary
-\DeclareInstance { derivative } { ord } { DERIV } { }
-\bool_if:NTF \g__diffcoeff_ISO_bool
- {
- \diffdef {}
- {
- op-symbol = \mathrm{d},
- op-order-sep = 0 mu ,
- left-delim = \left ( ,
- right-delim = \right ) ,
- subscr-nudge = -6 mu
- }
- \diffdef { D } { op-symbol = \mathrm{D} }
- }
- { \diffdef { D } { op-symbol = D } }
-
-% partial
-\diffdef { p }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% differential
+% #1 = space before d (0--9); mu is assumed
+\NewDocumentCommand \dl { d.. m }
{
- op-symbol = \partial ,
- left-delim = \left ( ,
- right-delim = \right ) ,
- subscr-nudge = -6 mu
- }
-\NewDocumentCommand \diffp { } { \diff.p. }
-
-\diffdef { delta }
- {
- op-symbol = \delta ,
- op-order-sep = 0 mu
- }
-\diffdef { Delta }
- {
- op-symbol = \Delta ,
- op-order-sep = 0 mu
+ \group_begin:
+ \bool_set_true:N \l__diffcoeff_integ_bool
+ \bool_set_true:N \l__diffcoeff_single_var_bool
+ \seq_set_from_clist:Nn \l__diffcoeff_orders_seq { 1 }
+ \tl_set:Nn \l__diffcoeff_tot_order_tl { 1 }
+ \IfValueT { #1 } { \tl_set:Nn \l__diffcoeff_type_tl { .#1 } }
+ \UseInstance { derivative } { ord\l__diffcoeff_type_tl }
+ \l__diffcoeff_orders_seq \l__diffcoeff_tot_order_tl
+ \c_empty_tl \c_empty_seq \c_empty_tl
+ \tl_if_in:NnTF \c__diffcoeff_digits_tl { #2 }
+ { \mkern #2 mu \l__diffcoeff_op_tl }
+ { \l__diffcoeff_op_tl #2 }
+ \group_end:
}
-% for compatibility with version 1
-\NewDocumentCommand \Diff { } { \diff.D. }
-\NewDocumentCommand \diffd { } { \diff.delta. }
-\NewDocumentCommand \Diffd { } { \diff.Delta. }
-
-% user-defined variants
-\file_if_exist:nT { \g__diffcoeff_def_tl.def }
- { \file_input:n { \g__diffcoeff_def_tl.def } }
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand \negmu {} { \mkern -1 mu }
+\NewDocumentCommand \nilmu {} { \mkern 0 mu }
+\NewDocumentCommand \onemu {} { \mkern 1 mu }
+\NewDocumentCommand \twomu {} { \mkern 2 mu }
% derivative
-% #1(tl) = name of variant
-% #2(*) = append differentiand boolean
-% #3(clist) = orders of diff. in each var.
-% #4(tl) = order override
-% #5(tl) = differentiand
-% #6 ( / ) = slash boolean
-% #7(clist) = vars of diff. in order
-% #8(tl) = pt of eval./vars held constant
-% #9(tl) = #8 for backwards compatibility
+% #1(tl) = name of variant; #2(*)= append diff'iand boolean
+% #3(clist) = orders of diff. in each var.; #4(tl) = order override
+% #5(tl) = diff'iand; #6( / ) = slash boolean
+% #7(clist) = vars of diff.; #8(tl) = pt of eval./vars held const
+% #9(tl) = as #8 (for backwards compat)
\NewDocumentCommand \diff{ d.. s O{1} o m t/ m !O{#9} g }
{
\group_begin:
\tl_set:Nn \l__diffcoeff_differentiand_tl { #5 }
\tl_set:Nn \l__diffcoeff_trailing_tl { #8 }
-
- \tl_set:Nn \l__diffcoeff_denom_tl { #7 }
- \seq_set_split:Nnn \l__diffcoeff_vars_seq { , } { #7 }
-
+ \seq_set_from_clist:Nn \l__diffcoeff_vars_seq { #7 }
\seq_set_from_clist:Nn \l__diffcoeff_orders_seq { #3 }
- \tl_set:Nn \l__diffcoeff_order_spec_tl { [#3] }
-
- \int_set:Nn \l_tmpa_int { \seq_count:N \l__diffcoeff_vars_seq }
+ \int_set:Nn \l__diffcoeff_vars_int
+ { \seq_count:N \l__diffcoeff_vars_seq }
\int_set:Nn \l_tmpb_int { \seq_count:N \l__diffcoeff_orders_seq }
- \int_compare:nNnTF { \l_tmpa_int } = { 1 }
+
+ \int_compare:nNnTF { \l__diffcoeff_vars_int } = { 1 }
{ \bool_set_true:N \l__diffcoeff_single_var_bool }
{
- \int_compare:nNnTF { \l_tmpa_int } < { \l_tmpb_int }
+ \int_compare:nNnTF { \l__diffcoeff_vars_int } < { \l_tmpb_int }
{
- \msg_error:nnxx { diffcoeff } { numbers-conflict }
- { \int_use:N \l_tmpa_int } { \int_use:N \l_tmpb_int }
+ \msg_error:nnxxxx { diffcoeff } { numbers-conflict }
+ { \int_use:N \l__diffcoeff_vars_int } { \int_use:N \l_tmpb_int }
+ { \seq_use:Nn \l__diffcoeff_orders_seq { , } }
+ { \seq_use:Nn \l__diffcoeff_vars_seq { , } }
}
{ % pad orders seq if nec.
\int_step_inline:nnnn
- { 1 + \l_tmpb_int } { 1 } { \l_tmpa_int }
+ { 1 + \l_tmpb_int } { 1 } { \l__diffcoeff_vars_int }
{ \seq_put_right:Nn \l__diffcoeff_orders_seq { 1 } }
- \tl_set:NV \l__diffcoeff_denom_tl \l__diffcoeff_vars_seq
}
}
% override/calc total order
@@ -381,7 +333,7 @@
\l__diffcoeff_orders_seq
\l__diffcoeff_tot_order_tl
\l__diffcoeff_differentiand_tl
- \l__diffcoeff_denom_tl
+ \l__diffcoeff_vars_seq
\l__diffcoeff_trailing_tl
\group_end:
} % end of \diff
@@ -414,7 +366,7 @@
{ \tl_clear:N \l__diffcoeff_nos_tl }
}
% #1 curr tok (tl); #2 <== curr tok ndx (int)
-\cs_new:Npn \__diffcoeff_get_curr_ndx:nN #1#2
+\cs_new_protected:Npn \__diffcoeff_get_curr_ndx:nN #1#2
{
\tl_if_in:NnTF \c__diffcoeff_digits_tl { #1 }
{ \int_set:Nn #2 { 1 } } % digit
@@ -446,9 +398,9 @@
}
% transitions from the signed state
% #1(tl) curr tok; #2(int) 0, curr state; #3 curr tok ndx
-\cs_new:Npn \__diffcoeff_sgn_transitions:nNN #1#2#3
+\cs_new_protected:Npn \__diffcoeff_sgn_transitions:nNN #1#2#3
{
- \int_case:nnTF { #3 }
+ \int_case:nnT { #3 }
{
{ 0 } % tok = s
{
@@ -472,27 +424,31 @@
}
}
{ \int_set_eq:NN #2 #3 }
- {
- \msg_error:nnxxx { diffcoeff } { order-specification }
- { \l__diffcoeff_order_spec_tl } { #1 } { sign }
- }
}
% transitions from the numeric state
% #1 = curr. tok.; #2 = 0, curr. state; #3 curr. tok. index
-\cs_new:Npn \__diffcoeff_num_transitions:nNN #1#2#3
+\cs_new_protected:Npn \__diffcoeff_num_transitions:nNN #1#2#3
{
- \int_case:nnTF { #3 }
+ \int_case:nnT { #3 }
{
{ 0 } % tok = s
{
- \__diffcoeff_store_num:NNN \l__diffcoeff_nos_tl
- \l__diffcoeff_paren_tl \l__diffcoeff_curr_num_tl
+ \tl_put_right:NV\l__diffcoeff_nos_tl
+ { \l__diffcoeff_paren_tl * \l__diffcoeff_curr_num_tl }
\tl_set:Nn \l__diffcoeff_curr_num_tl { #1 }
}
{ 1 } % tok = d
{ \tl_put_right:Nn \l__diffcoeff_curr_num_tl { #1 } }
{ 2 } % tok = v
- { \tl_set:Nn \l__diffcoeff_curr_var_tl { #1 } }
+ {
+ \tl_if_in:nnTF { ^ \times * / \div } { #1 }
+ {
+ \msg_error:nnxxx { diffcoeff } { order-specification }
+ { \seq_use:Nn \l__diffcoeff_orders_seq { , } }
+ { #1 } { number }
+ }
+ { \tl_set:Nn \l__diffcoeff_curr_var_tl { #1 } }
+ }
{ 3 } % tok = (
{
\seq_push:NV \l__diffcoeff_paren_seq \l__diffcoeff_paren_tl
@@ -503,22 +459,18 @@
}
{ 4 } % tok = )
{
- \__diffcoeff_store_num:NNN \l__diffcoeff_nos_tl
- \l__diffcoeff_paren_tl \l__diffcoeff_curr_num_tl
+ \tl_put_right:NV \l__diffcoeff_nos_tl
+ { \l__diffcoeff_paren_tl * \l__diffcoeff_curr_num_tl }
}
}
{
\int_set_eq:NN #2 #3 }
- {
- \msg_error:nnxxx { diffcoeff } { order-specification }
- { \l__diffcoeff_order_spec_tl } { #1 } { number }
- }
}
% transitions from the algebraic state
% #1 = curr. tok.; #2 = 2, curr. state; #3 curr. tok. index
\cs_new:Npn \__diffcoeff_alg_transitions:nNN #1#2#3
{
- \int_case:nnTF { #3 }
+ \int_case:nnT { #3 }
{
{ 0 } % tok = s
{
@@ -563,11 +515,6 @@
}
}
{ \int_set_eq:NN #2 #3 }
- {
- \msg_error:nnxxx { diffcoeff } { order-specification }
- { \l__diffcoeff_order_spec_tl } { #1 }
- { variable }
- }
}
% transitions from the ) state
% #1 = curr. tok.; #2 = 4, curr. state; #3 curr. tok. index
@@ -581,64 +528,40 @@
}
{
\msg_error:nnxxx { diffcoeff } { order-specification }
- { \l__diffcoeff_order_spec_tl } { #1 } { ) }
+ { \seq_use:Nn \l__diffcoeff_orders_seq { , } } { #1 } { ) }
}
}
-% #1=store (tlvar); #2=num. coeff. (tlvar); #3=num.(tlvar)
-\cs_new:Npn \__diffcoeff_store_num:NNN #1#2#3
- {
- \tl_put_right:NV #1 #2
- \tl_put_right:Nn #1 { * }
- \tl_put_right:NV #1 #3
- }
% #1 is var. (tlvar); #2 is num. (tlvar); #3 num. coeff. (tlvar)
\cs_new:Npn \__diffcoeff_store_var:NNN #1#2#3
{
\prop_get:NVNF \l__diffcoeff_vars_prop #1 \l_tmpa_tl
{ \tl_clear:N \l_tmpa_tl }
- \__diffcoeff_store_num:NNN \l_tmpa_tl #2 #3
+ \tl_put_right:NV \l_tmpa_tl { #2 * #3 }
\prop_put:NVV \l__diffcoeff_vars_prop #1 \l_tmpa_tl
}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% #1 (prop) vars (keys) & coeffs (vals); #2 total order
-\cs_new:Npn \__diffcoeff_evaluate:NN #1#2
- {
- \prop_map_inline:Nn #1
- {
- \int_compare:nNnF { \int_eval:n { ##2 } } = { 0 }
- {
- \seq_put_right:Nx \l_tmpa_seq
- { { +\int_eval:n { ##2 } } { ##1 } }
- }
- }
+% #1 (propv) key=var, val=coeff; #2 <= total order
+\cs_new_protected:Npn \__diffcoeff_evaluate:NN #1#2
+ {
+ \prop_map_inline:Nn #1 { \seq_put_left:Nn \l_tmpa_seq { ##1 } }
\seq_sort:Nn \l_tmpa_seq
{
- \int_compare:nNnTF
- { \tl_count:V { \use_ii:nn ##1 } } <
- { \tl_count:V { \use_ii:nn ##2 } }
- { \sort_return_swapped: }
- { \sort_return_same: }
+ \int_compare:nNnTF { \tl_count:n { ##1 } } < { \tl_count:n { ##2 } }
+ { \sort_return_same: } { \sort_return_swapped: }
}
- \tl_set:Nx \l_tmpa_tl { \seq_use:Nn \l_tmpa_seq { } }
- \seq_set_split:NnV \l_tmpa_seq {} \l_tmpa_tl
- \tl_clear:N \l_tmpa_tl
\seq_map_inline:Nn \l_tmpa_seq
- {
- \tl_if_eq:nnTF { +-1 } { ##1 }
- { \tl_put_right:Nn \l_tmpa_tl { - } }
- {
- \tl_if_eq:nnTF { +1 } { ##1 }
- { \tl_put_right:Nn \l_tmpa_tl { + } }
- { \tl_put_right:Nn \l_tmpa_tl { ##1 } }
- }
- }
- \tl_replace_all:Nnn \l_tmpa_tl { +- } { - }
+ {
+ \prop_pop:NnN #1 { ##1 } \l_tmpb_tl
+ \seq_put_right:Nx \l_tmpb_seq { \int_eval:n \l_tmpb_tl }
+ }
+ \tl_clear:N \l_tmpa_tl
+ \seq_mapthread_function:NNN \l_tmpa_seq \l_tmpb_seq
+ \__diffcoeff_tot_order:nn
\exp_args:NV \tl_if_head_eq_charcode:nNTF \l_tmpa_tl +
{
+ \tl_set:Nx \l_tmpb_tl { \tl_tail:N \l_tmpa_tl }
\int_compare:nNnT { \l__diffcoeff_nos_int } > { 0 }
{ \tl_put_left:Nn \l__diffcoeff_nos_tl { + } }
- \tl_set:Nx \l_tmpb_tl { \tl_tail:N \l_tmpa_tl }
- \tl_concat:NNN #2 \l_tmpb_tl \l__diffcoeff_nos_tl
+ \tl_concat:NNN #2 \l_tmpb_tl \l__diffcoeff_nos_tl
}
{
\int_compare:nNnTF { \l__diffcoeff_nos_int } > { 0 }
@@ -647,6 +570,92 @@
}
\tl_set_rescan:Nno #2 { } #2
}
+\cs_new:Npn \__diffcoeff_tot_order:nn #1#2
+ {
+ \int_compare:nNnTF { #2 } > { 0 }
+ {
+ \int_compare:nNnTF { #2 } = { 1 }
+ { \tl_put_left:Nn \l_tmpa_tl { +#1 } }
+ { \tl_put_left:Nn \l_tmpa_tl { +#2#1 } }
+ }
+ {
+ \int_compare:nNnT { #2 } < { 0 }
+ {
+ \int_compare:nNnTF { #2 } = { -1 }
+ { \tl_put_right:Nn \l_tmpa_tl { -#1 } }
+ { \tl_put_right:Nn \l_tmpa_tl { #2#1 } }
+ }
+ }
+ }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% create new instances or edit existing ones
+% #1 = name; #2 = key-value list
+\NewDocumentCommand \diffdef { > { \TrimSpaces } m m }
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \EditTemplateDefaults { derivative }
+ { DERIV } { #2 }
+ \EditInstance { derivative } { ord } { #2 }
+ }
+ {
+ \IfInstanceExistTF { derivative } { ord.#1 }
+ { \EditInstance { derivative } { ord.#1 } { #2 } }
+ {
+ \DeclareInstance { derivative } { ord.#1 }
+ { DERIV } { #2 }
+ }
+ }
+ }
+% relic from version 1
+\NewDocumentCommand \diffset { o }
+ { \msg_warning:nn { diffcoeff } { obsolete } }
+
+% ordinary & D
+\DeclareInstance { derivative } { ord } { DERIV } { }
+\bool_if:NTF \g__diffcoeff_ISO_bool
+ {
+ \diffdef {}
+ {
+ op-symbol = \mathrm{d},
+ op-order-sep = 0 mu ,
+ left-delim = \left ( ,
+ right-delim = \right ) ,
+ subscr-nudge = -6 mu
+ }
+ \diffdef { D } { op-symbol = \mathrm{D} }
+ }
+ { \diffdef { D } { op-symbol = D } }
+
+% partial
+\diffdef { p }
+ {
+ op-symbol = \partial ,
+ left-delim = \left ( ,
+ right-delim = \right ) ,
+ subscr-nudge = -6 mu
+ }
+\NewDocumentCommand \diffp { } { \diff.p. }
+
+% delta
+\diffdef { delta }
+ {
+ op-symbol = \delta ,
+ op-order-sep = 0 mu
+ }
+\diffdef { Delta }
+ {
+ op-symbol = \Delta ,
+ op-order-sep = 0 mu
+ }
+% for compatibility with version 1
+\NewDocumentCommand \Diff { } { \diff.D. }
+\NewDocumentCommand \diffd { } { \diff.delta. }
+\NewDocumentCommand \Diffd { } { \diff.Delta. }
+
+% user-defined
+\file_if_exist:nT { \g__diffcoeff_def_tl.def }
+ { \file_input:n { \g__diffcoeff_def_tl.def } }
%%%%%%%%%%%%%%%%%%%%
% Jacobian
\NewDocumentCommand \jacob { m t/ m }
@@ -657,23 +666,22 @@
{ \frac{ \partial(#1) } { \partial(#3) } }
\group_end:
}
-%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%
% messages
\msg_new:nnn { diffcoeff } { order-specification }
{
- Is~this~intended:~#3~followed~by~#2~in~the~order~
- specification~#1~\msg_line_context:?~Diffcoeff~cannot~calculate~
- the~overall~order~of~differentiation~in~this~case.~
- Use~the~order-override~option~to~enter~the~overall~order.
+ #3~followed~by~#2~in~the~order~specification~[#1]~\msg_line_context:.~
+ Diffcoeff~cannot~calculate~the~overall~order~of~differentiation~in~
+ this~case.~Use~the~order-override~option~to~enter~the~overall~order.
}
\msg_new:nnn { diffcoeff } { obsolete }
{
- Obsolete~command:~\diffset has~been~superseded~by~the~\diffdef\
+ Obsolete~command:~\diffset is~superseded~by~the~\diffdef\
command.~\msg_see_documentation_text:n { diffcoeff }
}
\msg_new:nnn { diffcoeff } { numbers-conflict }
{
- #2~orders~specified~for~#1~variables;~\l__diffcoeff_order_spec_tl
- \ (\msg_line_context:)~for~variables~\l__diffcoeff_denom_tl.
+ #2~orders~of~differentiation~specified~for~#1~variables;~
+ orders~[#3]\ (\msg_line_context:)~for~variables~#4.
}
% end of file diffcoeff.sty \ No newline at end of file