Изменение формата текста при использовании диалогового пакета

Изменение формата текста при использовании диалогового пакета

Я хотел бы отформатировать текст диалога, используядиалогпакет. Я уже выделил оратора жирным шрифтом, но не смогформатировать текст ораторов. Я бы хотел, чтобы текст был как бы в рамке (без отступа)

При использовании следующего скрипта:

\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{...}, чтобы определить длину самого длинного имени персонажа. Ниже я предполагаю, что это "Марина", но если у вас есть персонажи с более длинными именами, вам нужно будет изменить команду \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аналогичный пакет для настройки диалога, но это уже отдельная тема.

(Похоже, я заменил «Мари» на «Марию»; ну ладно, не думаю, что это имеет значение для демонстрации решения.)

Связанный контент