From fb0e09783157c2c9f8e6899a25abc2442b8a77f6 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 18 Jan 2013 23:26:48 +0000 Subject: acro (17jan13) git-svn-id: svn://tug.org/texlive/trunk@28867 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/acro/acro.sty | 649 +++++++++++++++++++++--------- 1 file changed, 449 insertions(+), 200 deletions(-) (limited to 'Master/texmf-dist/tex/latex/acro/acro.sty') diff --git a/Master/texmf-dist/tex/latex/acro/acro.sty b/Master/texmf-dist/tex/latex/acro/acro.sty index f867b88fe19..fb8b8c09105 100644 --- a/Master/texmf-dist/tex/latex/acro/acro.sty +++ b/Master/texmf-dist/tex/latex/acro/acro.sty @@ -23,7 +23,7 @@ % The Current Maintainer of this work is Clemens Niederberger. % -------------------------------------------------------------------------- % The acro package consists of the files -% - acro.sty, acro_en.tex, acro_en.pdf, README +% - acro.sty, acro0.def, acro1.def, acro_en.tex, acro_en.pdf, README % -------------------------------------------------------------------------- % If you have any ideas, questions, suggestions or bugs to report, please % feel free to contact me. @@ -31,11 +31,11 @@ \RequirePackage{expl3,xparse,l3keys2e,xtemplate} \ProvidesExplPackage {acro} - {2013/01/02} - {0.6a} + {2013/01/16} + {1.0} {Typeset Acronyms} -% error messages: +% warning and error messages: \msg_new:nnnn { acro } { undefined } { You've~requested~acronym~`#1'~but~it~seems~that~it~was~never~defined! } { @@ -43,12 +43,23 @@ apperantly~haven't~defined~it,~yet!~Maybe~you've~mispelled~it? } +\msg_new:nnnn { acro } { version } + { You've~selected~the~version~option~`#1'~which~doesn't~exist. } + { + You've~selected~the~version~option~`#1'~which~doesn't~exist.~ + I'm~using~option~`#2'~instead. + } + % temporary variables \tl_new:N \l__acro_tmpa_tl \tl_new:N \l__acro_tmpb_tl \tl_new:N \l__acro_tmpc_tl \prop_new:N \l__acro_tmpa_prop +\prop_new:N \l__acro_tmpb_prop \seq_new:N \l__acro_tmpa_seq +\seq_new:N \l__acro_tmpb_seq + +\tl_new:N \l__acro_ignore_tl % boolean variables: \bool_new:N \l__acro_mark_as_used_bool @@ -64,10 +75,16 @@ \bool_new:N \l__acro_xspace_bool \bool_new:N \l__acro_first_upper_bool \bool_new:N \l__acro_sort_bool +\bool_set_true:N \l__acro_sort_bool \bool_new:N \l__acro_capitalize_list_bool \bool_new:N \l__acro_citation_all_bool \bool_new:N \l__acro_citation_first_bool \bool_set_true:N \l__acro_citation_first_bool +\bool_new:N \l__acro_acc_supp_bool +\bool_new:N \l__acro_page_ranges_bool +\bool_set_true:N \l__acro_page_ranges_bool +\bool_new:N \l__acro_record_pages_bool +\bool_set_true:N \l__acro_record_pages_bool % tokenlist variables: \tl_new:N \l__acro_short_format_tl @@ -81,7 +98,13 @@ \tl_new:N \l__acro_page_instance_tl \tl_set:Nn \l__acro_page_instance_tl { none } \tl_new:N \l__acro_page_name_tl -\tl_set:Nn \l__acro_page_name_tl { p. } +\tl_set:Nn \l__acro_page_name_tl { p.\@\, } +\tl_new:N \l__acro_pages_name_tl +\tl_set:Nn \l__acro_pages_name_tl { pp.\@\, } +\tl_new:N \l__acro_next_page_tl +\tl_set:Nn \l__acro_next_page_tl { \,f.\@ } +\tl_new:N \l__acro_next_pages_tl +\tl_set:Nn \l__acro_next_pages_tl { \,ff.\@ } \tl_new:N \l__acro_list_instance_tl \tl_set:Nn \l__acro_list_instance_tl { list } \tl_new:N \l__acro_list_type_tl @@ -104,6 +127,7 @@ % property list variables: \prop_new:N \l__acro_short_prop \prop_new:N \l__acro_alt_prop +\prop_new:N \l__acro_sort_prop \prop_new:N \l__acro_long_prop \prop_new:N \l__acro_class_prop \prop_new:N \l__acro_replace_plural_prop @@ -116,6 +140,7 @@ \prop_new:N \l__acro_citation_post_prop \prop_new:N \l__acro_pdfstring_prop \prop_new:N \l__acro_pdfstring_plural_prop +\prop_new:N \l__acro_acc_supp_prop % length variables: \dim_new:N \l__acro_table_width_dim @@ -129,9 +154,39 @@ \cs_new_eq:NN \acro_first_upper_case:n \__acro_first_upper_case:n +% -------------------------------------------------------------------------- +% versioning: +\tl_new:N \l__acro_active_version_tl +\tl_new:N \l__acro_version_zero_tl +\tl_set:Nn \l__acro_version_zero_tl { 0 } + +\clist_new:N \l__acro_versions_clist +\clist_put_right:Nn \l__acro_versions_clist { 0 } +\clist_put_right:Nn \l__acro_versions_clist { 1 } + +\bool_new:N \l__acro_version_selected_bool + +\cs_new:Npn \__acro_select_version:n #1 + { + \clist_if_in:NnTF \l__acro_versions_clist { #1 } + { + \file_input:n { acro#1.def } + \tl_set:Nn \l__acro_active_version_tl { #1 } + } + { + \msg_warning:nnxx { acro } { version } { #1 } { 1 } + \file_input:n { acro1.def } + \tl_set:Nn \l__acro_active_version_tl { 1 } + } + \bool_set_true:N \l__acro_version_selected_bool + } + + % options: \keys_define:nn { acro } { + version .code:n = \__acro_select_version:n { #1 } , + accsupp .bool_set:N = \l__acro_acc_supp_bool , macros .bool_set:N = \l__acro_create_macros_bool , xspace .bool_set:N = \l__acro_xspace_bool , strict .bool_set:N = \l__acro_strict_bool , @@ -147,6 +202,11 @@ extra-style .tl_set:N = \l__acro_extra_instance_tl , page-ref .tl_set:N = \l__acro_page_instance_tl , page-name .tl_set:N = \l__acro_page_name_tl , + pages-name .tl_set:N = \l__acro_pages_name_tl , + page-ranges .bool_set:N = \l__acro_page_ranges_bool , + record-pages .bool_set:N = \l__acro_record_pages_bool , + next-page .tl_set:N = \l__acro_next_page_tl , + next-pages .tl_set:N = \l__acro_next_pages_tl , list-style .tl_set:N = \l__acro_list_instance_tl , list-type .tl_set:N = \l__acro_list_type_tl , list-header .tl_set:N = \l__acro_list_title_tl , @@ -184,65 +244,14 @@ \cs_new_eq:NN \acro_xspace: \xspace } { \cs_new:Npn \acro_xspace: {} } + \bool_if:NF \l__acro_record_pages_bool + { \cs_set_eq:NN \__acro_record_page_number:n \use_none:n } } % setup command: \NewDocumentCommand \acsetup { m } { \keys_set:nn { acro } { #1 } \ignorespaces } -% -------------------------------------------------------------------------- -% adding an acronym, internal command: -% #1: use/replace plural (boolean) -% #2: id -% #3: short -% #4: short plural -% #5: alt -% #6: long -% #7: long plural -% #8: class -% #9: extra -\cs_new:Npn \acro_new:nnnnnnnnn #1#2#3#4#5#6#7#8#9 - { - \IfBooleanTF { #1 } - { \prop_put:Nnn \l__acro_replace_plural_prop { #2 } { \c_true_bool } } - { \prop_put:Nnn \l__acro_replace_plural_prop { #2 } { \c_false_bool } } - \prop_put:Nnn \l__acro_short_prop { #2 } { #3 } - \prop_put:Nnn \l__acro_pdfstring_prop { #2 } { #3 } - \IfNoValueTF { #4 } - { - \prop_put:Nnn \l__acro_short_plural_prop - { #2 } { \l__acro_default_plural_tl } - \prop_put:Nnx \l__acro_pdfstring_plural_prop - { #2 } { \exp_not:n { #3 } \exp_not:V \l__acro_default_plural_tl } - } - { - \prop_put:Nnn \l__acro_short_plural_prop { #2 } { #4 } - \prop_put:Nnx \l__acro_pdfstring_plural_prop { #2 } { \exp_not:n { #3 #4 } } - } - \IfNoValueTF { #5 } - { \prop_put:Nnn \l__acro_alt_prop { #2 } { #2 } } - { \prop_put:Nnn \l__acro_alt_prop { #2 } { #5 } } - \prop_put:Nnn \l__acro_long_prop { #2 } { #6 } - \IfNoValueTF { #7 } - { \prop_put:Nnn \l__acro_long_plural_prop { #2 } { \l__acro_default_plural_tl } } - { \prop_put:Nnn \l__acro_long_plural_prop { #2 } { #7 } } - \IfNoValueF { #8 } - { \prop_put:Nnn \l__acro_class_prop { #2 } { #8} } - \IfNoValueF { #9 } - { \prop_put:Nnn \l__acro_extra_prop { #2 } { #9 } } - \bool_new:c { g__acro_#2_used_bool } - \bool_new:c { g__acro_#2_label_bool } - \bool_if:NT \l__acro_create_macros_bool - { - \cs_if_exist:cTF { #2 } - { - \bool_if:NT \l__acro_strict_bool - { \cs_set:cpn { #2 } { \ac { #2 } \acro_xspace: } } - } - { \cs_new:cpn { #2 } { \ac { #2 } \acro_xspace: } } - } - } - % typeset the short form: \cs_new:Npn \__acro_write_short:n #1 { @@ -312,7 +321,7 @@ \ifHy@ocgcolorlinks \exp_after:wN \use_i:nn \else - \exp_after:wN \use_ii:nn + \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn \fi \fi { \textcolor { \@linkcolor } { #1 } } @@ -368,7 +377,7 @@ } \bool_if:nT { \l__acro_first_use_brackets_bool && !\l__acro_first_reversed_bool } { \tl_head:N \l__acro_first_brackets_tl } - \__acro_write_short:n { #2 } + \__acro_acc_supp:nn { #1 } { \__acro_write_short:n { #2 } } \bool_if:nT { \l__acro_first_use_brackets_bool && !\l__acro_first_reversed_bool } { \tl_tail:N \l__acro_first_brackets_tl } \bool_if:nT { !\l__acro_first_only_short_bool && \l__acro_first_reversed_bool } @@ -392,7 +401,7 @@ \DeclareTemplateCode { acro-first } { footnote } { 3 } { } { \AssignTemplateKeys - \__acro_write_short:n { #2 } + \__acro_acc_supp:nn { #1 } { \__acro_write_short:n { #2 } } \footnote { \__acro_write_long:No \l__acro_long_format_tl { #3 } @@ -460,12 +469,234 @@ { punct = true, brackets = false } % -------------------------------------------------------------------------- -% outputting the page number: +% outputting the page numbers: \bool_new:N \l__acro_page_punct_bool +\bool_new:N \l__acro_page_brackets_bool \bool_new:N \l__acro_page_display_bool \tl_new:N \l__acro_page_punct_tl +\tl_new:N \l__acro_page_brackets_tl \dim_new:N \l__acro_page_space_dim +\cs_new:Npn \acro_create_page_records:n #1 + { + \seq_new:c { g__acro_#1_tmp_seq } + \seq_new:c { g__acro_#1_pages_seq } + } + +\cs_new:Npn \acro@hyper@page #1 + { + \tl_if_in:nnTF { #1 } { \acro@no@hyperpage } + { #1 } + { \acro_hyper_page:n { #1 } } + } + +\cs_new_protected:Npn \acro@no@hyperpage {} + +\cs_new:Npn \__acro_safe_pages_aux:n #1 + { \noexpand \acro@hyper@page {#1}| } + +\cs_new_eq:NN \acro_hyper_page:n \use:n + +\cs_new:Npn \acro_safe_pages:n #1 + { + \iow_now:Nx \@auxout + { + \exp_not:n { \global \@namedef } { acro@#1@pages } + { \seq_map_function:cN { g__acro_#1_pages_seq } \__acro_safe_pages_aux:n } + } + } + +\AtEndDocument + { + \prop_map_inline:Nn \l__acro_short_prop + { + \acro_finalize_page_numbers:n { #1 } + \acro_safe_pages:n { #1 } + } + } + +\tl_new:N \l__acro_tmp_page_tl +\tl_new:N \l__acro_last_page_tl + +%TODO: this should be translated into expl3 syntax +\cs_new:Npn \__acro_if_is_number:nTF #1 + { + \if!\ifnum9<1#1!\expandafter\expandafter\expandafter\@firstoftwo\fi + \else + \expandafter\@secondoftwo + \fi + } + +\cs_new:Npn \__acro_convert_to_arabic:n #1 + { + \__acro_if_is_number:nTF { #1 } + { #1 } + { \exp_args:Nf \int_from_roman:n { \tl_expandable_lowercase:n { #1 } } } + } +\cs_generate_variant:Nn \__acro_convert_to_arabic:n { V } + +\cs_new:Npn \__acro_record_page_number:n #1 + { + \seq_if_empty:cTF { g__acro_#1_pages_seq } + {% no pages recorded, yet + \seq_gput_right:cx { g__acro_#1_pages_seq } { \thepage } + \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage } + } + { + \seq_get_right:cN { g__acro_#1_tmp_seq } \l__acro_tmp_page_tl + \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_last_page_tl + \tl_if_eq:NNTF \l__acro_tmp_page_tl \l__acro_last_page_tl + {% range may have started + \int_compare:nNnF + { \value{page} } + = + { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } + { + \int_compare:nNnTF + { \value{page} } + = + { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl + 1 } + {% range continues + \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage } + } + {% no range (any more) + \seq_gput_right:cx { g__acro_#1_pages_seq } { \acro@no@hyperpage,~ } + \seq_gclear:c { g__acro_#1_tmp_seq } + \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage } + \seq_gput_right:cx { g__acro_#1_pages_seq } { \thepage } + } + } + } + {% we're in a range + \int_compare:nNnF + { \value{page} } + = + { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } + { + \int_compare:nNnTF + { \value{page} } + = + { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl + 1 } + {% range continues + \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage } + } + {% no range (any more) + \int_compare:nNnTF + { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } + = + { \__acro_convert_to_arabic:V \l__acro_last_page_tl +1 } + { + \bool_if:NTF \l__acro_page_ranges_bool + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage,~ } + \seq_gput_right:cx { g__acro_#1_pages_seq } + { \l__acro_tmp_page_tl } + } + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage\l__acro_next_page_tl } + } + } + { + \bool_if:NTF \l__acro_page_ranges_bool + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage-- } + \seq_gput_right:cx { g__acro_#1_pages_seq } + { \l__acro_tmp_page_tl } + } + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage\l__acro_next_pages_tl } + } + } + \seq_gclear:c { g__acro_#1_tmp_seq } + \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage } + \seq_gput_right:cn { g__acro_#1_pages_seq } { \acro@no@hyperpage,~ } + \seq_gput_right:cx { g__acro_#1_pages_seq } { \thepage } + } + } + } + } + } + +\cs_new:Npn \acro_finalize_page_numbers:n #1 + { + \seq_get_right:cN { g__acro_#1_tmp_seq } \l__acro_tmp_page_tl + \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_last_page_tl + \tl_if_eq:NNF \l__acro_tmp_page_tl \l__acro_last_page_tl + { + \int_compare:nNnTF + { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } + = + { \__acro_convert_to_arabic:V \l__acro_last_page_tl +1 } + { + \bool_if:NTF \l__acro_page_ranges_bool + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage,~ } + \seq_gput_right:cx { g__acro_#1_pages_seq } + { \l__acro_tmp_page_tl } + } + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage\l__acro_next_page_tl } + } + } + { + \bool_if:NTF \l__acro_page_ranges_bool + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage-- } + \seq_gput_right:cx { g__acro_#1_pages_seq } + { \l__acro_tmp_page_tl } + } + { + \seq_gput_right:cn { g__acro_#1_pages_seq } + { \acro@no@hyperpage\l__acro_next_pages_tl } + } + } + } + } + +\cs_new:Npn \acro_print_page_numbers:n #1 + { + \cs_if_exist:cTF { acro@#1@pages } + { + \tl_set_eq:Nc \l__acro_tmpa_tl { acro@#1@pages } + \__acro_print_page_numbers:n { #1 } + } + { ?? } + } + +\cs_new:Npn \__acro_print_page_numbers:n #1 + { + \seq_set_split:NnV \l__acro_tmpb_seq { | } \l__acro_tmpa_tl + \seq_pop_right:NN \l__acro_tmpb_seq \l__acro_ignore_tl + \int_compare:nNnTF { \seq_count:N \l__acro_tmpb_seq } = { 1 } + { \l__acro_page_name_tl } { \l__acro_pages_name_tl } + \acro_no_break: + \skip_horizontal:N \l__acro_page_space_dim + \acro_no_break: + \seq_map_inline:Nn \l__acro_tmpb_seq { ##1 } + } + +\AtBeginDocument + { + \tl_if_eq:NNT \l__acro_active_version_tl \l__acro_version_zero_tl + { + \cs_set:Npn \__acro_print_page_numbers:n #1 + { + \acro_no_break: + \skip_horizontal:N \l__acro_page_space_dim + \acro_no_break: + \tl_use:N \l__acro_page_name_tl + \pageref{ac:#1} + } + } + } + \cs_new:Npn \acro_no_break: { \tex_penalty:D \c_ten_thousand } \DeclareObjectType { acro-page-number } { 1 } @@ -477,8 +708,7 @@ punct-symbol : tokenlist = {,} , brackets : boolean = false , brackets-type : tokenlist = () , - space : length = .3ex , - name : tokenlist , + space : length = .3ex } \DeclareTemplateCode { acro-page-number } { default } { 1 } @@ -488,8 +718,7 @@ punct-symbol = \l__acro_page_punct_tl , brackets = \l__acro_page_brackets_bool , brackets-type = \l__acro_page_brackets_tl , - space = \l__acro_page_space_dim , - name = \l__acro_page_name_tl , + space = \l__acro_page_space_dim } { \AssignTemplateKeys @@ -500,11 +729,7 @@ \tl_use:N \c_space_tl \bool_if:NT \l__acro_page_brackets_bool { \tl_head:N \l__acro_page_brackets_tl } - \tl_use:N \l__acro_page_name_tl - \acro_no_break: - \skip_horizontal:N \l__acro_page_space_dim - \acro_no_break: - \pageref { ac:#1 } + \acro_print_page_numbers:n { #1 } \bool_if:NT \l__acro_page_brackets_bool { \tl_tail:N \l__acro_page_brackets_tl } } @@ -568,7 +793,7 @@ \cs_new:Npn \acro_is_excluded:nnF #1#2#3 { \bool_set_false:N \l__acro_is_excluded_bool - \IfNoValueTF { #2 } + \tl_if_empty:nTF { #2 } { #3 } { \clist_map_inline:nn { #2 } @@ -649,7 +874,14 @@ \AssignTemplateKeys \__acro_activate_hyperref_support: \cs_set:Npn \acro_print_list_short:nn ##1##2 - { \item [ \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } ] } + { + \item + [ + \acro_hyper_target:nn + { ##1 } + { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } } + ] + } \cs_set:Npn \acro_print_list_long:n ##1 { \__acro_write_long:Nf \l__acro_list_long_format_tl @@ -693,7 +925,12 @@ \AssignTemplateKeys \__acro_activate_hyperref_support: \cs_set:Npn \acro_print_list_short:nn ##1##2 - { \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } & } + { + \acro_hyper_target:nn + { ##1 } + { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } } + & + } \cs_set:Npn \acro_print_list_long:n ##1 { \__acro_write_long:Nf \l__acro_list_long_format_tl @@ -735,7 +972,12 @@ \AssignTemplateKeys \__acro_activate_hyperref_support: \cs_set:Npn \acro_print_list_short:nn ##1##2 - { \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } & } + { + \acro_hyper_target:nn + { ##1 } + { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } } + & + } \cs_set:Npn \acro_print_list_long:n ##1 { \__acro_write_long:Nf \l__acro_list_long_format_tl @@ -779,7 +1021,12 @@ \AssignTemplateKeys \__acro_activate_hyperref_support: \cs_set:Npn \acro_print_list_short:nn ##1##2 - { \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } & } + { + \acro_hyper_target:nn + { ##1 } + { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } } + & + } \cs_set:Npn \acro_print_list_extra:n ##1 { \bool_if:NT \l__acro_capitalize_list_bool @@ -835,7 +1082,9 @@ \acro_is_used:nTF { #1 } { % this is not the first time - \__acro_write_short:V \l__acro_short_tl + \__acro_acc_supp:nn + { #1 } + { \__acro_write_short:V \l__acro_short_tl } \__acro_cite_if:Nn \l__acro_citation_all_bool { #1 } } { @@ -914,7 +1163,11 @@ \iow_now:Nx \@auxout { \string \acro@used@once { #1 } } \bool_if:NT \l__acro_mark_as_used_bool { - \bool_if:cF { g__acro_#1_label_bool } + \bool_if:nT + { + !\bool_if_p:c { g__acro_#1_label_bool } && + \tl_if_eq_p:NN \l__acro_active_version_tl \l__acro_version_zero_tl + } { \bool_gset_true:c { g__acro_#1_label_bool } \label{ac:#1} @@ -952,7 +1205,9 @@ \acro_is_used:n { #1 } \__acro_is_single:nT { #1 } { \cs_set_eq:NN \acro_hyper_link:nn \use_ii:nn } - \__acro_write_short:V \l__acro_short_tl + \__acro_acc_supp:nn + { #1 } + { \__acro_write_short:V \l__acro_short_tl } \__acro_cite_if:Nn \l__acro_citation_all_bool { #1 } } @@ -964,7 +1219,9 @@ \acro_is_used:n { #1 } \__acro_is_single:nT { #1 } { \cs_set_eq:NN \acro_hyper_link:nn \use_ii:nn } - \__acro_write_short:V \l__acro_alt_tl + \__acro_acc_supp:nn + { #1 } + { \__acro_write_short:V \l__acro_alt_tl } \__acro_cite_if:Nn \l__acro_citation_all_bool { #1 } } @@ -994,20 +1251,6 @@ { \l__acro_long_tl } } -% set custom format: -\cs_new:Npn \acro_format:nn #1#2 - { \prop_put:Nnn \l__acro_format_prop { #1 } { #2 } } - -% add citation: -\cs_new:Npn \acro_citation:nnnn #1#2#3#4 - { - \prop_put:Nnn \l__acro_citation_prop { #1 } { #4 } - \IfNoValueF { #2 } - { \prop_put:Nnn \l__acro_citation_pre_prop { #1 } { #2 } } - \IfNoValueF { #3 } - { \prop_put:Nnn \l__acro_citation_post_prop { #1 } { #3 } } - } - % #1 pre % #2 post % #3 key @@ -1041,6 +1284,34 @@ } } +% accessability support +\tl_new:N \l__acro_acc_supp_tl +\cs_new_eq:NN \__acro_acc_supp:nn \use_ii:nn + +\cs_new:Npn \__acro_acc_supp_aux:nn #1#2 + { + \BeginAccSupp { ActualText = #1 } + #2 + \EndAccSupp { } + } +\cs_generate_variant:Nn \__acro_acc_supp_aux:nn { V } + +\AtBeginDocument + { + \bool_if:NT \l__acro_acc_supp_bool + { + \RequirePackage { accsupp } + \cs_set:Npn \__acro_acc_supp:nn #1#2 + { + \prop_get:NnNF \l__acro_acc_supp_prop { #1 } \l__acro_acc_supp_tl + { \prop_get:NnN \l__acro_short_prop { #1 } \l__acro_acc_supp_tl } + \bool_if:NT \l__acro_use_plural_bool + { \tl_put_right:NV \l__acro_acc_supp_tl \l__acro_short_plural_tl } + \__acro_acc_supp_aux:Vn \l__acro_acc_supp_tl { #2 } + } + } + } + % -------------------------------------------------------------------------- % experimental sorting feature: \AtBeginDocument @@ -1050,9 +1321,14 @@ \RequirePackage { l3sort } \cs_new:Npn \acro_sort_prop:N #1 { - \seq_clear:N \l__acro_tmpa_seq - \prop_map_inline:Nn #1 - { \seq_put_right:Nn \l__acro_tmpa_seq { ##1 } } + \seq_clear:N \l__acro_tmpa_seq + \prop_clear:N \l__acro_tmpa_prop + \prop_clear:N \l__acro_tmpb_prop + \prop_map_inline:Nn \l__acro_sort_prop + { + \seq_put_right:Nn \l__acro_tmpa_seq { ##2 } + \prop_put:Nnn \l__acro_tmpa_prop { ##2 } { ##1 } + } \seq_sort:Nn \l__acro_tmpa_seq { \tl_to_lowercase:n { @@ -1061,80 +1337,47 @@ { \sort_reversed: } } } - \prop_clear:N \l__acro_tmpa_prop \seq_map_inline:Nn \l__acro_tmpa_seq { - \prop_get:NnN #1 { ##1 } \l__acro_tmpa_tl - \prop_put:NnV \l__acro_tmpa_prop { ##1 } \l__acro_tmpa_tl + % get ID: + \prop_get:NnN \l__acro_tmpa_prop { ##1 } \l__acro_tmpa_tl + % get prop entry of ID in #1: + \prop_get:NVNT #1 \l__acro_tmpa_tl \l__acro_tmpb_tl + { + \prop_put:NVV \l__acro_tmpb_prop + \l__acro_tmpa_tl + \l__acro_tmpb_tl + } } - \prop_set_eq:NN #1 \l__acro_tmpa_prop + \prop_set_eq:NN #1 \l__acro_tmpb_prop } } } % -------------------------------------------------------------------------- -% print the whole list: -\cs_new:Npn \acro_print_acronyms:nn #1#2 - { - \iow_now:Nx \@auxout { \string \acro@print@list } - \bool_if:NT \l__acro_sort_bool - { \acro_sort_prop:N \l__acro_short_prop } - \UseInstance { acro-title } { \l__acro_list_title_tl } - { \l__acro_list_name_tl } - \cs_if_exist:NTF \acro@printed@list - { - \UseInstance { acro-list } { \l__acro_list_instance_tl } - { \l__acro_list_type_tl } { #1 } { #2 } - } - { \@latex@warning@no@line {Rerun~to~get~acronym~list~right} } - } - +% regarding list printing: \cs_new:Npn \acro@print@list { \cs_if_exist:NF \acro@printed@list { \cs_new:Npn \acro@printed@list {} } } -% -------------------------------------------------------------------------- -% USER COMMANDS -% adding an acronym, user command: -% #1: use/replace plural (boolean) -% #2: id -% #3: short -% #4: short plural -% #5: alt -% #6: long -% #7: long plural -% #8: class -% #9: extra -\NewDocumentCommand \DeclareAcronym - { sm>{\SplitArgument{1}{,}}mo>{\SplitArgument{1}{,}}+mgo } - { \acro_new:nnnnnnnnn { #1 } { #2 } #3 { #4 } #5 { #7 } { #6 } } -\@onlypreamble \DeclareAcronym - -\NewDocumentCommand \DeclareAcronymFormat { mm } - { \acro_format:nn { #1 } { #2 } } -\@onlypreamble \DeclareAcronymFormat - -\NewDocumentCommand \DeclareAcronymCitation { moom } - { \acro_citation:nnnn { #1 } { #2 } { #3 } { #4 } } -\@onlypreamble \DeclareAcronymCitation - -\NewDocumentCommand \DeclareAcronymPDFString - { m >{ \SplitArgument { 1 } { , } } m } - { \acro_pdfstring:nnn { #1 } #2 } -\@onlypreamble \DeclareAcronymPDFstring - -\cs_new:Npn \acro_use_if:n #1 + +\cs_new:Npn \acro_use_if:nn #1#2 { \IfBooleanTF { #1 } { \bool_set_false:N \l__acro_mark_as_used_bool } - { \bool_set_true:N \l__acro_mark_as_used_bool } + { + \__acro_record_page_number:n { #2 } + \bool_set_true:N \l__acro_mark_as_used_bool + } } +% -------------------------------------------------------------------------- +% the user commands: % automatic: \NewDocumentCommand \ac { sm } { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \acro_use:n { #2 } \group_end: } @@ -1143,7 +1386,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_first_upper_bool \acro_use:n { #2 } \group_end: @@ -1153,7 +1396,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \acro_use:n { #2 } \group_end: @@ -1163,7 +1406,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \bool_set_true:N \l__acro_first_upper_bool \acro_use:n { #2 } @@ -1175,7 +1418,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \acro_short:n { #2 } \group_end: } @@ -1184,7 +1427,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \acro_short:n { #2 } \group_end: @@ -1195,7 +1438,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \acro_alt:n { #2 } \group_end: } @@ -1204,7 +1447,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \acro_alt:n { #2 } \group_end: @@ -1215,7 +1458,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \acro_long:n { #2 } \group_end: } @@ -1224,7 +1467,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_first_upper_bool \acro_long:n { #2 } \group_end: @@ -1234,7 +1477,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \acro_long:n { #2 } \group_end: @@ -1244,7 +1487,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \bool_set_true:N \l__acro_first_upper_bool \acro_long:n { #2 } @@ -1256,7 +1499,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \acro_first:n { #2 } \group_end: } @@ -1265,7 +1508,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_first_upper_bool \acro_first:n { #2 } \group_end: @@ -1275,7 +1518,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \acro_first:n { #2 } \group_end: @@ -1285,7 +1528,7 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:n { #1 } + \acro_use_if:nn { #1 } { #2 } \bool_set_true:N \l__acro_use_plural_bool \bool_set_true:N \l__acro_first_upper_bool \acro_first:n { #2 } @@ -1321,9 +1564,7 @@ \NewDocumentCommand \acuse { > { \SplitList { , } } m } { \ProcessList { #1 } { \acro_mark_as_used:n } } -% typeset the list: -\NewDocumentCommand \printacronyms { G{}o } - { \acro_print_acronyms:nn { #1 } { #2 } } + \ProcessKeysOptions { acro } @@ -1352,20 +1593,6 @@ { \prop_get:Nn \l__acro_pdfstring_plural_prop { #1 } } } -\cs_new:Npn \acro_pdfstring:nnn #1#2#3 - { - \prop_put:Nnx \l__acro_pdfstring_prop { #1 } { #2 } - \IfNoValueTF { #3 } - { - \prop_put:Nnx \l__acro_pdfstring_plural_prop - { #1 } { #2 \l__acro_default_plural_tl } - } - { - \prop_put:Nnx \l__acro_pdfstring_plural_prop - { #1 } { #2 #3 } - } - } - \AtBeginDocument { \@ifpackageloaded { hyperref } @@ -1390,12 +1617,15 @@ \cs_set_eq:NN \Acfp \acpdfstringplural \cs_set_eq:NN \acap \acpdfstringplural } + \cs_set_eq:NN \acro_hyper_page:n \hyperpage } {} } % -------------------------------------------------------------------------- % language support \RequirePackage { translations } +% Listenname +\DeclareTranslationFallback { acronym-list-name } { Acronyms } \DeclareTranslation { English } { acronym-list-name } { Acronyms } \DeclareTranslation { American } { acronym-list-name } { Acronyms } \DeclareTranslation { British } { acronym-list-name } { Acronyms } @@ -1406,6 +1636,31 @@ \DeclareTranslation { Catalan } { acronym-list-name } { Sigles } \DeclareTranslation { Turkish } { acronym-list-name } { K\i saltmalar } \tl_set:Nn \l__acro_list_name_tl { \GetTranslation { acronym-list-name } } +% Seitenname +\DeclareTranslationFallback { acronym-page-name } { p. } +\DeclareTranslation { English } { acronym-page-name } { p. } +\DeclareTranslation { German } { acronym-page-name } { S. } +\tl_set:Nn \l__acro_page_name_tl { \GetTranslation { acronym-page-name }\@\, } +% Seitenname - Plural +\DeclareTranslationFallback { acronym-pages-name } { pp. } +\DeclareTranslation { English } { acronym-pages-name } { pp. } +\DeclareTranslation { German } { acronym-pages-name } { S. } +\tl_set:Nn \l__acro_pages_name_tl { \GetTranslation { acronym-pages-name }\@\, } +% einzelne folgende Seite +\DeclareTranslationFallback { acronym-next-page } { f. } +\DeclareTranslation { English } { acronym-next-page } { f. } +\DeclareTranslation { German } { acronym-next-page } { f. } +\tl_set:Nn \l__acro_next_page_tl { \,\GetTranslation {acronym-next-page }\@ } +% mehrere folgende Seiten +\DeclareTranslationFallback { acronym-next-pages } { ff. } +\DeclareTranslation { English } { acronym-next-pages } { ff. } +\DeclareTranslation { German } { acronym-next-pages } { ff. } +\tl_set:Nn \l__acro_next_pages_tl { \,\GetTranslation {acronym-next-pages }\@ } + +% -------------------------------------------------------------------------- +% load default version +\bool_if:NF \l__acro_version_selected_bool + { \__acro_select_version:n { 1 } } \tex_endinput:D % -------------------------------------------------------------------------- @@ -1443,30 +1698,24 @@ short entry) resolved - option `xspace' added 2013/01/02 v0.6a - \acuseall - +2013/01/16 v1.0 - new syntax of \DeclareAcronym + - new option `version' + - new `accsupp' acronym property + - new `sort' acronym property + - new syntax of \printacronyms + - new default: `sort=true' + - new options `page-ranges', `next-page', `next-pages', + `pages-name', `record-pages' + - no automatic label placement for page number referencing + any more + % -------------------------------------------------------------------------- % TODO: - Option `totoc'!? -- accsupp Support? - revise list styles to allow _full_ customization by creating own instances! this probably needs a handfull of macros that give access to the entries without worrying about internals - record and list _all_ pagenumbers where an acronym occurs - compilation halts instead of throwing an error if an undefined acronym is used -- possibility to add sort key - add \ACF, \ACFP, \ACL and \ACLP that will print all words of the long form - capitalized - -= long term = -- new syntax: - \DeclareAcronym{} - { - short = ?? , - long = ?? , - sort = ?? , - short-plural = ?? , - long-plural* = ?? ,% * = replacement instead of ending - PDF-text = ?? , - cite = ?? , - ... - } \ No newline at end of file + capitalized \ No newline at end of file -- cgit v1.2.3