Сокращенные ссылки: только необходимые ссылки, не более.

Сокращенные ссылки: только необходимые ссылки, не более.

Юридические отчеты в Германии часто используют несколько странный способ структурирования. Вместо обычных цифр у нас есть

А.

(Б., КД ...) для первого уровня,

Я.

-- Римские цифры для второго уровня

1.

арабские цифры для третьего уровня

а)

б), в), г) ... для четвертого уровня и

аа)

bb), cc), dd) для пятого уровня.

Я реализовал это в следующем почти минимальном примере. Я бы хотел иметь сокращенные ссылки. Если вы читаете в разделе »B.« и есть ссылка на подраздел »B.II.«, достаточно напечатать »II.«. Но если вы читаете в разделе A., вам нужно »B.II.«. Если вы ссылаетесь из B.II.3.a)cc) на что-то в B.II.3.a)bb), вывод, \refочевидно, должен быть не B.II.3.a)bb), а просто bb). Если вы находитесь в B.II.4., ссылка должна быть 3.a)bb).

Но если вы ссылаетесь откуда-то из CI1., то полная ссылка необходима на B.II.3.a)bb).

Специальный запрос: решение должно также включать пакет varioref.

Jura documentclass предоставляет такую ​​ссылку. Но я завишу от KOMA-script по многим причинам. Поэтому я попытался взять код из jura.dtx и адаптировать его, но получаю сообщение об ошибке, которое не понимаю, см. ниже.

Итак: Могу ли я иметь ссылки, которые зависят от места, где находится \refв тексте? Любое решение приветствуется.


Измените ответ Ульрики:

Этот код всегда выдает «II.» на уровнях ниже подраздела:

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel, blindtext}

\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})}

\usepackage{zref-user,zref-counter}
\usepackage{expl3}


\makeatletter


\zref@newprop{section}[1]{\the\c@section}
\zref@newprop{subsection}[1]{\the\c@subsection}

\zref@addprop{main}{section}
\zref@addprop{main}{subsection}

\ExplSyntaxOn

