\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{abbrev-ref}[2016/08/22 LaTeX2e Package for abbreviated references] \RequirePackage{zref-user, zref-counter} \RequirePackage{expl3} \setcounter{secnumdepth}{5} % fünf Ebenen \renewcommand*{\thesection}{\Alph{section}.} \renewcommand*{\thesubsection}{\Roman{subsection}.} \renewcommand*{\thesubsubsection}{\arabic{subsubsection}.} \renewcommand*{\theparagraph}{\alph{paragraph})}%) \renewcommand*{\thesubparagraph}{\alph{subparagraph}\alph{subparagraph})} %\makeatletter address@hidden@section} address@hidden@subsection} address@hidden@subsubsection} address@hidden@paragraph} address@hidden@subparagraph} address@hidden address@hidden address@hidden address@hidden address@hidden \ExplSyntaxOn \newcommand\secref[1]{% \hyperref[#1]{% \int_compare:nTF {% A.-Ebene prüfen: sind wir auf dem gleichen Zweig? address@hidden {#1} {section} {0} = address@hidden } { % Ja, wir sind auf dem gleichen Zweig % Existiert eine weitere Ebene? \int_compare:nTF address@hidden {#1} {subsection} {0} = 0} % Wenn subsection 0 ist, also nicht existiert, dann muss section ausgegeben % werden. { % \emph{Fehlerhafter Verweis} \int_to_Alph:n address@hidden {#1} {section} {0}}. } % Wenn dagegen subsection existiert, dann geht die Prüfung weiter: { % OK, weitere ebene existiert. \int_compare:nTF % I.-Ebene { address@hidden {#1} {subsection} {0} = address@hidden }% Sind wir auf der gleichen I.-Ebene? {% I.-Ebene: Gleiche Ebene % Prüfung: gibt es eine weitere Ebene? \int_compare:nTF address@hidden {#1} {subsubsection} {0} = 0} {% Wenn 0, dann keine weitere Ebene und subsection ausgeben: \int_to_Roman:n address@hidden {#1} {subsection} {0}}. } {% OK, weitere Ebene existiert \int_compare:nTF % subsubsection-Ebene {% 1.-Ebene prüfen address@hidden {#1} {subsubsection} {0} = address@hidden } {% 1.-Ebene ist gleich %Prüfung: gibt es eine weitere Ebene? \int_compare:nTF % Gibt es eine a-Ebene? address@hidden {#1} {paragraph} {0} = 0} {% Wenn 0, dann keine weitere Ebene und subsubsection ausgeben: \int_to_arabic:n { address@hidden {#1} {subsubsection} {0}}. } {% Paragraph existiert: \int_compare:nTF % a-Ebene prüfen { address@hidden {#1} {paragraph} {0} = address@hidden } {% a-Ebene ist gleich % Prüfung: aa-Ebene vorhanden? \int_compare:nTF % { address@hidden {#1} {subparagraph} {0} = 0} % {%( damit emacs happy ist \int_to_alph:n address@hidden {#1} {paragraph} {0} }) } {% aa-Ebene vorhanden \int_compare:nTF address@hidden {#1} {subparagraph} {0} = address@hidden {\emph{Fehlerhafter VERWEIS}} %( make emacs happy {\int_to_alph:n { address@hidden {#1} {subparagraph} {0} } \int_to_alph:n { address@hidden {#1} {subparagraph} {0} }) } } } {% a-Ebene ist unterschiedlich ( \int_to_alph:address@hidden {#1} {paragraph} {0}}) } } } {% 1.-Ebene ist unterschiedlich \int_to_arabic:address@hidden {#1} {subsubsection} {0}}. } }% 3. Klammer Prüfung, ob subsection existiert (also wenn ja) } {% I.-Ebene: ungleich % Also römische Nummer ausgeben \int_to_Roman:address@hidden {#1} {subsection} {0}}.% \int_compare:nTF%existiert die nächste Ebene? { address@hidden {#1} {subsubsection} {0} = 0 } {}% = 0, subsubsection nicht vorhanden {% ungleich 0 % also arabische Zahl ausgeben \int_to_arabic:n { address@hidden {#1} {subsubsection} {0}}. \int_compare:nTF%existiert die nächste Ebene paragraph? { address@hidden {#1} {paragraph} {0} = 0 } {}% = 0, subsubsection nicht vorhanden {% ungleich 0 ( \int_to_alph:n { address@hidden {#1} {paragraph} {0}}) } % subpar Ebene vorhanden? \int_compare:nTF { address@hidden {#1} {subparagraph} {0} = 0} {}% ja, also existiert subpar nicht { %( \int_to_alph:n address@hidden {#1} {subparagraph} {0}} \int_to_alph:n address@hidden {#1} {subparagraph} {0}}) } } }% 3. Klammer I.-Ebene }% 3. Klammer Prüfung, ob I. Ebene besteht. }% 2. Klammer A.-Ebene {% A.-Ebene: Ungleich %ref is from other section \int_to_Alph:n address@hidden {#1} {section} {0}}. \int_compare:nTF%existiert die nächste Ebene? { address@hidden {#1} {subsection} {0} = 0 } {}% ja, erfüllt, keine subsection {% subsection existiert: \int_to_Roman:n address@hidden {#1} {subsection} {0}}. \int_compare:nTF%existiert die nächste Ebene? { address@hidden {#1} {subsubsection} {0} = 0 } {}% = 0, subsubsection nicht vorhanden {% ungleich 0 \int_to_arabic:n { address@hidden {#1} {subsubsection} {0} }. \int_compare:nTF%existiert die nächste Ebene paragraph? { address@hidden {#1} {paragraph} {0} = 0 } {}% = 0, paragraph nicht vorhanden {% ungleich 0 ( \int_to_alph:n { address@hidden {#1} {paragraph} {0} }) \int_compare:nTF { address@hidden {#1} {subparagraph} {0} = 0} {}% ja, also existiert subpar nicht {% ( \int_to_alph:n address@hidden {#1} {subparagraph} {0}} \int_to_alph:n address@hidden {#1} {subparagraph} {0}}) } } } } }% 3. Klammer A.-Ebene }% hyperref Klammer zu }%Ende Befehlsdefinition myref \ExplSyntaxOff %\makeatother \usepackage[]{hyperref} \newcommand\seclabel[1]{\zlabel{#1}\label{#1}} \endinput