драматург убрать пробелы между речевыми единицами

драматург убрать пробелы между речевыми единицами

Я набираю сценарий драмы с помощью dramatistпакета, который определяет dramaсреду, которая по сути является listсредой, и каждая запись речи является элементом списка. Поскольку мне нужно напечатать сценарий несколько раз, я хочу сократить расстояние между элементами речи.

Окружающая dramaсреда заявляет следующее:

\newenvironment{drama}{%
    \if@lnpa
    \PackageWarning{dramatist}{\lnpwarning{a}}
    \fi
    \if@lnps
    \PackageWarning{dramatist}{\lnpwarning{s}}
    \fi
    \list{}{%
        \labelwidth\speakswidth
        \itemindent\speaksindent
        \itemsep\speechskip
        \parsep\Dparsep
        \labelsep\Dlabelsep
        \let\makelabel\speakslabel}
    } {\endlist}

Размеры также указаны ниже dramatist.sty:

\newdimen\speakswidth
\speakswidth\z@
\newdimen\speaksindent
\speaksindent=-\leftmargin
\newdimen\speechskip
\speechskip\itemsep
\newdimen\Dparsep
\Dparsep\z@
\newdimen\Dlabelsep
\Dlabelsep\labelsep

Он даже поддерживает чтение файла конфигурации:

\InputIfFileExists{dramatist.cfg}{\foundfile}{\inputfilewarning}

Я понял, что расстояние между элементами, вероятно, задается параметром \speechskip-dimension, поэтому я попытался создать файл конфигурации со следующим содержимым:

\speechskip=0em
\speaksindent=0em

Пакет считывает этот файл конфигурации, как указано в журнале:

Package dramatist Warning: Using Configuration file dramatist.cfg. .

Но ни отступы, ни пропуск между элементами не меняются. Я не знаю, почему файл конфигурации не читается правильно, так как я думаю, что объявления размеров, которые я сделал, верны.

MWE может выглядеть следующим образом:

\documentclass[oneside,12pt]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{scrpage2}
\usepackage[utf8]{inputenc}
\usepackage{dramatist}
\usepackage[x11names]{xcolor}
\usepackage{tcolorbox}
\usepackage[bookmarks]{hyperref}
\begin{document}
  \newcommand{\role}[1]{\textcolor{blue}{(\textit{#1})}}
  \begin{CharacterGroup}{Andere alte Leute}
  \GCharacter{Marta \role{Elisa}}{Marta}{marta}
  \end{CharacterGroup}
  \newcommand{\martax}[1]{\item\leavevmode\begin{tcolorbox}[title=\marta,colframe=red]#1\end{tcolorbox}}
  This is the regular document inset.
  \begin{drama}
    \martax{I can talk}
    This is the list inset.
    \martax{I can talk}
    \martax{I can talk}
    \martax{I can talk}
  \end{drama}
\end{document}

Это дает мне следующий результат: Пример выходных данных MWE

Любые идеи о том, как сократить расстояние между предметами, будут высоко оценены! Заранее спасибо ;)

Редактировать:Ответ Кристиана Хапфера исправил интервал между речевыми блоками, что я очень ценю ;) А как насчет интервала слева? Любые идеи приветствуются ;)

Редактировать 2:Я также пытался напрямую изменить источник, dramatist.styчтобы исправить плохой левый отступ, но безрезультатно : (конечнотолько для целей тестирования)

\newenvironment{drama}{%
    ...
    \list{}{%
        ...
        \itemindent0em
        ...
    } {\endlist}

и:

\newenvironment{drama}{%
    ...
    \list{}{%
        ...
        \itemindent=0em
        ...
    } {\endlist}

Редактировать 3:Используя новое решение Кристиана Хапфера, мне удалось уменьшить отступ слева до минимума. Но все еще есть небольшой отступ слева и немного больше справа, не так много, но он становится видимым, когда речевой блок находится рядом с другим, неотступным содержимым, например, цветным парбоксом или обычным текстом (вне среды драмы). Есть ли способ исправить этот последний нежелательный отступ?

решение1

Пакет tcolorboxпомещает tcolorboxокружения в абзац, если не используется опция nobeforeafter. Лучший способ сохранить отступы — применить before={\hskip\dimexpr\leftmargin-\speechskip}и пустойafter={}

Оставшийся интервал \itemsepи натуральный \interlineskip. Сравните разницу между \martaxи\martay

\documentclass[oneside,12pt]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{scrpage2}
\usepackage[utf8]{inputenc}
\usepackage{dramatist}
\usepackage[x11names]{xcolor}
\usepackage{tcolorbox}
\usepackage[bookmarks]{hyperref}
\begin{document}
  \newcommand{\role}[1]{\textcolor{blue}{(\textit{#1})}}
  \begin{CharacterGroup}{Andere alte Leute}
  \GCharacter{Marta \role{Elisa}}{Marta}{marta}
  \end{CharacterGroup}
  \newcommand{\martax}[1]{\item\mbox{}\begin{tcolorbox}[before={\hskip\dimexpr\leftmargin-\speechskip},after={},title=\marta,colframe=red]#1\end{tcolorbox}}
  \newcommand{\martay}[1]{\item\mbox{}\begin{tcolorbox}[title=\marta,colframe=blue]#1\end{tcolorbox}}

  This is the regular document inset.
  \begin{drama}
    \martax{I can talk}
    This is the list inset.
    \martax{I can talk}
    \martax{I can talk}
    \martax{I can talk}
  \end{drama}

  \begin{drama}
    \martay{I can talk}
    This is the list inset.
    \martay{I can talk}
    \martay{I can talk}
    \martay{I can talk}
  \end{drama}

\end{document}

введите описание изображения здесь

Обновлять

Я изменил текстовую вставку и удалил \mbox{}команды, которые приводят к ложным горизонтальным интервалам.

\documentclass[oneside,12pt]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{scrpage2}
\usepackage[utf8]{inputenc}
\usepackage{dramatist}
\usepackage[x11names]{xcolor}
\usepackage{tcolorbox}
\usepackage{xpatch}

\usepackage[bookmarks]{hyperref}

\newlength{\dramatextinset}
\setlength{\dramatextinset}{\dimexpr-\leftmargin+\labelsep}

\xapptocmd{\drama}{%
  \setlength{\parindent}{\dramatextinset}%
}{\typeout{Success}}{\typeout{Failure}}

\usepackage{showframe}

\newcommand{\role}[1]{\textcolor{blue}{(\textit{#1})}}
\begin{CharacterGroup}{Andere alte Leute}
  \GCharacter{Marta \role{Elisa}}{Marta}{marta}
\end{CharacterGroup}

\newcommand{\martax}[1]{\item\begin{tcolorbox}[before={},after={},title=\marta,colframe=red]#1\end{tcolorbox}}
\newcommand{\martay}[1]{\item\begin{tcolorbox}[title=\marta,colframe=blue]#1\end{tcolorbox}}

\begin{document}
This is the regular document inset.
\begin{drama}
  \martax{I can talk}

  This is the list inset.
  \martax{I can talk}
  \martax{I can talk}
  \martax{I can talk}
\end{drama}


\begin{drama}
  \martay{I can talk}
  This is the list inset.
  \martay{I can talk}
  \martay{I can talk}
  \martay{I can talk}
\end{drama}

\end{document}

введите описание изображения здесь

Связанный контент