Por que estou tendo um espaço para a próxima palavra? Como corrigi-lo?

Por que estou tendo um espaço para a próxima palavra? Como corrigi-lo?

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 enumitempacote 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:

insira a descrição da imagem aqui

Resumindo, parece que você se deparou com um conflito bastante significativo e infeliz entre os pacotes enumiteme 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 enumitempacote, você pode considerar usar oenumerarpacote. Ele não oferece tantos recursos quanto o enumitempacote. No entanto, dependendo das suas necessidades de formatação (sobre as quais você não revelou exatamente nada até agora...), o enumeratepacote pode oferecer todas as funcionalidades que você realmente precisa.


Se, no entanto, você simplesmentedeveuse o enumitempacote, eu sugiro que vocênãoempregar o mecanismo básico-LaTeX \labeldentro \refdos descriptionambientes. Em vez disso, use o mecanismo mais geral \hypertargetdo \hyperlinkpacote hyperref.

insira a descrição da imagem aqui

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

enumitemadiciona um \hfilna \descriptionlabelmacro, então o rótulo seria Category\hfil, deixando um grande espaço à direita.

O descriptionambiente das classes padrão (melhor: núcleo LaTeX) não possui esse recurso indesejável.

A ideia é \let\hfil\relaxna \@currentlabelnamemacro, 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}

insira a descrição da imagem aqui

Responder3

Se você olhar o .auxarquivo, 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@aligne \enit@format; isso pode ser feito carregando o gettitlestringpacote com a expandopção e desativando os dois comandos indesejados, fazendo com que eles simplesmente entreguem seus argumentos. Esta redefinição é apenas temporária, quando namerefas 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 .auxarquivo tem

\newlabel{desc:category}{{}{1}{Category}{Doc-Start}{}}
\newlabel{desc:profile}{{}{1}{Profile}{Doc-Start}{}}

e a saída é a esperada.

insira a descrição da imagem aqui

informação relacionada