Tengo lo que me gustaría pensar, una pregunta sencilla.
Tengo el siguiente 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}
El resultado es algo como esto:
Categoríabla bla bla
Perfilblabla (Categoría 'montón de espacios') blabla.
¿Por qué tengo estos espacios después de la referencia de categoría que hice?
Respuesta1
Para replicar el problema que estás informando, resulta necesario cargar el enumitem
paquete además del paquete hyperref
(o nameref
). Por ejemplo, el siguiente 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}
produce esta salida:
En resumen, parece que te has encontrado con un conflicto bastante significativo y desafortunado entre los paquetes enumitem
y hyperref
. (La respuesta de Christian Hupfer, que se publicó un par de minutos antes que el mío, proporciona un diagnóstico más profundo de la naturaleza del conflicto). Curiosamente, las tres respuestas a la consultaNombre de referencia del elemento de la lista de descripción en LaTeXno parece solucionar el problema de espaciado.
En lugar de utilizar el enumitem
paquete, podría considerar utilizar elenumerarpaquete. No ofrece tantas comodidades como el enumitem
paquete. Sin embargo, dependiendo de sus necesidades de formato (sobre las cuales no ha revelado exactamente nada hasta ahora...), el enumerate
paquete puede ofrecer toda la funcionalidad que realmente necesita.
Sin embargo, si usted simplementedebeusa el enumitem
paquete, te sugieronoemplear el mecanismo básico de LaTeX \label
dentro de los entornos. En su lugar, utilice el mecanismo más general del paquete.\ref
description
\hypertarget
\hyperlink
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}
Respuesta2
Aparentemente el OP está usando enumitem
(pista style=nextline
:)
enumitem
agrega un \hfil
en la \descriptionlabel
macro, por lo que la etiqueta sería Category\hfil
, dejando un espacio grande a la derecha.
El description
entorno de las clases estándar (mejor: núcleo LaTeX) no tiene esta característica no deseada.
La idea es \let\hfil\relax
en la \@currentlabelname
macro, que es el nombre que se almacena 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}
Respuesta3
Si miras el .aux
archivo, verás
\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}{}}
y queremos deshacernos de \enit@align
y \enit@format
; Esto se puede hacer cargando el gettitlestring
paquete con la expand
opción y deshabilitando los dos comandos no deseados haciendo que simplemente entreguen su argumento. Esta redefinición es sólo temporal, mientras nameref
las macros van recopilando el 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}
Ahora el .aux
archivo tiene
\newlabel{desc:category}{{}{1}{Category}{Doc-Start}{}}
\newlabel{desc:profile}{{}{1}{Profile}{Doc-Start}{}}
y el resultado es el esperado.