\NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{PrimeTeX/packages/Links}{2025-08-17}{1.0}{ Hyperref configuration and custom label commands. } % Use Hyperref to automatically create links in the document \hypersetup{ final, colorlinks = true, pdfpagemode = UseOutlines, pdfdisplaydoctitle = true, bookmarksnumbered = true, bookmarksopen = true, bookmarksopenlevel = 2, } \ifthenelse{\boolean{isElectronic}}{ \hypersetup{ allcolors = linkColor, } }{ \hypersetup{ allcolors = textColor, pdfduplex = DuplexFlipLongEdge, pdfpagelayout = TwoPageRight, } } \RenewDocumentCommand{\chapterautorefname}{}{Chapter} \RenewDocumentCommand{\sectionautorefname}{}{Section} \RenewDocumentCommand{\subsectionautorefname}{}{Subsection} \RenewDocumentCommand{\subsubsectionautorefname}{}{Sub-subsection} \RenewDocumentCommand{\paragraphautorefname}{}{Paragraph} \bool_new:N \l_SectionLabel_success_bool \int_new:N \l_SectionLabel_slash_total_int \int_new:N \l_SectionLabel_slash_count_int \int_new:N \l_SectionLabel_char_count_int \str_new:N \l_SectionLabel_path_str \str_new:N \l_SectionLabel_part_str \str_new:N \l_SectionLabel_chapter_str \str_new:N \l_SectionLabel_section_str \str_new:N \l_SectionLabel_subsection_str \str_new:N \l_SectionLabel_subsubsection_str \str_new:N \l_SectionLabel_paragraph_str \str_new:N \l_SectionLabel_subparagraph_str % part:chapter:section:subsection:subsubsection:paragraph:subparagraph \NewDocumentCommand{\SectionLabel}{ % #1: Section Level. -1=Part, 0=Chapter, 1=Section, 2=Subsection, % 3=Sub-subsection, 4=Paragraph, 5=Subparagraph O{} % Label for the current section. m }{ \str_set:Nn \l_SectionLabel_level_str {#1} \str_set:Nn \l_SectionLabel_label_str {#2} \str_case:Nn \l_SectionLabel_level_str { {} {\int_set:Nn \l_SectionLabel_slash_total_int {0}} {-1} {\int_set:Nn \l_SectionLabel_slash_total_int {0}} {0} {\int_set:Nn \l_SectionLabel_slash_total_int {1}} {1} {\int_set:Nn \l_SectionLabel_slash_total_int {2}} {2} {\int_set:Nn \l_SectionLabel_slash_total_int {3}} {3} {\int_set:Nn \l_SectionLabel_slash_total_int {4}} {4} {\int_set:Nn \l_SectionLabel_slash_total_int {5}} {5} {\int_set:Nn \l_SectionLabel_slash_total_int {6}} {part} {\int_set:Nn \l_SectionLabel_slash_total_int {0}} {chapter} {\int_set:Nn \l_SectionLabel_slash_total_int {1}} {section} {\int_set:Nn \l_SectionLabel_slash_total_int {2}} {subsection} {\int_set:Nn \l_SectionLabel_slash_total_int {3}} {subsubsection} {\int_set:Nn \l_SectionLabel_slash_total_int {4}} {paragraph} {\int_set:Nn \l_SectionLabel_slash_total_int {5}} {subparagraph} {\int_set:Nn \l_SectionLabel_slash_total_int {6}} } \__SectionLabel_make: \expandafter\label\expandafter{\l_SectionLabel_path_str} } \NewDocumentCommand{\__SectionLabel_make:}{}{ \bool_set_false:N \l_SectionLabel_success_bool \int_set:Nn \l_SectionLabel_char_count_int {0} \int_set:Nn \l_SectionLabel_slash_count_int {0} \str_map_variable:NNn \l_SectionLabel_path_str \l_tmpa_str { %\message{{\l_tmpa_str}~slash~count:~\int_use:N \l_SectionLabel_slash_count_int\ ~slash~total:~\int_use:N \l_SectionLabel_slash_total_int^^J} \int_compare:nNnT {\l_SectionLabel_slash_count_int} = {\l_SectionLabel_slash_total_int} { \str_set:Ne \l_tmpb_str {\str_range:Nnn \l_SectionLabel_path_str {1} {\l_SectionLabel_char_count_int}} \str_concat:NNN \l_SectionLabel_path_str \l_tmpb_str \l_SectionLabel_label_str \str_map_break:n { \message{success} \bool_set_true:N \l_SectionLabel_success_bool } } \int_incr:N \l_SectionLabel_char_count_int %\message{\l_tmpa_str} \str_if_eq:VnT \l_tmpa_str {/} { %\message{increment} \int_incr:N \l_SectionLabel_slash_count_int } } \bool_if:NF \l_SectionLabel_success_bool { \int_do_until:nNnn {\l_SectionLabel_slash_count_int} = {\l_SectionLabel_slash_total_int} { \str_put_right:Nn \l_SectionLabel_path_str {/} \int_incr:N \l_SectionLabel_slash_count_int } \str_put_right:Ne \l_SectionLabel_path_str {\l_SectionLabel_label_str} } }