\newcommand\myref[1]{%
 \hyperref[#1]{
 \int_compare:nTF
  {
   \zref@extractdefault {#1} {section} {0} = \the\c@section
  }
  {
   %ref is from current section
   \int_compare:nTF
    {\zref@extractdefault {#1} {subsection} {0}  = 0 }
    {Was~nun?}
    {\int_to_Roman:n{\zref@extractdefault {#1} {subsection} {0}}.}
  }
  {
  %ref is from other section
  \int_to_Alph:n  {\zref@extractdefault {#1} {section} {0}}.
  \int_to_Roman:n {\zref@extractdefault {#1} {subsection} {0}}
  }}}

\ExplSyntaxOff
\makeatother
%\usepackage{xcolor}
\usepackage[]{hyperref}

\newcommand\Label[1]{\zlabel{#1}\label{#1}}

\begin{document}

\section{First}
\Label{sec:first}

I'm refering to the second section and I'd like to have a full
reference like this: \myref{sec:secondofsecond}.

\section{Second}
\Label{sec:second}

\myref{sec:secondofsecond}, \myref{sec:first}, \myref{sec:second} And lets test the
new references, see \myref{CLA:first-paragraph} or \myref{CLA:first-second.second}

\subsection{Firstofsecond}
\Label{sec:firstofsecond}

Text.

\subsection{Secondofsecond}
\Label{sec:secondofsecond}

Now down the tree:

\subsubsection{first of second.second}
\Label{CLA:first-second.second}

Just some letters. 

\paragraph{first-paragraph}
\Label{CLA:first-paragraph}

And more text. 



\end{document}

Это мой предыдущий MWE, который сейчас уже немного устарел:

\documentclass[english, parskip=half, numbers=noendperiod]{scrartcl}
\usepackage[T1]{fontenc}\usepackage[utf8]{inputenc}
\usepackage{babel, blindtext}

\setcounter{secnumdepth}{5} % five levels

\renewcommand*{\thesection}{\Alph{section}.}
\renewcommand*{\thesubsection}{\Roman{subsection}.}
\renewcommand*{\thesubsubsection}{\arabic{subsubsection}.}
\renewcommand*{\theparagraph}{\alph{paragraph})}%)
\renewcommand*{\thesubparagraph}{\alph{subparagraph}\alph{subparagraph})}
\renewcommand*{\paragraphformat}{\theparagraph{}\enskip}
\renewcommand*{\subparagraphformat}{%
  \thesubparagraph{}\enskip}

\makeatletter
\renewcommand{\p@subsection}{\thesection}
\renewcommand{\p@subsubsection}{\thesection\thesubsection}
\renewcommand{\p@paragraph}{\thesection\thesubsection\thesubsubsection}
\renewcommand{\p@subparagraph}{\thesection\thesubsection\thesubsubsection\theparagraph\,}
\makeatother{}

\begin{document}

\section{First}
\label{sec:first}

I'm refering to the second section and I'd like to have a full
reference like this: \ref{sec:secondofsecond}. 

\section{Second}
\label{sec:second}

\subsection{Firstofsecond}
\label{sec:firstofsecond}

Text.

\subsection{Secondofsecond}
\label{sec:secondofsecond}

But now I'm refering to »Firstofsecond« and my readers do not need the
full reference (\ref{sec:firstofsecond}), simply »I.« would be sufficient.

From here a reference to »first of second / second« should look like
this: »1.« and not \ref{sec:first-second-second}

\subsubsection{First of second / second}
\label{sec:first-second-second}

text.

\end{document}

Хорошо, а теперь к идее повторного использования кода устаревшего jura.dtx

Следуя совету jknappen, я попытался использовать код jura.dtx для именно того поведения, которое мне хотелось бы иметь. Я изменил код на:

%\documentclass[english, parskip=half, numbers=noendperiod]{scrartcl}
\documentclass[english]{article}
\usepackage[T1]{fontenc}\usepackage[utf8]{inputenc}
\usepackage{babel, blindtext}

\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})}

%% Code stolen from jura.dtx
\makeatletter{}
\newcommand*{\@greek}[1]{\ifcase#1\relax\or$\alpha$\or$\beta$\or
$\gamma$\or$\delta$\or$\varepsilon$\or$\zeta$\or$\eta$\or$\vartheta$\or
$\iota$\or$\kappa$\or$\lambda$\or$\mu$\or$\nu$\or$\xi$\or$o$\or$\pi$\or
$\rho$\or$\sigma$\or$\tau$\or$\upsilon$\or$\varphi$\or$\chi$\or$\psi$\or
$\omega$\else\@ctrerr\fi}
\newcounter{lvla}
\newcounter{lvlb}
\newcounter{lvlc}
\newcounter{lvld}
\newcounter{lvle}
\newcounter{lvlf}
\newcounter{lvlg}
\newcounter{lvlh}
\newcounter{lvli}
\newcounter{lvlj}
\newcounter{lvlk}
\newcounter{lvll}
\renewcommand*{\thelvla}{\J@Number}
\renewcommand*{\thelvlb}{\J@Number}
\renewcommand*{\thelvlc}{\J@Number}
\renewcommand*{\thelvld}{\J@Number}
\renewcommand*{\thelvle}{\J@Number}
\renewcommand*{\thelvlf}{\J@Number}
\renewcommand*{\thelvlg}{\J@Number}
\renewcommand*{\thelvlh}{\J@Number}
\renewcommand*{\thelvli}{\J@Number}
\renewcommand*{\thelvlj}{\J@Number}
\renewcommand*{\thelvlk}{\J@Number}
\renewcommand*{\thelvll}{\J@Number}

\newcounter{tiefe}\setcounter{tiefe}{1}
%\setcounter{tocdepth}{12}
%\setcounter{secnumdepth}{12}
\newcommand*{\J@Number}{\J@NumberRoot{\value{tiefe}}%
\J@NumberEnd{\value{tiefe}}}
\newcommand*{\J@NumberRoot}[1]{\J@INumberRoot{#1}%
{\csname c@lvl\@alph{#1}\endcsname}}
\newcommand*{\J@INumberRoot}[2]{%
\ifcase#1\or
\@Alph{#2}\or
\@Roman{#2}\or
\@arabic{#2}\or
\@alph{#2}\or
\@alph{#2}\@alph{#2}\or
\@greek{#2}\or
\@greek{#2}\@greek{#2}\or
(\@arabic{#2})\or
(\@alph{#2})\or
(\@alph{#2}\@alph{#2})\or
(\@greek{#2})\or
(\@greek{#2}\@greek{#2})\fi}
\newcommand*{\J@NumberEnd}[1]{\ifnum#1<8\ifnum#1<4.\else)\fi\fi}

\newcommand*{\J@SetCurrent}{\xdef\@currentlabel{{\arabic{lvla}}%
{\arabic{lvlb}}{\arabic{lvlc}}{\arabic{lvld}}{\arabic{lvle}}%
{\arabic{lvlf}}{\arabic{lvlg}}{\arabic{lvlh}}{\arabic{lvli}}%
{\arabic{lvlj}}{\arabic{lvlk}}{\arabic{lvll}}}}

\ifnum\value{lvl\alph{tiefe}}=1%
\PackageWarning{alphanum}{only one subitem in level "\J@Number" ending}%
\fi
\setcounter{lvl\alph{tiefe}}{0}
\addtocounter{tiefe}{-1}

\renewcommand*{\ref}{%
\@ifstar{\@tempswatrue\J@ref}{\@tempswafalse\J@ref}}
\newcommand*{\J@ref}[1]{%
\expandafter\ifx\csname r@#1\endcsname\relax
 \protect\G@refundefinedtrue
 \nfss@text{\reset@font\bfseries ??}
 \@latex@warning{Reference '#1' on page \thepage \space undefined}%
\else
 \expandafter\J@refX\csname r@#1\endcsname
\fi
}
\newcommand*{\J@refX}[1]{\expandafter\J@refXX#1}
\newcommand*{\J@refXX}[2]{%
\ifcat_\ifnum9<1#1_\else X\fi
  #1%
\else
  \expandafter\J@refA#1%
\fi}
\newcommand*{\J@refA}[6]{\@tempcnta\@ne%
\J@refP1{#1}0\J@refP2{#2}{#1}\J@refP3{#3}{#2}\J@refP4{#4}{#3}%
\J@refP5{#5}{#4}\J@refP6{#6}{#5}\J@refB#6}
\newcommand*{\J@refB}[7]{\J@refP7{#2}{#1}\J@refP8{#3}{#2}%
\J@refP9{#4}{#3}\J@refP{10}{#5}{#4}\J@refP{11}{#6}{#5}%
\J@refP{12}{#7}{#6}\J@NumberEnd\@tempcnta}
\newcommand*{\J@refP}[3]{%
\if@tempswa%
 \ifnum#2>0\@tempcnta#1\,\J@INumberRoot{#1}{#2}\fi
\else%
 \ifnum#2=\value{lvl\@alph{#1}}%
  \ifnum#1=12\PackageError{alphanum}{Self-reference detected!}{You used
    a \protect\ref\space in the same section as the referenced
    \protect\label\MessageBreak That makes no sense!}\fi
 \else
  \ifnum#2>0\@tempcnta#1\@tempswatrue\J@INumberRoot{#1}{#2}\else
   \ifnum#3>0%
   \@tempcnta#1\advance\@tempcnta-1\relax\J@INumberRoot{\@tempcnta}{#3}%
   \fi
  \fi
 \fi
\fi}

\makeatother{}




\begin{document}

\section{First}
\label{sec:first}

I'm refering to the second section and I'd like to have a full
reference like this: \ref{sec:secondofsecond}. 

\section{Second}
\label{sec:second}

\subsection{Firstofsecond}
\label{sec:firstofsecond}

Text.

\subsection{Secondofsecond}
\label{sec:secondofsecond}

But now I'm refering to »Firstofsecond« and my readers do not need the
full reference (\ref{sec:firstofsecond}), simply »I.« would be sufficient.

From here a reference to »first of second / second« should look like
this: »1.« and not \ref{sec:first-second-second}

\subsubsection{First of second / second}
\label{sec:first-second-second}

text.


\end{document}

К сожалению, имеется ошибка (имя файла: kurze-verweise-mwe.tex):

./kurze-verweise-mwe.tex:134: Missing number, treated as zero.
<to be read again> 
                   I
l.134 ...ence like this: \ref{sec:secondofsecond}.

./kurze-verweise-mwe.tex:134: Missing = inserted for \ifnum.
<to be read again> 

Есть ли здесь кто-нибудь, у кого есть время и желание найти решение для одного из двух примеров?

введите описание изображения здесь

решение1

Теоретически это не очень сложно. Вы можете использовать zref для хранения всех различных значений раздела, подраздела и т. д. метки, а затем вам нужно будет только проверить их значения и сравнить с текущими значениями и решить, что должно произойти.

На практике это может быть немного утомительно, если вы действительно хотите сделать это для всех уровней, так как тестов довольно много, и обычно требуется большой лист бумаги, чтобы правильно пройти все ветви (я никогда не делаю этого с первой попытки).

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel, blindtext}

\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})}

\usepackage{zref-user,zref-counter}
\usepackage{expl3}


\makeatletter


\zref@newprop{section}[1]{\the\c@section}
\zref@newprop{subsection}[1]{\the\c@subsection}

\zref@addprop{main}{section}
\zref@addprop{main}{subsection}

\ExplSyntaxOn

\newcommand\myref[1]{%
 \hyperref[#1]{
 \int_compare:nTF
  {
   \zref@extractdefault {#1} {section} {0} = \the\c@section
  }
  {
   %ref is from current section
   \int_compare:nTF
    {\zref@extractdefault {#1} {subsection} {0}  = 0 }
    {Was~nun?}
    {\int_to_Roman:n{\zref@extractdefault {#1} {subsection} {0}}.}
  }
  {
  %ref is from other section
  \int_to_Alph:n  {\zref@extractdefault {#1} {section} {0}}.
  \int_to_Roman:n {\zref@extractdefault {#1} {subsection} {0}}
  }}}

\ExplSyntaxOff
\makeatother
%\usepackage{xcolor}
\usepackage[]{hyperref}

\newcommand\Label[1]{\zlabel{#1}\label{#1}}

\begin{document}

\section{First}
\Label{sec:first}

I'm refering to the second section and I'd like to have a full
reference like this: \myref{sec:secondofsecond}.

\section{Second}
\Label{sec:second}

\myref{sec:secondofsecond}, \myref{sec:first}, \myref{sec:second}

\subsection{Firstofsecond}
\Label{sec:firstofsecond}

Text.

\subsection{Secondofsecond}
\Label{sec:secondofsecond}

\end{document}

введите описание изображения здесь

решение2

Знаете ли вы опакет юра? Хотя он довольно старый и не имеет поддержки, он обеспечивает прекрасную структуру уровней, которую вы набросали (и идет еще ниже, до уровней, обозначенных α) β) и αα) ββ)

EDIT: Обратите внимание, что разметка документа, введенная с помощью jura(или с \usepackage{alphanum}помощью которой содержится структура уровня), несовместима с обычными командами секционирования LaTeX (например, \sectionи т. д.). Вы должны использовать juraстиль секционирования с использованием \toc, \sub, и \levelup.

решение3

TheотвечатьизУльрике Фишеруказал мне путь, и после целого дня размышлений я нашел следующее решение.

Вероятно, это самый низкий уровень кодирования, который вы когда-либо прочтете, так что будьте осторожны. Если кто-то предложит лучшее решение: очень хорошо!

Но без щедрой помощи Ульрике это было бы невозможно, большое спасибо!

Некоторые комментарии на немецком, извините, сейчас уже поздно, и я сомневаюсь, что завтра пойму, что я написал сегодня! Ах да, и различные бесполезные "(" в комментариях нужны для того, чтобы порадовать Emacs, который иначе не сопоставляет "{" и "}".

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel, blindtext}

\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})}

\usepackage{zref-user, zref-counter}
\usepackage{expl3}


\makeatletter


\zref@newprop{section}[1]{\the\c@section}
\zref@newprop{subsection}[1]{\the\c@subsection}
\zref@newprop{subsubsection}[1]{\the\c@subsubsection}
\zref@newprop{paragraph}[1]{\the\c@paragraph}
\zref@newprop{subparagraph}[1]{\the\c@subparagraph}

\zref@addprop{main}{section}
\zref@addprop{main}{subsection}
\zref@addprop{main}{subsubsection}
\zref@addprop{main}{paragraph}
\zref@addprop{main}{subparagraph}

\ExplSyntaxOn

\newcommand\myref[1]{%
 \hyperref[#1]{%
  \int_compare:nTF
  {% A.-Ebene prüfen: sind wir auf dem gleichen Zweig? 
   \zref@extractdefault {#1} {section} {0} = \the\c@section
  }
  { % Ja, wir sind auf dem gleichen Zweig
    % Existiert eine weitere Ebene?
    \int_compare:nTF
    {\zref@extractdefault {#1} {subsection} {0}  = 0}
    % Wenn subsection 0 ist, also nicht existiert, dann muss section ausgegeben
    % werden. 
    {
     % \emph{Fehlerhafter Verweis}
    \int_to_Alph:n  {\zref@extractdefault {#1} {section} {0}}.
    }
    % Wenn dagegen subsection existiert, dann geht die Prüfung weiter:
    {
     % OK, weitere ebene existiert. 
     \int_compare:nTF % I.-Ebene
      {
        \zref@extractdefault {#1} {subsection} {0}  = \the\c@subsection 
      }% Sind wir auf der gleichen I.-Ebene?
      {% I.-Ebene: Gleiche Ebene
        % Prüfung: gibt es eine weitere Ebene?
        \int_compare:nTF
        {\zref@extractdefault {#1} {subsubsection} {0} = 0}
        {% Wenn 0, dann keine weitere Ebene und subsection ausgeben:
          \int_to_Roman:n {\zref@extractdefault {#1} {subsection} {0}}.
        }
        {% OK, weitere Ebene existiert
              \int_compare:nTF % subsubsection-Ebene
                {% 1.-Ebene prüfen
                  \zref@extractdefault {#1} {subsubsection} {0} = \the\c@subsubsection  
                }
                {% 1.-Ebene ist gleich
                  %Prüfung: gibt es eine weitere Ebene?
                  \int_compare:nTF % Gibt es eine a-Ebene?
                  {\zref@extractdefault {#1} {paragraph} {0} =  0}
                  {% Wenn 0, dann keine weitere Ebene und subsubsection ausgeben:
                    \int_to_arabic:n { \zref@extractdefault {#1} {subsubsection} {0}}.
                  }
                  {% Paragraph existiert:
                   \int_compare:nTF % a-Ebene prüfen
                    {
                      \zref@extractdefault {#1} {paragraph} {0} =  \the\c@paragraph
                    }
                    {% a-Ebene ist gleich
                      % Prüfung: aa-Ebene vorhanden?
                      \int_compare:nTF % 
                      { \zref@extractdefault {#1} {subparagraph} {0} =  0}
                      %
                      {%( damit emacs happy ist
                        \int_to_alph:n {\zref@extractdefault {#1} {paragraph} {0} })
                      }
                      {% aa-Ebene vorhanden
                        \int_compare:nTF
                        {\zref@extractdefault {#1} {subparagraph} {0} = \the\c@subparagraph}
                        {\emph{Fehlerhafter VERWEIS}}
                        %( make emacs happy
                        {\int_to_alph:n { \zref@extractdefault {#1} {subparagraph}   {0}   }
                        \int_to_alph:n { \zref@extractdefault {#1} {subparagraph} {0}   })
                        }
                      }
                    }
                    {% a-Ebene ist unterschiedlich (
                      \int_to_alph:n{\zref@extractdefault {#1} {paragraph} {0}})
                    }
                  }
                }
                {% 1.-Ebene ist unterschiedlich 
                  \int_to_arabic:n{\zref@extractdefault {#1} {subsubsection} {0}}.
                }
         }% 3. Klammer Prüfung, ob subsection existiert (also wenn ja)
    }   
     {% I.-Ebene: ungleich
       % Also römische Nummer ausgeben
         \int_to_Roman:n{\zref@extractdefault {#1} {subsection} {0}}.%
          \int_compare:nTF%existiert die nächste Ebene?
           { \zref@extractdefault {#1} {subsubsection} {0} = 0 }
           {}% = 0, subsubsection nicht vorhanden
           {% ungleich 0
            % also arabische Zahl ausgeben
             \int_to_arabic:n { \zref@extractdefault {#1} {subsubsection} {0}}.
               \int_compare:nTF%existiert die nächste Ebene paragraph?
               { \zref@extractdefault {#1} {paragraph} {0} = 0 }
               {}% = 0, subsubsection nicht vorhanden
               {% ungleich 0 (
                 \int_to_alph:n { \zref@extractdefault {#1} {paragraph} {0}})
               }
               % subpar Ebene vorhanden?
               \int_compare:nTF
               { \zref@extractdefault {#1} {subparagraph} {0} = 0}
               {}% ja, also existiert subpar nicht 
               { %(
                 \int_to_alph:n {\zref@extractdefault {#1} {subparagraph} {0}}
                 \int_to_alph:n {\zref@extractdefault {#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  {\zref@extractdefault {#1} {section} {0}}.
    \int_compare:nTF%existiert die nächste Ebene?
    { \zref@extractdefault {#1} {subsection} {0} = 0 }
    {}% ja, erfüllt, keine subsection
    {% subsection existiert:
      \int_to_Roman:n {\zref@extractdefault {#1} {subsection} {0}}.
      \int_compare:nTF%existiert die nächste Ebene?
          { \zref@extractdefault {#1} {subsubsection} {0} = 0 }
          {}% = 0, subsubsection nicht vorhanden
          {% ungleich 0
            \int_to_arabic:n { \zref@extractdefault {#1} {subsubsection} {0} }.
             \int_compare:nTF%existiert die nächste Ebene paragraph?
              { \zref@extractdefault {#1} {paragraph} {0} = 0 }
              {}% = 0, paragraph nicht vorhanden
              {% ungleich 0 (
                \int_to_alph:n { \zref@extractdefault {#1} {paragraph} {0} })
                \int_compare:nTF
                { \zref@extractdefault {#1} {subparagraph} {0} = 0}
                {}% ja, also existiert subpar nicht
                {% (
                  \int_to_alph:n {\zref@extractdefault {#1} {subparagraph} {0}}
                  \int_to_alph:n {\zref@extractdefault {#1} {subparagraph} {0}})
                }
              }
          }
       }
  }% 3. Klammer A.-Ebene
}% hyperref Klammer zu
}%Ende Befehlsdefinition myref

\ExplSyntaxOff
\makeatother

\usepackage[]{hyperref}

\newcommand\Label[1]{\zlabel{#1}\label{#1}}

\begin{document}

\textbf{Präambel}

\begin{enumerate}
  \item Reference to first section: \myref{sec:first}
  \item Reference to second section: \myref{sec:second}
  \item Reference to snd section / first subsection: \myref{sec:firstofsecond}
  \item Ref. to snd sect. / second subsect: \myref{sec:secondofsecond}
  \item Ref to snd sect. / second subsect / first arabic:
  \myref{CLA:first-second.second}
  \item Ref. to snd sect. / second subsect / first arabic / second par:
  \myref{CLA:second-paragr}
  \item Subparagraph: \myref{CLA:first-sub}
\end{enumerate}


\section{First}
\Label{sec:first}

Sytematically:
\begin{enumerate}
  \item Reference to this section should display a warning: \myref{sec:first}.
  \item Reference to next section: \myref{sec:second}
  \item Reference to next section / first subsection: \myref{sec:firstofsecond}
  \item Ref. to next sect. / second subsect: \myref{sec:secondofsecond}
  \item Ref to next sect. / second subsect / first arabic:
  \myref{CLA:first-second.second}
  \item Ref. to next sect. / second subsect / first arabic / second par:
  \myref{CLA:second-paragr}
  \item Subparagraph: \myref{CLA:first-sub}
\end{enumerate}


\section{Second}
\Label{sec:second}

Sytematically:
\begin{enumerate}
  \item Reference to previous section: \myref{sec:first}.
  \item Reference to this section should display a warning: \myref{sec:second}
  \item Reference to this section / first subsection: \myref{sec:firstofsecond}
  \item Ref. to this sect. / second subsect: \myref{sec:secondofsecond}
  \item Ref to this sect. / second subsect / first arabic:
  \myref{CLA:first-second.second}
  \item Ref. to this sect. / second subsect / first arabic / second par:
  \myref{CLA:second-paragr}
  \item Subparagraph: \myref{CLA:first-sub}
\end{enumerate}


\subsection{Firstofsecond}
\Label{sec:firstofsecond}

Sytematically:
\begin{enumerate}
  \item Reference to previous section: \myref{sec:first}.
  \item Reference to this section: \myref{sec:second}
  \item Reference to this section / first subsection: \myref{sec:firstofsecond}
  \item Ref. to this sect. / second subsect: \myref{sec:secondofsecond}
  \item Ref to this sect. / second subsect / first arabic:
  \myref{CLA:first-second.second}
  \item Ref. to this sect. / second subsect / first arabic / second par:
  \myref{CLA:second-paragr}
  \item Subparagraph: \myref{CLA:first-sub}
\end{enumerate}


\subsection{Secondofsecond}
\Label{sec:secondofsecond}


Now down the tree:

\subsubsection{first of second.second}
\Label{CLA:first-second.second}

Just some letters. 

\paragraph{first-paragraph}
\Label{CLA:first-paragraph}

And more text. Ref to next paragraph, should be a b): \myref{CLA:second-paragr}

\begin{enumerate}
  \item Reference to previous section: \myref{sec:first}.
  \item Reference to this section: \myref{sec:second}
  \item Reference to this section / first subsection: \myref{sec:firstofsecond}
  \item Ref. to this sect. / second subsect: \myref{sec:secondofsecond}
  \item Ref to this sect. / second subsect / first arabic:
  \myref{CLA:first-second.second}
  \item Ref. to this sect. / second subsect / first arabic / second par:
  \myref{CLA:second-paragr}
  \item Subparagraph: \myref{CLA:first-sub}
\end{enumerate}



\paragraph{second paragr}
\Label{CLA:second-paragr}

\begin{enumerate}
  \item Reference to previous section: \myref{sec:first}.
  \item Reference to this section: \myref{sec:second}
  \item Reference to this section / first subsection: \myref{sec:firstofsecond}
  \item Ref. to this sect. / second subsect: \myref{sec:secondofsecond}
  \item Ref to this sect. / second subsect / first arabic:
  \myref{CLA:first-second.second}
  \item Ref. to this sect. / second subsect / first arabic / second par:
  \myref{CLA:second-paragr}
\end{enumerate}

\subparagraph{first sub}
\Label{CLA:first-sub}

\begin{enumerate}
  \item Reference to previous section: \myref{sec:first}.
  \item Reference to this section: \myref{sec:second}
  \item Reference to this section / first subsection: \myref{sec:firstofsecond}
  \item Ref. to this sect. / second subsect: \myref{sec:secondofsecond}
  \item Ref to this sect. / second subsect / first arabic:
  \myref{CLA:first-second.second}
  \item Ref. to this sect. / second subsect / first arabic / second par:
  \myref{CLA:second-paragr}
  \item Subparagraph: \myref{CLA:first-sub}
\end{enumerate}


dsfsdf


\subsubsection{Last one}
\Label{CLA:last-one}

text

\paragraph{paragraph somewhere}
\Label{CLA:paragraph-somewhere}

OK, the par above should display a). And now we refer to the next subpar:
\myref{CLA:second-subpar}.

And now a subpar:

\subparagraph{second subpar}
\Label{CLA:second-subpar}

text

\subparagraph{third subpar}





\end{document}

Связанный контент