劇作家刪除語音項目之間的間距

劇作家刪除語音項目之間的間距

我正在使用該包排版戲劇腳本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}

我發現專案之間的間距可能是由 -dimension 設定的\speechskip,所以我嘗試建立一個包含以下內容的設定檔:

\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

任何有關如何縮小專案之間距離的想法都將不勝感激!提前致謝 ;)

編輯:Christian Hupfer 的答案修復了語音框之間的間距,我非常欣賞;)左側的間距怎麼樣?歡迎任何想法;)

編輯2:我也嘗試直接更改來源dramatist.sty以修復錯誤的左縮進,但無濟於事:(當然僅用於測試目的)

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

和:

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

編輯3:使用 Christian Hupfer 的新解決方案,我能夠將左側縮排減少到最低限度。但仍然有一點向左的間距,向右多一點,不多,但當語音框旁邊有一些其他未縮進的內容(例如彩色parbox 或一些普通文本)(在戲劇之外)時,它就會變得可見環境)。有沒有辦法修復最後一點不需要的間距?

答案1

除非使用該選項,否則該tcolorbox套件會將環境放在一個段落中。保留縮排的更好方法是應用一個空的tcolorboxnobeforeafterbefore={\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}

在此輸入影像描述

相關內容