
Я хотел бы отформатировать текст диалога, используядиалогпакет. Я уже выделил оратора жирным шрифтом, но не смогформатировать текст ораторов. Я бы хотел, чтобы текст был как бы в рамке (без отступа)
При использовании следующего скрипта:
\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
аналогичный пакет для настройки диалога, но это уже отдельная тема.
(Похоже, я заменил «Мари» на «Марию»; ну ладно, не думаю, что это имеет значение для демонстрации решения.)