From a2ba8a971f46c2c840a676b9b0815ada278b3edb Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 17 Feb 2021 22:08:25 +0000 Subject: langsci-affiliations (17feb21) git-svn-id: svn://tug.org/texlive/trunk@57774 c570f23f-e606-0410-a88d-b1316a301751 --- .../langsci-affiliations/langsci-affiliations.sty | 305 +++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/langsci-affiliations/langsci-affiliations.sty (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/langsci-affiliations/langsci-affiliations.sty b/Master/texmf-dist/tex/latex/langsci-affiliations/langsci-affiliations.sty new file mode 100644 index 00000000000..a1f37dba663 --- /dev/null +++ b/Master/texmf-dist/tex/latex/langsci-affiliations/langsci-affiliations.sty @@ -0,0 +1,305 @@ +%% +%% This is file `langsci-affiliations.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% langsci-affiliations.dtx (with options: `package') +%% ------------------------------------------------------------------------------ +%% +%% langsci-affiliations collects, orders, and outputs author-affiliation pairs. +%% It makes use of data types from LaTeX3. +%% +%% The package is aimed to be helpful to class authors, i.e. those who design +%% and maintain document templates in publishing houses, universities, etc. The +%% package is probably of only limited use to document authors/end users. +%% +%% langsci-affiliations was developed at Language Science Press to help in the +%% production of scientific texts in linguistics. +%% +%% Copyright (C) 2021 by Felix Kopecky, Language Science Press +%% +%% This work consists of the file langsci-affiliations.dtx +%% and the derived files langsci-affiliations.ins, +%% langsci-affiliations.pdf. +%% +%% It may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License (LPPL), either version 1.3c of this +%% license or (at your option) any later version. The latest version +%% of this license is at . +%% +%% This work is ``maintained'' (per LPPL maintenance status) by +%% Felix Kopecky . +%% +%% The development version can be found at +%% +%% https://github.com/langsci/langsci-affiliations +%% +%% for those who are interested. Pull requests are welcome. +%% +%% Please report any bugs or feature requests to +%% +%% https://github.com/langsci/langsci-affiliations/issues +%% +%% ------------------------------------------------------------------------------ + + +\RequirePackage{xparse} +\ProvidesExplPackage {langsci-affiliations} +{2021-02-17} {1.0.0} +{A LaTeX3 package to collect and order authors and affiliations} + +\NewDocumentCommand{\ResolveAffiliations}{ O{} +m } + {% + \group_begin: + \keys_set:nn { affiliations } { #1 }% + \exp_args:No \affiliations_resolve:n { #2 }% + \group_end: + } + +\NewDocumentCommand{\SetupAffiliations}{ m } + {% + \keys_set:nn { affiliations } { #1 } + } +\keys_define:nn { affiliations } + { + mark~style .tl_set:N + = \l__affiliations_style_tl, + mark~style .initial:n + = { alphabetic }, + output~affiliation .bool_set:N + = \l__affiliations_output_affiliation_bool, + output~affiliation .initial:n + = { true }, + output~in~groups .bool_set:N + = \l__affiliations_output_grouped_bool, + output~in~groups .initial:n + = { true }, + separator~between~two .tl_set:N + = \l__affiliations_separator_between_two_tl, + separator~between~two .initial:n + = {~\&~}, + separator~between~multiple .tl_set:N + = \l__affiliations_separator_between_mult_tl, + separator~between~multiple .initial:n + = {,~}, + separator~between~final~two .tl_set:N + = \l__affiliations_separator_between_last_two_tl, + separator~between~final~two .initial:n + = {~\&~}, + separator~between~affiliations .tl_set:N + = \l__affiliations_afil_separator_tl, + separator~between~affiliations .initial:n + = {,}, + output~authors~font .cs_set:Np + = \__affiliations_output_authors_font:, + output~authors~font .initial:n + = {\Large}, + output~affiliation~font .cs_set:Np + = \__affiliations_output_affiliation_font:, + output~affiliation~font .initial:n + = {\normalsize}, + input~names~separator .tl_set:N + = \l__affiliations_input_names_sep_tl, + input~names~separator .initial:n + = {~and~}, + input~affiliation~separator .tl_set:N + = \l_affiliations_input_afil_sep_tl, + input~affiliation~separator .initial:n + = {;} + } + +\cs_generate_variant:Nn \prop_put:Nnn { Nxx } +\cs_generate_variant:Nn \prop_put:Nnn { Nnx } +\cs_generate_variant:Nn \seq_set_split:Nnn { NVn } +\clist_new:N \l__affiliations_tmpa_clist +\int_new:N \l__affiliations_tmpa_int +\prop_new:N \l__affiliations_tmpa_prop +\seq_new:N \l__affiliations_affiliations_seq +\seq_new:N \l__affiliations_authors_seq +\seq_new:N \l__affiliations_names_seq +\seq_new:N \l__affiliations_tmpa_seq +\seq_new:N \l__affiliations_tmpb_seq +\tl_new:N \l__affiliations_tmpa_tl +\tl_new:N \l__affiliations_tmpb_tl +\prop_new:N \l__affiliations_output_prop +\prop_new:N \l__affiliations_affiliations_prop +\prop_const_from_keyval:Nn \l__affiliations_icons_prop + { + 0 = \char"2460, 1 = \char"2461, 2 = \char"2462, 3 = \char"2463, + 4 = \char"2464, 5 = \char"2465, 6 = \char"2466, 7 = \char"2467, + 8 = \char"2468, 9 = \char"2469, 10 = \char"246A, 11 = \char"246B, + 12 = \char"246C, 13 = \char"246D, 14 = \char"246E, 15 = \char"246F, + 16 = \char"2470, 17 = \char"2471, 18 = \char"2472, 19 = \char"2473 + } +\cs_new:Npn \__affiliations_resolve_affiliations: #1#2 + { + \clist_clear:N \l__affiliations_tmpa_clist + \tl_if_empty:nTF {#2} + { + \prop_put:Nnn \l__affiliations_output_prop {#1} {} + } + { + \seq_set_split:NVn \l__affiliations_tmpa_seq + \l_affiliations_input_afil_sep_tl + { #2 } + \seq_map_inline:Nn \l__affiliations_tmpa_seq + { + \prop_get:NnNTF \l__affiliations_affiliations_prop + {##1} + \l__affiliations_tmpa_tl + { + \clist_put_right:NV \l__affiliations_tmpa_clist + \l__affiliations_tmpa_tl + } + { + %Not yet present + \clist_put_right:Nx \l__affiliations_tmpa_clist + { + \prop_count:N \l__affiliations_affiliations_prop + } + \prop_put:Nnx \l__affiliations_affiliations_prop {##1} + { \prop_count:N \l__affiliations_affiliations_prop } + } + } + \prop_put:NnV \l__affiliations_output_prop + {#1} + \l__affiliations_tmpa_clist + } + } +\cs_new:Nn \__affiliations_output_affiliations: + { + \prop_map_inline:Nn \l__affiliations_affiliations_prop + { + \int_set:Nn \l__affiliations_tmpa_int { ##2 } + \str_case_e:nn { \l__affiliations_style_tl } + { + {alphabetic} + { + \textsuperscript{\int_to_alph:n{ \int_eval:n + { \l__affiliations_tmpa_int + 1 } + } } + } + {numeric} + { \textsuperscript{\int_eval:n {\l__affiliations_tmpa_int + 1} } } + {circled} + { + \prop_item:Nn \l__affiliations_icons_prop + {\l__affiliations_tmpa_int} + } + {none} { } + } + ##1 ~ + } + } +\cs_new:Npn \__affiliations_return_afil_text:n #1 + { + \int_set:Nn \l__affiliations_tmpa_int { #1 } + \str_case_e:nn { \l__affiliations_style_tl } + { + {alphabetic} + { + \seq_put_right:Nx \l__affiliations_tmpb_seq + { \int_to_alph:n{ \int_eval:n {#1 + 1} } } + } + {numeric} + { + \seq_put_right:Nx \l__affiliations_tmpb_seq + { \int_eval:n {\l__affiliations_tmpa_int + 1} } + } + {circled} + { + \seq_put_right:Nx \l__affiliations_tmpb_seq + { \prop_item:Nn \l__affiliations_icons_prop + { \l__affiliations_tmpa_int} } + } + {none} { } + } + } + +\cs_new:Nn \__affiliations_output_authors: + { + \seq_clear:N \l__affiliations_tmpa_seq + \prop_map_inline:Nn \l__affiliations_output_prop + { + \seq_clear:N \l__affiliations_tmpb_seq + \clist_map_function:nN {##2} \__affiliations_return_afil_text:n + \tl_set:Nn \l__affiliations_tmpb_tl + { + \seq_use:Nn \l__affiliations_tmpb_seq + {\l__affiliations_afil_separator_tl} + } + \seq_put_right:Nx \l__affiliations_tmpa_seq + { + \tl_rescan:nn {} {##1} + \exp_not:N \textsuperscript{\tl_use:N \l__affiliations_tmpb_tl} + } + } + \seq_use:Nnnn \l__affiliations_tmpa_seq + {\l__affiliations_separator_between_two_tl} + {\l__affiliations_separator_between_mult_tl} + {\l__affiliations_separator_between_last_two_tl} + } + +\cs_new:Npn \affiliations_resolve:n #1 + { + \seq_set_split:NVn \l__affiliations_names_seq + \l__affiliations_input_names_sep_tl + { #1 } + \seq_map_inline:Nn \l__affiliations_names_seq + { + \seq_clear_new:N \l__affiliations_names_tmp_seq + \seq_set_split:Nnn \l__affiliations_names_tmp_seq { \affiliation } + { ##1 } + \prop_put:Nxx \l__affiliations_tmpa_prop + { \seq_item:Nn \l__affiliations_names_tmp_seq {1} } + { \seq_item:Nn \l__affiliations_names_tmp_seq {2} } + } + \bool_if:NTF \l__affiliations_output_affiliation_bool + { + \bool_if:NTF \l__affiliations_output_grouped_bool + { + \prop_map_function:NN \l__affiliations_tmpa_prop + \__affiliations_resolve_affiliations: + \group_begin: + \__affiliations_output_authors_font: + \__affiliations_output_authors: + \group_end:\\[0.5ex] + \group_begin: + \__affiliations_output_affiliation_font: + \__affiliations_output_affiliations: + \group_end: + } + { + \prop_map_inline:Nn \l__affiliations_tmpa_prop + { + \__affiliations_output_authors_font: + \tl_rescan:nn {} {##1}\\[0.5ex] + \group_begin: + \__affiliations_output_affiliation_font: + \tl_rescan:nn {} {##2} + \group_end: + \medskip\\ + } + } + } + { + \group_begin: + \__affiliations_output_authors_font: + \seq_clear:N \l__affiliations_tmpa_seq + \prop_map_inline:Nn \l__affiliations_tmpa_prop + { + \seq_put_right:Nx \l__affiliations_tmpa_seq + {\tl_rescan:nn {} {##1} } + } + \seq_use:Nnnn \l__affiliations_tmpa_seq + {\l__affiliations_separator_between_two_tl} + {\l__affiliations_separator_between_mult_tl} + {\l__affiliations_separator_between_last_two_tl} + \group_end: + } + } + +%% +%% +%% End of file `langsci-affiliations.sty'. -- cgit v1.2.3