(sub)seção com número, subsubseção com letra - \ref mostra apenas a letra

(sub)seção com número, subsubseção com letra - \ref mostra apenas a letra

quando tento seguir o código, tudo funciona conforme o esperado:

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

Isso imprimirá 1.1.1.

Mas se eu habilitar o comando no comentário, recebo apenas a) em vez do esperado 1.1.a)

Na verdade, quero que a seção apareça como a) ... e a referência como 1.1.a sem colchetes.

Alguma ideia?

Responder1

insira a descrição da imagem aqui

Para qualquer contador LaTeX, a macro é o prefixo usado nas referências. Normalmente é usado em enumeração aninhada para obter exatamente o efeito onde o rótulo da lista mostra apenas um nível e uma referência mostra a forma expandida.\[email protected]

As macros padrão assumem que a forma de impressão do contador final é a mesma em ambos os lugares, portanto, como você deseja perder, )você precisa da macro de prefixo para removê-lo, como aqui, ou como na resposta do egreg, não adicione-o ao formato do contador e, em vez disso, considere a )parte do formato do título da seção.

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

Responder2

É melhor adicionar o parêntese onde ele pertence, em vez de removê-lo posteriormente. Isso pode ser conseguido por uma simples redefinição de \@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}

insira a descrição da imagem aqui

Isso também é escalonável. Suponha que você queira um espaço normal entre palavras entre o a)e o título, mantendo o \quadpara níveis mais altos. Então você pode modificar o código como

\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

insira a descrição da imagem aqui

A segunda solução também com uma correção para o índice (novamente, entre parênteses e o título, apenas um espaço normal parece melhor).

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

insira a descrição da imagem aqui

Responder3

Você precisa fornecer o \thesubsubsectionconteúdo \thesubsectiontambém

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

Produzindo

insira a descrição da imagem aqui

informação relacionada