Я набираю сценарий драмы с помощью 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}
Это дает мне следующий результат:
Любые идеи о том, как сократить расстояние между предметами, будут высоко оценены! Заранее спасибо ;)
Редактировать:Ответ Кристиана Хапфера исправил интервал между речевыми блоками, что я очень ценю ;) А как насчет интервала слева? Любые идеи приветствуются ;)
Редактировать 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}