劇作家はセリフ間のスペースを削除する

劇作家はセリフ間のスペースを削除する

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 の新しいソリューションを使用して、左のインデントを最小限に抑えることができました。しかし、左にはまだ少し、右にはまだ少しスペースが残っています。それほど大きくはありませんが、スピーチボックスが、色付きのパーボックスや通常のテキスト (ドラマ環境外) などのインデントされていない他のコンテンツの隣にある場合は、スペースが目立ってしまいます。この不要なスペースの最後の部分を修正する方法はありますか?

答え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}

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

関連情報