次の単語の間にスペースがあるのはなぜですか? どうすれば修正できますか?

次の単語の間にスペースがあるのはなぜですか? どうすれば修正できますか?

考えたいこと、単純な質問があります。

次の 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に加えてパッケージをロードする必要があることが判明しました。たとえば、次のMWEhyperrefnameref

\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パッケージ間でかなり重大かつ非常に残念な競合が発生したようです。(クリスチャン・フプファーの回答は、私の投稿より数分早く投稿されたもので、紛争の性質についてより詳細な診断を提供しています。)興味深いことに、この質問に対する3つの回答は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マクロにが追加される\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 つのコマンドを無効にすることで実現できます。この再定義は、マクロがタイトルを収集しているときのみ、一時的なものです。gettitlestringexpandnameref

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

出力は期待どおりです。

ここに画像の説明を入力してください

関連情報