Tenho o que gostaria de pensar, uma pergunta simples.
Eu tenho o seguinte código tex:
\begin{description}%[style=nextline]
\item [Category\label{desc:category}] blablabla
\item [Profile\label{desc:profile}] blabla (\nameref{desc:category}) blabla.
\end{description}
O resultado é algo assim:
Categoriablablabla
Perfilblabla (Categoria 'grupo de espaços') blabla.
Por que tenho esses espaços após a referência de categoria que fiz?
Responder1
Para replicar o problema que você está relatando, é necessário carregar o enumitem
pacote além do pacote hyperref
(ou nameref
). Por exemplo, o seguinte MWE
\documentclass{article}
\usepackage{enumitem}
\usepackage[colorlinks]{hyperref} % or: \usepackage{nameref}
\begin{document}
\begin{description}
\item[Category\label{desc:category}] blablabla
\item[Profile\label{desc:profile}] blabla
(\nameref{desc:category}) blabla
\end{description}
\end{document}
produz esta saída:
Resumindo, parece que você se deparou com um conflito bastante significativo e infeliz entre os pacotes enumitem
e hyperref
. (A resposta de Christian Hupfer, que foi postado alguns minutos antes do meu, fornece um diagnóstico mais aprofundado da natureza do conflito.) Curiosamente, as três respostas à perguntaNome de referência do item da lista de descrição em LaTeXnão parecem resolver o problema de espaçamento.
Em vez de usar o enumitem
pacote, você pode considerar usar oenumerarpacote. Ele não oferece tantos recursos quanto o enumitem
pacote. No entanto, dependendo das suas necessidades de formatação (sobre as quais você não revelou exatamente nada até agora...), o enumerate
pacote pode oferecer todas as funcionalidades que você realmente precisa.
Se, no entanto, você simplesmentedeveuse o enumitem
pacote, eu sugiro que vocênãoempregar o mecanismo básico-LaTeX \label
dentro \ref
dos description
ambientes. Em vez disso, use o mecanismo mais geral \hypertarget
do \hyperlink
pacote hyperref
.
\documentclass{article}
\usepackage{enumerate}
\usepackage[colorlinks]{hyperref}
\begin{document}
\begin{description}
\item[\hypertarget{desc:category}{Category}] blablabla
\item[\hypertarget{desc:profile}{Profile}] blabla
(\hyperlink{desc:category}{Category}) blabla
\end{description}
\end{document}
Responder2
Aparentemente, o OP está usando enumitem
(dica style=nextline
:)
enumitem
adiciona um \hfil
na \descriptionlabel
macro, então o rótulo seria Category\hfil
, deixando um grande espaço à direita.
O description
ambiente das classes padrão (melhor: núcleo LaTeX) não possui esse recurso indesejável.
A ideia é \let\hfil\relax
na \@currentlabelname
macro, que é o nome que fica armazenado para \nameref
.
\documentclass{article}
\usepackage{enumitem} % Add easy custom list support
\usepackage{hyperref} % Add ref support
%\setlength\parindent{0pt} % Globally set indentation for new paragraphs
\setlist[description]{labelwidth=0pt,leftmargin=30pt,itemindent=\dimexpr-20pt-\labelsep\relax} % Global Setup Description List
\makeatletter % Redefinition of Description List Items source: http://tex.stackexchange.com/a/1248/13552
\let\orgdescriptionlabel\descriptionlabel
\renewcommand*{\descriptionlabel}[1]{%
\let\orglabel\label
\let\label\@gobble
\phantomsection
\protected@edef\@currentlabel{#1}%
\edef\@currentlabelname{\let\hfil\relax #1}%
\let\label\orglabel
\orgdescriptionlabel{#1}%
}
\makeatother
\begin{document}
\begin{description}
\item [Category\label{desc:category}] blablabla
\item [Profile\label{desc:profile}] blabla (\nameref{desc:category}) blabla.
\end{description}
\end{document}
Responder3
Se você olhar o .aux
arquivo, verá
\newlabel{desc:category}{{}{1}{\enit@align {\enit@format {Category\label {desc:category}}}}{Doc-Start}{}}
\newlabel{desc:profile}{{}{1}{\enit@align {\enit@format {Profile\label {desc:profile}}}}{Doc-Start}{}}
e queremos nos livrar de \enit@align
e \enit@format
; isso pode ser feito carregando o gettitlestring
pacote com a expand
opção e desativando os dois comandos indesejados, fazendo com que eles simplesmente entreguem seus argumentos. Esta redefinição é apenas temporária, quando nameref
as macros estão reunindo o título.
\documentclass{article}
\usepackage{enumitem} % Add easy custom list support
\usepackage[expand]{gettitlestring}
\usepackage{hyperref} % Add ref support
\setlist[description]{% Global Setup Description List
labelwidth=0pt,
leftmargin=30pt,
itemindent=\dimexpr-20pt-\labelsep\relax
}
\makeatletter
\GetTitleStringDisableCommands{%
\let\enit@align\@firstofone
\let\enit@format\@firstofone
}
\makeatother
\begin{document}
\begin{description}
\item [Category\label{desc:category}] blablabla
\item [Profile\label{desc:profile}] blabla (\nameref{desc:category}) blabla.
\end{description}
\end{document}
Agora o .aux
arquivo tem
\newlabel{desc:category}{{}{1}{Category}{Doc-Start}{}}
\newlabel{desc:profile}{{}{1}{Profile}{Doc-Start}{}}
e a saída é a esperada.