我有我想要的想法,一個簡單的問題。
我有以下 tex 代碼:
\begin{description}%[style=nextline]
\item [Category\label{desc:category}] blablabla
\item [Profile\label{desc:profile}] blabla (\nameref{desc:category}) blabla.
\end{description}
結果是這樣的:
類別布拉布拉布拉
輪廓blabla(類別「一堆空間」)blabla。
為什麼在我進行類別引用後會有這些空格?
答案1
enumitem
要複製您報告的問題,除了hyperref
(或) 套件之外,還需要載入該套件nameref
。例如,下面的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}
產生這個輸出:
簡而言之,您似乎遇到了enumitem
和hyperref
軟體包之間相當重要且非常不幸的衝突。 (克里斯蒂安·胡弗的回答,它比我的早幾分鐘發布,提供了對衝突衝突性質的更深入的診斷。LaTeX 中描述清單項目的參考名稱似乎沒有解決間距問題。
enumitem
您可以考慮使用列舉包裹。它沒有提供像包裝一樣多的附加功能enumitem
。但是,根據您的格式化需求(到目前為止您已經透露的格式化需求為零...),該enumerate
套件可能會提供您真正需要的所有功能。
但是,如果您只是必須使用該enumitem
包,我建議你不是在環境中使用基本的 LaTeX\label
機制。相反,使用更通用的包機制。\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}
答案2
顯然OP正在使用中enumitem
(提示style=nextline
:)
enumitem
\hfil
在巨集中新增 a \descriptionlabel
,因此標籤將為Category\hfil
,在右側留出一個大空間。
標準類的環境description
(更好:LaTeX 核心)不具有這種不良功能。
這個想法是\let\hfil\relax
在巨集中\@currentlabelname
,這是為 儲存的名稱\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}
答案3
如果你查看該.aux
文件,你會看到
\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
and \enit@format
;這可以透過載入gettitlestring
帶有選項的套件expand
並透過簡單地傳遞參數來停用兩個不需要的命令來完成。當nameref
巨集收集標題時,這種重新定義只是暫時的。
\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}
現在該.aux
文件有
\newlabel{desc:category}{{}{1}{Category}{Doc-Start}{}}
\newlabel{desc:profile}{{}{1}{Profile}{Doc-Start}{}}
並且輸出符合預期。