
Gostaria de formatar o texto do diálogo enquanto uso odiálogopacote. Já deixei o palestrante em negrito, mas não conseguiformatar o texto dos palestrantes. Gostaria que o texto ficasse meio que em uma caixa (sem recuo)
Ao usar o seguinte script:
\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}
Obtenho o seguinte resultado, onde a segunda linha de um parágrafo não está alinhada com a primeira linha:
O que eu desejo é o seguinte formato(o itálico e as aspas são opcionais):
Muito obrigado!
Responder1
Para obter o efeito desejado, acho que o que você precisa fazer é redefinir o ambiente de diálogo para que \labelwidth
seja definido com a largura do nome de caractere mais longo e definir \leftmargin
exatamente isso mais o valor de \labelsep
(a largura do espaço entre o rótulo do nome e o texto), que defini como 0.5em
.
Você pode usar o comando calc
do pacote \widthof{...}
para determinar o comprimento do nome de caractere mais longo. Abaixo, presumo que seja "Marina", mas se você tiver um personagem com nomes mais longos, será necessário alterar o \setlength{\widestname}{...
comando adequadamente.
Por exemplo:
\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}
Isso fornece essa saída.
Se você também quiser itálico e aspas em cada diálogo, acho que precisará usar uma sintaxe um pouco diferente. Você pode alterar a definição de \speak
receber dois argumentos e colocar o segundo argumento em itálico e aspas. Ou seja, altere a linha do \renewenvironment
for dialogue
acima que diz:
\defcommand\speak [1] {\item[{##1}]}%
Nisso:
\defcommand\speak[2]{\item[{##1}] {\itshape ``{##2}''}}%
E então você teria que escrever o diálogo assim, com colchetes em torno dos nomes e do texto do diálogo:
\speak{Maria}{Nam dui ligula, fingilla \ldots}
\speak{Marina}{Lorem ipsum dolor \dots}
E você conseguiria isso.
Estilisticamente, também posso considerar alinhar os nomes à direita em relação ao texto:
\defcommand\speak[2]{\item[\hfill {##1}] {\itshape ``{##2}''}}%
O pacote de diálogo não é tão complexo. Você basicamente reescreveu metade dele neste ponto; você pode considerar simplesmente dispensar ele e usar \enuitem
um pacote semelhante para configurar o diálogo, mas esse é um tópico separado.
(Parece que mudei "Marie" para "Maria"; tudo bem, não acho que isso importe para demonstrar a solução.)