\documentclass[oneside,b5paper,12pt]{book}
% ------------------------------------------------------------------------- %
%       Н А С Т Р О Й К И   Я З Ы К А   И   К О Д И Р О В К И       %
% ------------------------------------------------------------------------- %
\usepackage{cmap} % Поддержка поиска русских слов в PDF (pdflatex), ЗАГРУЖАТЬ САМЫМ ПЕРВЫМ!
\usepackage{mathtext} % Поддержка кириллицы в математическом режиме. ЗАГРУЖАТЬ ДО fontenc
\usepackage{amssymb,amsmath} % 
\usepackage{nccmath}  %  расширяет  пакет  amsmath


%\usepackage[X2,T2A]{fontenc}
\usepackage[T2D,T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[english,russian]{babel} % textpkg — поддержка разных тире
\usepackage[shortcuts,cyremdash]{extdash} % — переносы в составных словах, дефисы и тире (из ncc-tools)

\usepackage{textcomp}  % СИМВОЛЫ
% ------------------------------------------------------------------------- %
\usepackage{geometry} % Меняем макет страницы
% ------------------  Формат 70х100/16 158х230 мм  ---------------- %
%\geometry{papersize={15.8cm,23cm},hmargin={13.16mm,19.16mm},vmargin={26.32mm,38.32mm},bindingoffset=0cm}% Формат 70х100/16 158х230 мм поля 12 частей
\geometry{lines=40}% Ф
\tolerance=1000 %  default 200. В русских текстах следует увеличить, скажем, до 1000, потому что русские слова в среднем немного длиннее английских.
% ------------------------------------------------------------------------- %
%\usepackage[hang,bottom,stable,multiple,splitrule]{footmisc}
%\usepackage[stable,para]{footmisc}
%\usepackage[stable]{footmisc}
%\usepackage{bigfoot}
%\usepackage[para]{bigfoot}
\usepackage[para]{manyfoot}

\makeatletter
\renewcommand\@makefnmark{\mbox{\textsuperscript{\normalfont\scriptsize\@thefnmark}}} %  Делаем шрифт маркера  сносок одинаковым везде (в заголовках, в тексте и др.).
\makeatother
% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| %
% ||||||||||||||      П А К Е Т    H Y P E R R E F    ||||||||||||| %
% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| %
\ifx\pdfoutput\undefined
\usepackage[unicode,dvips]{hyperref}
\else
\usepackage[bookmarks=true,bookmarksopen=true,bookmarksnumbered=true,
backref=true,pagebackref=true,hyperfigures=true,hyperfootnotes=true,unicode,
pdfpagelayout=TwoColumnRight,pdfstartview=Fit,pdfpagemode=UseOutlines,breaklinks=true,
% ЛИБО ВАРИАНТ С ЦВЕТНЫМИ ССЫЛОКАМИ:
colorlinks=true,linkcolor=red165,citecolor=green102,urlcolor=blue153
% ЛИБО ВАРИАНТ С РАМКОЙ ВОКРУГ ССЫЛОК
%pdfborder={0  0 1  [1 1]},pdflinkmargin=10pt,linkbordercolor={1 0.49 0.49},citebordercolor={0 0.55 0},urlbordercolor={0 0 0.6},colorlinks=false%
]{hyperref}

\AtBeginDocument{\renewcommand{\ref}[1]{\mbox{\autoref{#1}}}} % Автоматически именует плавающие объекты и заголовки (по умолчанию пишет "Figure" и т.д.)

%\renewcommand{\nameref}[1]{\nameref{#1} на стр.~\pageref{#1}} ошибка!
%\let\WriteBookmarks\relax
\fi
\usepackage[all]{hypcap} % НЕ РАБОТАЕТ с классом NCC!!!
\renewcommand{\hypcapspace}{\baselineskip}
% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| %
% ||||||||||    П а р а м е т р ы    P D F    ф а й л а    |||||||| %
% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| %
\usepackage{thumbpdf} % поддержка thumbnails, требует Perl программы
% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| %
% ///////////////////////////////////////////////////////////////////////////////////////////////////
% |||||||||||||||||||||||||||||||||||||||   Ц В Е Т   ||||||||||||||||||||||||||||||||||||||||||||||
% \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\usepackage{graphicx}
\usepackage{color}

\definecolor{violet}{rgb}{0.4,0.0980,0.3725} % 102.25.95 ~ фиолетовый сочетание для olive 
\definecolor{red204}{rgb}{0.8,0,0} %#CC0000 204.0.0 тёмно-красный
\definecolor{red165}{rgb}{0.647,0,0} %#A50000 165.0.0 тёмный тёмно-красный
\definecolor{red153}{rgb}{0.6,0,0} %#990000 153.0.0 тёмный красно-коричнгевый
\definecolor{red}{rgb}{0.647,0,0} %#A50000 165.0.0 тёмный тёмно-красный

\definecolor{blue153}{rgb}{0,0,0.6} %#000099 0.0.153 тёмно-синий
\definecolor{green-blue0-79-98}{rgb}{0,0.3,0.38} %#004F62  0.79.98 тёмный сине-зелёный 

\definecolor{green142}{rgb}{0,0.4,0} %#008E00 0.142.0 зелёный
\definecolor{green102}{rgb}{0,0.55,0} %#006600 0.102.0 тёмно-зелёный
% ////////////////////////////////////////////////////////////////////////////////////////////////////
% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
% \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

\usepackage{lipsum}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\section{Проблемы с \texttt{description}}

\paragraph{Проблема 1\label{par:problem1}}

     В списках есть некоторый горизонтальный промежуток \verb|\labelsep| между меткой и~последующим  текстом. В~классе book он равен~0.5em.

По мне, для \verb|description| во многих случаях лучше (конечно, не во всех), 
чтобы он выглядел как обычный  пробел, то есть чтобы метка выглядела не как метка, 
отделённая промежутком, а~просто как выделенное жирным слово. Для этого:

\begin{enumerate}
    \item 0.5em "--- слишком много, нужен промежуток размером с~пробел. Это можно сделать переопределением:

{\small
\begin{verbatim}
\makeatletter
\renewcommand*\descriptionlabel[1]%
{\hspace\labelsep\normalfont\bfseries #1 } 
% добавим пробел после #1

\renewenvironment{description}{%
\list{}{%
\labelwidth\z@ 
\itemindent-\leftmargin
\labelsep=0ex% а здесь уберём доп. отступ после метки
\let\makelabel\descriptionlabel}% 
}% 
{\endlist}
\makeatother
\end{verbatim}}

    \item Надо, чтобы промежуток был растяжимым, как обычные пробелы:

{\small
\begin{verbatim}
\begin{description}
    \item[Это] слово.
    \item[Это] слова слова слова слова.
    \item[Это] слова слова слова слова слова\linebreak 
               слова слова слова слова слова.
\end{description}
\end{verbatim}}

\begingroup
\makeatletter
\renewcommand*\descriptionlabel[1]%
{\hspace\labelsep\normalfont\bfseries #1 } % добавим пробел после #1

\renewenvironment{description}{%
\list{}{%
\labelwidth\z@ 
\itemindent-\leftmargin
\labelsep=0ex% а здесь уберём доп. отступ после метки
\let\makelabel\descriptionlabel}% 
}% 
{\endlist}
\makeatother

\noindent\hrulefill %________________________________________

\begin{description}
    %\item[Это] слово.
    \item[Это] слова слова слова слова.
    \item[Это] слова слова слова слова слова\linebreak 
               слова слова слова слова слова.
\end{description}
\endgroup

\noindent\hrulefill %________________________________________

\end{enumerate}

Если задать 

{\small
\begin{verbatim}
\labelsep1ex plus 10pt minus 2pt 
\end{verbatim}}

\noindent или 

{\small
\begin{verbatim}
\setlength\labelsep{1ex plus 10pt minus 2pt} 
\end{verbatim}}

\noindent то слова «plus 10pt minus 2pt» будут напечатаны в~тексте! А~если задать

{\small
\begin{verbatim}
\makeatletter
\renewcommand*\descriptionlabel[1]%
{\hspace\labelsep\normalfont\bfseries #1%
\hspace{1ex plus 10pt minus 2pt}} 
\makeatother
\end{verbatim}}
\noindent или 
{\small
\begin{verbatim}
\makeatletter
\renewcommand*\descriptionlabel[1]%
{\hspace\labelsep\normalfont\bfseries #1%
\hskip 1ex plus 10pt minus 2pt} 
\makeatother
\end{verbatim}}

\noindent то просто никакой реакции не будет.

(Какой, кстати должен быть правильный размер и~клей для пробела?)


\paragraph{Проблема 2\label{par:problem2}}

     Если \verb|\labelsep| не равен нулю, то перед русским тире \verb|"---| получается лишний пробел: 

{\small
\begin{verbatim}
\begin{description}
    \item[Это] слово.
    \item[Это] ~тильда+слово.
    \item[Это] --- тире.
    \item[Это] "--- русское тире "--- с краю и внутри.
    \item[Это] "--* русское тире для прямой речи.
\end{description}
\end{verbatim}}

\begingroup
\makeatletter
\renewenvironment{description}{%
\list{}{%
\labelwidth\z@ % необязательно?
\itemindent-\leftmargin
%\labelsep=1ex% гор. отступ после метки
\let\makelabel\descriptionlabel}% 
}% 
{\endlist}
\makeatother

\noindent\hrulefill %________________________________________

\begin{description}
    \item[Это] слово.
    \item[Это] ~тильда+слово.
    \item[Это] --- тире.
    \item[Это] "--- русское тире "--- с краю и внутри.
    \item[Это] "--* русское тире для прямой речи.
\end{description}
\endgroup

\noindent\hrulefill %________________________________________

Если же обнулить \verb"\labelsep", то придётся после каждого \verb"\item" вручную ставить неразрывный пробел (тильду):

\begingroup
\makeatletter
\renewenvironment{description}{%
\list{}{%
\labelwidth\z@ % необязательно?
\itemindent-\leftmargin
\labelsep=0ex% гор. отступ после метки
\let\makelabel\descriptionlabel}% 
}% 
{\endlist}
\makeatother

\noindent\hrulefill %________________________________________

\begin{description}
    \item[Это] слово.
    \item[Это] ~тильда+слово.
    \item[Это] --- тире.
    \item[Это] "--- русское тире "--- с краю и внутри.
    \item[Это] "--* русское тире для прямой речи.
\end{description}
\endgroup

\noindent\hrulefill %________________________________________

Можно ли научить \verb|labelspace| в~окружении \verb|description| автоматически принимать нулевое значение перед русским тире?

Такая конструкция:

{\small
\begin{verbatim}
\makeatletter
\renewcommand*\descriptionlabel[1]%
{\hspace\labelsep\normalfont\bfseries #1%
\@ifnextchar"{\hspace{0ex}}{\hspace{1ex}}}

\renewenvironment{description}{%
\list{}{%
\labelwidth\z@ % необязательно?
\itemindent-\leftmargin
\labelsep=0ex% гор. отступ после метки
\let\makelabel\descriptionlabel}% 
}% 
{\endlist}
\makeatother
\end{verbatim}}

\noindent не работает: 

\begingroup
\makeatletter
\renewcommand*\descriptionlabel[1]%
{\hspace\labelsep\normalfont\bfseries #1%
\@ifnextchar"{\hspace{0ex}}{\hspace{1ex}}}

\renewenvironment{description}{%
\list{}{%
\labelwidth\z@ % необязательно?
\itemindent-\leftmargin
\labelsep=0ex% гор. отступ после метки
\let\makelabel\descriptionlabel}% 
}% 
{\endlist}
\makeatother

\noindent\hrulefill %________________________________________

\begin{description}
    \item[Это] слово.
    \item[Это] ~тильда+слово.
    \item[Это] --- тире.
    \item[Это] "--- русское тире "--- с краю и внутри.
    \item[Это] "--* русское тире для прямой речи.
\end{description}
\endgroup

\noindent\hrulefill %________________________________________

Решение Isao Yasuda:

{\small\begin{verbatim}
\makeatletter
\def\@Acdash{%
 \ifdim\lastskip>\z@\unskip\nobreak\fi% 
 \cyrdash\hskip.2em\ignorespaces}%
\makeatother    
\end{verbatim}}

\begingroup
\makeatletter
\renewcommand*\descriptionlabel[1]{\hspace\labelsep\normalfont\bfseries #1 }

\renewenvironment{description}{%
\list{}{%
\labelwidth\z@ % необязательно?
\itemindent-\leftmargin
\labelsep=0ex% гор. отступ после метки
\let\makelabel\descriptionlabel}% 
}% 
{\endlist}

\def\@Acdash{%
 \ifdim\lastskip>\z@\unskip\nobreak\fi% "\hskip.2em" by "\fi" deleted
 \cyrdash\hskip.2em\ignorespaces}%
\makeatother    

\noindent решает проблему с тире после метки, но, к~сожалению, портит остальные тире, которые идут далее в~тексте:

\noindent\hrulefill %________________________________________
\begin{description}
    \item[Это] слово.
    \item[Это] ~тильда+слово.
    \item[Это] --- тире.
    \item[Это] "--- русское тире "--- с краю и внутри.
    \item[Это] "--* русское тире для прямой речи.
\end{description}
\noindent\hrulefill %________________________________________
\endgroup




\end{document}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


