為什麼下一個單字之間有一個空格?如何修復它?

為什麼下一個單字之間有一個空格?如何修復它?

我有我想要的想法,一個簡單的問題。

我有以下 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}

產生這個輸出:

在此輸入影像描述

簡而言之,您似乎遇到了enumitemhyperref軟體包之間相當重要且非常不幸的衝突。 (克里斯蒂安·胡弗的回答,它比我的早幾分鐘發布,提供了對衝突衝突性質的更深入的診斷。LaTeX 中描述清單項目的參考名稱似乎沒有解決間距問題。

enumitem您可以考慮使用列舉包裹。它沒有提供像包裝一樣多的附加功能enumitem。但是,根據您的格式化需求(到目前為止您已經透露的格式化需求為零...),該enumerate套件可能會提供您真正需要的所有功能。


但是,如果您只是必須使用該enumitem包,我建議你不是在環境中使用基本的 LaTeX\label機制。相反,使用更通用的包機制。\refdescription\hypertarget\hyperlinkhyperref

在此輸入影像描述

\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@alignand \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}{}}

並且輸出符合預期。

在此輸入影像描述

相關內容