考えたいこと、単純な質問があります。
次の 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
に加えてパッケージをロードする必要があることが判明しました。たとえば、次のMWEhyperref
nameref
\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
パッケージ間でかなり重大かつ非常に残念な競合が発生したようです。(クリスチャン・フプファーの回答は、私の投稿より数分早く投稿されたもので、紛争の性質についてより詳細な診断を提供しています。)興味深いことに、この質問に対する3つの回答は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
マクロにが追加される\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
が、これは、 オプションを使用してパッケージ\enit@format
をロードし、引数を単に渡すようにすることで、不要な 2 つのコマンドを無効にすることで実現できます。この再定義は、マクロがタイトルを収集しているときのみ、一時的なものです。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}{}}
出力は期待どおりです。