(под)раздел с номером, подподраздел с буквой - \ref показывает только букву

(под)раздел с номером, подподраздел с буквой - \ref показывает только букву

Когда я пробую следующий код, все работает так, как и ожидалось:

\documentclass{article}
%\renewcommand{\thesubsubsection}{\alph{subsubsection})}
\begin{document}
\section{A Section}
\subsection{A Subsection}
\subsubsection{A Subsubsection}
\label{testlabel}
Hello world.
\par
In \ref{testlabel} I wrote: Hello world.
\end{document}

Это напечатает 1.1.1.

Но если я включу команду в комментарии, я просто получу a) вместо ожидаемого 1.1.a)

На самом деле я хочу, чтобы раздел отображался как a) ..., а ссылка — как 1.1.a без скобок.

Есть идеи?

решение1

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

Для любого счетчика LaTeX макрос — это префикс, используемый в ссылках. Обычно он используется во вложенном перечислении, чтобы получить именно тот эффект, когда метка списка просто показывает один уровень, а ссылка показывает развернутую форму.\[email protected]

Макросы по умолчанию предполагают, что форма печати конечного счетчика одинакова в обоих местах, поэтому, если вы хотите избавиться от него, вам )нужен макрос префикса, чтобы удалить его, как здесь, или, как в ответе egreg, не добавлять его в формат счетчика, а вместо этого рассмотреть часть )формата заголовка раздела.

\documentclass{article}
\renewcommand{\thesubsubsection}{\alph{subsubsection})}
\makeatletter
\renewcommand{\p@subsubsection}{\thesubsection.\protect\eatbracket}
\makeatother
\def\eatbracket#1#2{#1\ifx)#2\else#2\fi}

\begin{document}
\section{A Section}
\subsection{A Subsection}
\subsubsection{A Subsubsection}
\label{testlabel}
Hello world.
\par
In \ref{testlabel} I wrote: Hello world.
\end{document}

решение2

Лучше добавить скобку туда, где она должна быть, чем потом ее удалять. Это можно сделать простым переопределением \@seccntformat:

\documentclass{article}

\makeatletter
\renewcommand{\@seccntformat}[1]{%
  \csname the#1\endcsname
  \csname suffix@#1\endcsname % this does nothing unless \suffix@... is defined
  \quad
}
% the subsubsection number is just a letter
\renewcommand{\thesubsubsection}{\alph{subsubsection}}
% but references will also have “section.subsection.” in front of the letter
\renewcommand{\p@subsubsection}{\thesubsection.}
% define \suffix@subsubsection
\newcommand{\suffix@subsubsection}{)}
\makeatother

\begin{document}

\section{A Section}
\subsection{A Subsection}
\subsubsection{A Subsubsection}\label{testlabel}

Hello world.

In \ref{testlabel} I wrote: Hello world.

\end{document}

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

Это также масштабируемо. Предположим, вы хотите нормальный межсловный пробел между a)и заголовком, сохраняя при этом \quadдля более высоких уровней. Тогда вы можете изменить код следующим образом:

\makeatletter
\renewcommand{\@seccntformat}[1]{%
  \csname the#1\endcsname
  \@ifundefined{suffix@#1}%
    {\quad}%
    {\csname suffix@#1\endcsname}%
}
% the subsubsection number is just a letter
\renewcommand{\thesubsubsection}{\alph{subsubsection}}
% but references will also have “section.subsection.” in front of the letter
\renewcommand{\p@subsubsection}{\thesubsection.}
% define \suffix@subsubsection
\newcommand{\suffix@subsubsection}{) }% parenthesis and space
\makeatother

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

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

\documentclass{article}

\makeatletter
\renewcommand{\@seccntformat}[1]{%
  \csname the#1\endcsname
  \@ifundefined{suffix@#1}
    {\quad}%
    {\csname suffix@#1\endcsname}%
}
% the subsubsection number is just a letter
\renewcommand{\thesubsubsection}{\alph{subsubsection}}
% but references will also have “section.subsection.” in front of the letter
\renewcommand{\p@subsubsection}{\thesubsection.}
% define \suffix@subsubsection
\newcommand{\suffix@subsubsection}{) }% parenthesis and space
\renewcommand{\l@subsubsection}[2]{%
  \@dottedtocline{3}{3.8em}{3.2em}{\let\numberline\subsubsection@numberline#1}{#2}%
}
\def\subsubsection@numberline#1{#1) }
\makeatother

\begin{document}

\tableofcontents

\section{A Section}
\subsection{A Subsection}
\subsubsection{A Subsubsection}
\label{testlabel}
Hello world.
\par
In \ref{testlabel} I wrote: Hello world.

\section{Whatever}
\end{document}

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

решение3

Вам также необходимо предоставить \thesubsubsectionсодержимое\thesubsection

\documentclass{article}
\renewcommand{\thesubsubsection}{\thesubsection.\alph{subsubsection})}
\begin{document}
\section{A Section}
\subsection{A Subsection}
\subsubsection{A Subsubsection}
\label{testlabel}
Hello world.
\par
In \ref{testlabel} I wrote: Hello world. 
\end{document}

Уступающий

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

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