我一直在使用剧作家软件包编写脚本,并遵循这些论坛上的指南,以使名称和对话的合理性得到很好的体现。
我的问题是,使用该解决方案时,戏剧环境中的舞台指导与文本的对话栏对齐,而不是页面对齐。戏剧环境之外的舞台指导按预期与页面对齐。
\documentclass[a4paper,12pt]{article}
\usepackage{dramatist}
\usepackage{etoolbox,enumitem}
\makeatletter
\renewenvironment{drama}
{\if@lnpa
\PackageWarning{dramatist}{\lnpwarning{a}}
\fi
\if@lnps
\PackageWarning{dramatist}{\lnpwarning{s}}
\fi
\begin{itemize}[labelwidth=\speakswidth,leftmargin=!]}
{\end{itemize}}
\patchcmd{\speaker}{\item[#1\speaksdel]}{\item[\speaksfont#1]}{}{}
\patchcmd{\@character}{\item[#1\speaksdel]}{\item[\speaksfont#1]}{}{}
\makeatother
\begin{document}
\Character[The milkman]{Milkman}{milk}
\settowidth{\speakswidth}{\speaksfont{Milkman}\speaksdel\hspace{\speechskip}}
\Scene{Milkman Arrives}
\StageDir{\begin{center}Some stage directions.\end{center}}
\begin{drama}
\milkspeaks{Some text. Some text. Some text. Some text. Some text. Some text. Some text.}
\StageDir{\begin{center}Some more stage directions.\end{center}}
\end{drama}
\end{document}
有没有办法来解决这个问题?
答案1
这实际上是包的一个“特性” dramatist
。的通常定义\StageDir
相当于
\newcommand{\StageDir}[1]{\begin{quote}\em #1\end{quote}}
drama
因此它继承了环境(作为环境实现)产生的左边距list
,因此其水平位置将始终略微位于对话行开始的右侧。center
居中将相对于对话行。
解决这个问题的一种方法可能是将舞台指示放在右边:
\renewcommand{\StageDir[1]{\begin{flushright}\em #1\end{flushright}}
(但\StageDir
在 之前必须有一个首字母\begin{drama}
)。可以使用以下技巧实现居中:
\renewcommand\StageDir[1]{%
\par\addvspace{\topsep}
\centerline{\em #1}
\addvspace{\topsep}}
如果你想要居中的多行舞台指示,那么
\renewcommand\StageDir[1]{%
\par\addvspace{\topsep}
\centerline{%
\begin{minipage}{\dimexpr\textwidth-2\leftmargini\relax}
\centering\em\strut#1\strut\end{minipage}}
\addvspace{\topsep}}
应该做。
答案2
我稍微修改了 egreg 的答案,以使我的舞台指导与角色名称齐平,使用以下命令:
\renewcommand\StageDir[1]{%
\par\addvspace{\topsep}
\centerline{%
\begin{minipage}{\dimexpr\textwidth\leftmargini\relax}
\em\strut#1\strut\end{minipage}}
\addvspace{\topsep}}
\begin{document}