Ich habe, wie ich gerne glaube, eine einfache Frage.
Ich habe den folgenden Tex-Code:
\begin{description}%[style=nextline]
\item [Category\label{desc:category}] blablabla
\item [Profile\label{desc:profile}] blabla (\nameref{desc:category}) blabla.
\end{description}
Das Ergebnis sieht ungefähr so aus:
Kategoriebla bla bla
Profilblabla (Kategorie „Haufen von Leerzeichen“) blabla.
Warum habe ich diese Leerzeichen nach der von mir vorgenommenen Kategorieverweisung?
Antwort1
Um das von Ihnen gemeldete Problem zu reproduzieren, ist es notwendig, das enumitem
Paket zusätzlich zum hyperref
(oder nameref
)-Paket zu laden. Beispielsweise das folgende 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}
erzeugt diese Ausgabe:
enumitem
Kurz gesagt, es sieht so aus, als wären Sie auf einen ziemlich bedeutenden und ziemlich unglücklichen Konflikt zwischen den und hyperref
Paketen gestoßen . (Antwort von Christian Hupfer, das ein paar Minuten vor meinem gepostet wurde, bietet eine tiefergehende Diagnose der Natur des Konflikts.) Interessanterweise sind die drei Antworten auf die FrageReferenzname des Beschreibungslistenelements in LaTeXscheinen das Abstandsproblem nicht zu beheben.
Anstatt das enumitem
Paket zu verwenden, könnten Sie auch dasaufzählenPaket. Es bietet nicht ganz so viele Schnickschnacks wie das enumitem
Paket. Abhängig von Ihren Formatierungsanforderungen (über die Sie bisher genau null verraten haben ...) enumerate
bietet das Paket möglicherweise jedoch alle Funktionen, die Sie wirklich benötigen.
Wenn Sie jedoch einfachmussbenutze das enumitem
Paket, ich empfehle dirnichtVerwenden Sie den grundlegenden LaTeX \label
- \ref
Mechanismus innerhalb description
von Umgebungen. Verwenden Sie stattdessen den allgemeineren \hypertarget
Mechanismus \hyperlink
des hyperref
Pakets.
\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}
Antwort2
Anscheinend verwendet der OP enumitem
(Hinweis style=nextline
:)
enumitem
\hfil
fügt im Makro ein hinzu \descriptionlabel
, sodass die Beschriftung lautet Category\hfil
und rechts ein großer Abstand bleibt.
Die description
Umgebung der Standardklassen (besser: LaTeX-Kern) verfügt nicht über diese unerwünschte Eigenschaft.
Die Idee dahinter ist , \let\hfil\relax
im \@currentlabelname
Makro den Namen anzugeben, der für gespeichert wird \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}
Antwort3
Wenn Sie sich die Datei ansehen .aux
, sehen Sie
\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}{}}
\enit@align
und wir möchten und loswerden \enit@format
; dies kann erreicht werden, indem das gettitlestring
Paket mit der expand
Option geladen wird und die beiden unerwünschten Befehle deaktiviert werden, indem sie einfach ihr Argument übergeben. Diese Neudefinition ist nur vorübergehend, während nameref
Makros den Titel erfassen.
\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}
Nun .aux
hat die Datei
\newlabel{desc:category}{{}{1}{Category}{Doc-Start}{}}
\newlabel{desc:profile}{{}{1}{Profile}{Doc-Start}{}}
und die Ausgabe ist wie erwartet.