使用对话包时更改文本格式

使用对话包时更改文本格式

我想在使用时格式化对话文本对话包。我已经把扬声器加粗了,但无法格式化发言者的文本。我希望文本位于一个框内(无缩进)

使用以下脚本时:

\documentclass{article}
\usepackage{dialogue}
% bold the speaker name
\renewcommand*\DialogueLabel[1]{%
  \scshape\textbf{#1}:\hfil
}

\begin{document}

\begin{dialogue}
    \speak{Marie} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
    \speak{Marine} What?
\end{dialogue}

我得到以下结果,其中段落的第二行与第一行不对齐:

当前结果

我想要的是以下格式(斜体和引号是可选的):

在此处输入图片描述

非常感谢!

答案1

为了达到您想要的效果,我认为您需要做的是重新定义对话环境,以便将\labelwidth设置为最长字符名称的宽度,并将设置\leftmargin为该值加上\labelsep(名称标签和文本之间的空间宽度)的值,我已将其设置为0.5em

您可以使用calc包的\widthof{...}命令来确定最长角色名称的长度。下面,我假设它是“Marina”,但如果您的角色名称更长,则需要\setlength{\widestname}{...适当更改命令。

例如:

\documentclass{article}

\usepackage[T1]{fontenc} % necessary for bold small caps
\usepackage{setspace} % for double spacing
\usepackage{dialogue}
\usepackage{calc} % to measure width of widest name
\usepackage{lipsum}% dummy text

\renewcommand*\DialogueLabel[1]{%
  \scshape\textbf{#1}:\hfil
}

% set width of widest name
\newlength{\widestname}
\setlength{\widestname}{%
    \widthof{\textbf{\textsc{Marina}}:}
}

% redefine dialogue environment to use new parameters
\makeatletter
\renewenvironment{dialogue} {%
    \begin{list}{} {%
        \setlength\itemsep{\z@ \@plus .5ex}%
        \setlength{\parsep}{\parskip}%
        \setlength{\rightmargin}{0pt}% no indentation on right; change this if you wish
        \setlength{\labelwidth}{\widestname}% set label to widest width
        \setlength{\labelsep}{0.5em}% space between (longest) name and text
        \setlength{\leftmargin}{\labelwidth}% set margin on left to same width
        \addtolength{\leftmargin}{\labelsep}% plus the label sep
        \defcommand\speak [1] {\item[{##1}]}% define speak command
        \let\makelabel\DialogueLabel
      }%
      \PreDialogue\relax
    }{%
  \end{list}%
  }
\makeatother

\begin{document}
\doublespacing

\lipsum[1][3-9]

\begin{dialogue}

\speak{Maria} \lipsum[2][1-2]

\speak{Marina} \lipsum[1][1-3]

\end{dialogue}

\end{document}

这给出了这个输出。

名字后有段落的对话

如果您还想在每个对话周围使用斜体和引号,我认为您需要使用略有不同的语法。您可以更改的定义以\speak接受两个参数,并将第二个参数放在斜体和引号中。也就是说,更改上面的 for 行,\renewenvironment内容dialogue如下:

\defcommand\speak [1] {\item[{##1}]}%

变成这样:

\defcommand\speak[2]{\item[{##1}] {\itshape ``{##2}''}}%

然后你必须像这样编写对话,用括号将名字和实际对话文本括起来:

\speak{Maria}{Nam dui ligula, fingilla \ldots}

\speak{Marina}{Lorem ipsum dolor \dots}

你就会得到这个。

斜体和引号

从风格上来说,我可能还会考虑将名称与文本右对齐:

\defcommand\speak[2]{\item[\hfill {##1}] {\itshape ``{##2}''}}%

右对齐名称

对话包并不复杂。此时您基本上已经重写了一半;您可能考虑不用它,而是使用\enuitem或类似的包来设置对话,但这是另一个话题。

(看起来我把“Marie”改成了“Maria”;哦,好吧,我想这对于演示解决方案并不重要。)

相关内容