Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \documentclass{article}
- \usepackage{xparse}
- \newlength{\boldAcrwidth}
- \setlength{\boldAcrwidth}{2cm}
- \ExplSyntaxOn
- \cs_new_eq:NN \sctale_str_if_eq:nn \__str_if_eq:nn
- \cs_generate_variant:Nn \sctale_str_if_eq:nn { oo }
- \cs_new:Npn \__sctale_acro:w #1 \q_mark #2 \q_stop {#1}
- \seq_new:N \l__sctale_acro_seq
- \NewDocumentEnvironment { acroenv } { }
- { \seq_clear:N \l__sctale_acro_seq }
- {
- \seq_sort:Nn \l__sctale_acro_seq
- {
- \int_compare:nNnTF
- {
- \sctale_str_if_eq:oo
- { \__sctale_acro:w ##1 \q_stop }
- { \__sctale_acro:w ##2 \q_stop }
- }
- < 0
- { \sort_return_same: }
- { \sort_return_swapped: }
- }
- \seq_map_function:NN \l__sctale_acro_seq \__sctale_put_acro:n
- }
- \cs_new:Npn \__sctale_put_acro:n #1 { \__sctale_put_acro:w #1 \q_stop }
- \cs_new:Npn \__sctale_put_acro:w #1 \q_mark #2 \q_stop
- { \boldAcroPut{#1}{#2} }
- \cs_new_eq:NN \dont \prg_do_nothing:
- \NewDocumentCommand { \boldAcr }{ >{\SplitList{~}} m }
- {
- \tl_set:Nx \l__sctale_tmpa_tl { \tl_map_function:nN {#1} \__sctale_make_acro:n }
- \seq_put_right:No \l__sctale_acro_seq { \l__sctale_tmpa_tl \q_mark {#1} }
- }
- \cs_new:Npn \__sctale_make_acro:n #1 { \__sctale_make_acro:w #1 \q_nil }
- \cs_new:Npn \__sctale_make_acro:w #1 #2 \q_nil
- {
- \token_if_eq_meaning:NNTF #1 \dont
- { } { #1 }
- }
- \ExplSyntaxOff
- \NewDocumentCommand{\boldAcroPut}{mm}{%
- \noindent
- \makebox[\boldAcrwidth][l]{\bfseries\textit{\MakeUppercase{#1}}}%
- \ProcessList{#2}{\boldAcrFirst}%
- \unskip\par%
- }
- \NewDocumentCommand{\boldAcrFirst}{m}{%
- \boldAcrFirstAux#1 % we want a space
- }
- \NewDocumentCommand{\boldAcrFirstAux}{m}{%
- \textbf{\MakeUppercase{#1}}%
- }
- \begin{document}
- \begin{acroenv}
- \boldAcr{open web application security project}
- \boldAcr{open web application security project}
- \end{acroenv}
- \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement