summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/xassoccnt
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-03-04 23:13:23 +0000
committerKarl Berry <karl@freefriends.org>2017-03-04 23:13:23 +0000
commit7bd517903406aa8d487340f84350c10826ff5e54 (patch)
tree2a5c6a5c16afd9f96e3b1f6e3f4582255930fcfa /Master/texmf-dist/tex/latex/xassoccnt
parente59da762242ab80e65849560ed7777e46ddd77da (diff)
xassoccnt (4mar17)
git-svn-id: svn://tug.org/texlive/trunk@43396 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/xassoccnt')
-rw-r--r--Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty195
1 files changed, 171 insertions, 24 deletions
diff --git a/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty b/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty
index 47f1da6ae8c..26f22e893f1 100644
--- a/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty
+++ b/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty
@@ -1,9 +1,9 @@
-%% LaTeX package xassoccnt - version 1.1 (2016/10/29 -- 13:34:52)
+%% LaTeX package xassoccnt - version 1.2 (2017/03/04 -- 00:46:43)
%% Source file for xassoccnt.sty
%%
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2015 -- 2016 by Dr. Christian Hupfer <typography dot with dot latex at gmail dot com>
+%% Copyright (c) 2015 -- 2017 by Dr. Christian Hupfer <typography dot with dot latex at gmail dot com>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -19,10 +19,12 @@
%%
%%
-\def\xassoccntpackageversion{1.1}
+\def\xassoccntpackageversion{1.2}
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{xassoccnt}[2016/10/29 - v\xassoccntpackageversion]
+\ProvidesPackage{xassoccnt}[2017/03/04 - v\xassoccntpackageversion]
+\RequirePackage{etoolbox}
+\RequirePackage{letltxmacro}
\RequirePackage{xcolor}
\RequirePackage{xparse}
\RequirePackage{l3keys2e}
@@ -35,6 +37,8 @@
% Some variants of standard expl3 contributions
+\cs_generate_variant:Nn \seq_set_from_clist:Nn { Nx, cx }
+
\cs_generate_variant:Nn \seq_remove_all:Nn { cV, NV }
\cs_generate_variant:Nn \seq_gremove_all:Nn { cV, NV }
\cs_generate_variant:Nn \seq_gput_right:cn {cx}
@@ -47,6 +51,7 @@
% First some local or global values
\bool_new:N \l__xassoccnt_hyperrefpackage_loaded_bool
+\bool_new:N \l__xassoccnt_cleverefpackage_loaded_bool
\ifexplversionnew
\str_const:Nn \c__xassoccnt_modulename_str {xassoccnt}
@@ -122,8 +127,10 @@
\prop_new:N \g_xassoccnt_module_data_prop
-\prop_put:Nnn \g_xassoccnt_module_data_prop {scratchname} {scratch}
-\prop_put:Nnn \g_xassoccnt_module_data_prop {backupfeaturename} {backupcounters}
+\prop_gput:Nnn \g_xassoccnt_module_data_prop {scratchname} {scratch}
+\prop_gput:Nnn \g_xassoccnt_module_data_prop {backupfeaturename} {backupcounters}
+
+\prop_gput:Nnn \g_xassoccnt_module_data_prop {prefix-sep} {::}
\cs_new:Nn \xassoccnt_extract_moduledata:n {%
\prop_item:Nn \g_xassoccnt_module_data_prop {#1}
@@ -194,6 +201,7 @@
supertotal .bool_set:N={\l__xassoccnt_is_supertotalcounter_bool },
resetbackup .bool_set:N={\l__xassoccnt_resetbackupcounters_bool },
+ redefinelabel .bool_set:N= { \g__xassoccnt_redefinelabel_bool }
}
@@ -213,7 +221,7 @@
}
-\keys_set:nn{xassoccnt}{nonumberofruns}
+\keys_set:nn{xassoccnt}{nonumberofruns, redefinelabel=true}
\ProcessKeysOptions{xassoccnt}
@@ -449,10 +457,14 @@
% Needed for Backup/Restore features
-\AtBeginDocument{%
+%\AtBeginDocument{%
+\AtEndPreamble{
\@ifpackageloaded{hyperref}{%
- \bool_set_true:N \l__xassoccnt_hyperrefpackage_loaded_bool%
+ \bool_gset_true:N \l__xassoccnt_hyperrefpackage_loaded_bool%
}{}%
+ \@ifpackageloaded{cleveref}{%
+ \bool_gset_true:N \l__xassoccnt_cleverefpackage_loaded_bool%
+ }{}
}
@@ -465,7 +477,7 @@
}{}
\AtEndOfPackage{
- \PackageInfo{xassoccnt}{2016/10/29 - v\xassoccntpackageversion -- stepping counters simultaneously and other features}
+ \PackageInfo{xassoccnt}{2017/03/04 - v\xassoccntpackageversion -- stepping counters simultaneously and other features}
\@ifpackageloaded{calc}{%
\msg_warning:nnn{xassoccnt}{incompatiblepackagenonfatal}{calc}% Warning
\bool_set_true:N \l__xassoccnt_calcpackage_loaded
@@ -724,7 +736,8 @@
-\cs_new:Nn \xassoccnt_declareassociatedcounters:nnn {%
+
+\cs_new:Nn \xassoccnt_declareassociatedcounters_old:nnn {%
\__xassoccnt_container_if_in:cnTF{\__xassoccnt_generate_countercontainername:n{\c_xassoccnt_mastername_str}:}{#2}{%
% Not contained in the driver counter list
\__xassoccnt_addassociatedcounters:nnn{#1}{#2}{#3}%
@@ -745,6 +758,25 @@
+\cs_new:Nn \xassoccnt_declareassociatedcounters:nnn {%
+ \__xassoccnt_container_if_in:cnTF{\__xassoccnt_generate_countercontainername:n{\c_xassoccnt_mastername_str}:}{#2}{%
+ % Not contained in the driver counter list
+ \__xassoccnt_addassociatedcounters:nnn{#1}{#2}{#3}%
+ }{%
+ % Check first if there is a potential cross association
+ \__xassoccnt_adddrivercounter:nn{#1}{#2}%
+ \xassoccnt_is_associatedtocounter:nnTF{#3}{#2}{%
+ \msg_fatal:nnnn{xassoccnt}{crossassociation}{#2}{#3}% Fatal message
+ % Not necessary unless the fatal message above is removed
+ \__xassoccnt_container_removecounter:cn{\__xassoccnt_generate_countercontainername:n{\c_xassoccnt_mastername_str}:}{#2}
+ }{% No, we don't try to cross-associate two counters
+ \__xassoccnt_addassociatedcounters:nnn{#1}{#2}{#3}%
+ }%
+ }%
+ \__xassoccnt_container_removeduplicates:n{\__xassoccnt_drivercontainer:n{#2}}
+ \__xassoccnt_autodefine_drivercounter:nn { }{#2}
+}
+
\prg_new_conditional:Nnn \xassoccnt_is_drivercounter:n {T,F,TF}
@@ -823,6 +855,13 @@
\seq_map_inline:cn {\__xassoccnt_drivercontainer:n{#2}} { \__xassoccnt_container_removecounter:nn{\c_xassoccnt_associatedname_str}{##1} }% Remove from associated list container
\__xassoccnt_container_gclear:c {\__xassoccnt_drivercontainer:n{#2} }
}
+
+
+
+
+
+
+
%%%%%%%%%%%%%%%%%%%%% User interface routines
@@ -2299,7 +2338,7 @@
\RenewDocumentCommand{\refstepcounter}{m}{%
\seq_if_in:NxF \g_xassoccnt_suspendedcnt_seq {#1} {%
- \cs_gset_nopar:Nn \__xassoccnt_lastrefsteppedcounter: {#1}
+ \cs_gset_nopar:Nx \__xassoccnt_lastrefsteppedcounter: {#1}
\xassoccnt_standardrefstepcounter{#1}%
\int_gset:Nn \g__xassoccnt_lastcountervalue_int {\number\value{#1}}%
}
@@ -2339,13 +2378,27 @@
\NewDocumentCommand{\NewDocumentCounter}{O{initial=\c_zero}mo}{%
- \IfValueTF{#3}{%
- \__xassoccnt_newcounter_ltx:nnn{#1}{#2}{#3}
- }{%
- \__xassoccnt_newcounter_ltx:nnn{#1}{#2}{}
+ \seq_set_from_clist:Nx \l_tmpa_seq {#2}
+ \seq_map_inline:Nn \l_tmpa_seq {%
+ \IfValueTF{#3}{%
+ \__xassoccnt_newcounter_ltx:nnn{#1}{##1}{#3}
+ }{%
+ \__xassoccnt_newcounter_ltx:nnn{#1}{##1}{}
+ }
}
}
+%\NewDocumentCommand{\NewDocumentCounters}{O{initial=\c_zero}mo}{%
+% \seq_map_inline:Nn \l_tmpa_seq {%
+% \IfValueTF{#3}{%
+% \NewDocumentCounter[#1]{##1}[#3]%
+% }{%
+% \NewDocumentCounter[#1]{##1}%
+% }%
+% }%
+%}
+
+
\NewDocumentCommand{\CopyDocumentCounters}{O{}mm}{%
\__xassoccnt_copycounters:nnn{#1}{#2}{#3}%
}
@@ -2371,12 +2424,12 @@
\prg_new_conditional:Nnn \__xassoccnt_ifinresetlist:nn {T,F,TF}
{%
\bool_set_false:N \l__xassoccnt_isinresetlist_bool
- \cs_set:Nn \l__tmpa_cs: {#2}
+ \cs_set:Nx \l__tmpa_cs: {#2}
\def\@elt##1{% Can't use \cs_new:Nn here :-(
\cs_set:Nn \l__tmpb_cs: {##1}
% Check if \l__tmpa_cs: and \l__tmpb_cs: are equal
\cs_if_eq:NNT \l__tmpa_cs: \l__tmpb_cs: {
- \bool_set_true:N \l__xassoccnt_isinresetlist_bool
+ \bool_gset_true:N \l__xassoccnt_isinresetlist_bool
}
}
\use:c{ cl@#1 }
@@ -2447,12 +2500,18 @@
\NewDocumentCommand{\NewTotalDocumentCounter}{O{}m}{%
\keys_set:nn {xassoccnt} {supertotal=false,#1}
- \__xassoccnt_ifis_latexcounter:nF {#2} {% Define the counter
- \xassoccnt_declaredocumentcounter:nn{sloppy=false}{#2}%
- }%
- \__xassoccnt_registertotaldocumentcounter:nn{#1}{#2}
+ \seq_set_from_clist:Nn \l_tmpa_seq {#2}
+ \seq_map_inline:Nn \l_tmpa_seq {
+ \__xassoccnt_ifis_latexcounter:nF {##1} {% Define the counter
+ \xassoccnt_declaredocumentcounter:nn{sloppy=false}{##1}%
+ }%
+ \__xassoccnt_registertotaldocumentcounter:nn{#1}{##1}
+ }
}
+
+
+
\cs_new:Nn \__xassoccnt_store_totalcounter_value:n {%
\prop_put:Nnn \g_xassoccnt_totalcounter_prop {#1} {\number\value{\__xassoccnt_expand_totalcountername:n{#1}}}
\prop_put:Nnn \g_xassoccnt_totalcounter_prop {#1name} {\__xassoccnt_expand_totalcountername:n{#1}}
@@ -2557,6 +2616,13 @@
{ #2 }
}
+\NewDocumentCommand{\DeclareTotalAssociatedCounters}{omm}{%
+ \NewTotalDocumentCounter{#3}%
+ \DeclareAssociatedCounters{#2}{#3}%
+}
+
+
+
%%% Counter backup list features
% Those macros all deal with the global reset list%
@@ -2828,11 +2894,17 @@
%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn \xassoccnt_declaredocumentcounteropt:nnn{%
- \__xassoccnt_newcounter_ltx:nnn{#1}{#2}{#3}%
+ \seq_set_from_clist:Nx \l_tmpa_seq {#2}
+ \seq_map_inline:Nn \l_tmpa_seq {
+ \__xassoccnt_newcounter_ltx:nnn{#1}{##1}{#3}%
+ }
}
\cs_new:Nn \xassoccnt_declaredocumentcounter:nn{%
- \__xassoccnt_newcounter_ltx:nn{#1}{#2}{}%
+ \seq_set_from_clist:Nx \l_tmpa_seq {#2}
+ \seq_map_inline:Nn \l_tmpa_seq {
+ \__xassoccnt_newcounter_ltx:nn{#1}{##1}{}%
+ }
}
@@ -2853,6 +2925,73 @@
}%
}
+
+\cs_new:Nn \__xassoccnt_generate_associated_counters_labels:Nn {%
+ \seq_map_inline:Nn #1 {%
+ \prop_set_eq:NN \l_tmpb_prop \l_tmpa_prop
+ \prop_if_in:NnF \l_tmpb_prop {prefix } { \prop_put:Nnn \l_tmpb_prop {prefix} {##1} }
+ \def\@tempa{##1}%
+ \def\cref@result{2}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \__xassoccnt_internal_label:nn {##1} {\prop_item:Nn \l_tmpb_prop {prefix}\prop_item:Nn\l_tmpb_prop {prefix-sep}#2}
+ }% End of \seq_map_inline
+}
+
+
+%%%%
+
+%%% Label features --- Experimental --- from 2017/03/03
+
+\NewDocumentCommand{\RedefineLabelCommand}{}{%
+ \bool_if:NT \g__xassoccnt_redefinelabel_bool {
+
+ \cs_new:Nn \__xassoccnt_internal_label:n {%
+ \latex@@label{##1}%
+ }
+
+ \cs_new:Nn \__xassoccnt_internal_label:nn {%
+ \bool_if:NTF \l__xassoccnt_cleverefpackage_loaded_bool {%
+ \latex@@label[##1]{##2}%
+ }{
+ \latex@@label{##2}%
+ }
+ }
+
+ \keys_define:nn {xassoccntlabel} {%
+ all .bool_set:N = \l_xassoccnt_allassociatedcounters_labeled_bool,
+ select .code:n= { \seq_set_from_clist:Nx \l_tmpa_seq { ##1 }\bool_set_false:N \l_xassoccnt_allassociatedcounters_labeled_bool },
+ prefix .code:n={ \prop_put:Nnx \l_tmpa_prop {prefix} {##1} },
+ prefix-sep .code:n={ \prop_put:Nnx \l_tmpa_prop {prefix-sep} {##1} }
+ }
+ \RenewDocumentCommand{\label}{omO{}}{%
+ \group_begin:
+ \prop_clear:N \l_tmpa_prop
+ \seq_clear:N \l_tmpa_seq
+ \keys_set:nn {xassoccntlabel} {all=true,prefix-sep={\xassoccnt_extract_moduledata:n{prefix-sep}},##3}%
+ %
+ \IfValueTF{##1}{%
+ % Generate the regular label
+ \__xassoccnt_internal_label:nn {##1} {##2}
+ }{%
+ \__xassoccnt_internal_label:n {##2}
+ }
+ \bool_if:NT \l_xassoccnt_allassociatedcounters_labeled_bool {%
+ % The prefix is made from the associated counter
+ \prop_remove:Nn \l_tmpa_prop {prefix}
+ \seq_set_eq:Nc \l_tmpa_seq {\__xassoccnt_drivercontainer:n{\LastRefSteppedCounter}}
+ }
+ \seq_if_empty:NF \l_tmpa_seq {% Check whether either the only - list or the driver container list is empty (i.e. it was no driver container at all
+ % If non-empty -> generate the labels with the given naming scheme
+ \__xassoccnt_generate_associated_counters_labels:Nn \l_tmpa_seq {##2}
+ }% End of \seq_if_empty
+ \group_end:
+ }% End of \RenewDocumentCommand{\label}
+ }
+}
+
+
\ExplSyntaxOff
\EnableNumberofrunsTF{%
@@ -2875,9 +3014,17 @@
\@onlypreamble{\NewTotalDocumentCounter}
\@onlypreamble{\RegisterTotalDocumentCounter}
\@onlypreamble{\DeclareAssociatedCounters}
+\@onlypreamble{\DeclareTotalAssociatedCounters}
\@onlypreamble{\DeclareDocumentCounter}
\@onlypreamble{\DeclareCoupledCounters}
+\AtEndPreamble{%
+ \AtBeginDocument{%
+ \LetLtxMacro\latex@@label\label
+ \RedefineLabelCommand%
+ }
+}
+
\AtBeginDocument{%
\DeclareBackupCountersGroupName{scratch}%
}