
Me gustaría dar formato al texto del diálogo mientras uso eldiálogopaquete. Ya puse en negrita al orador, pero no pudeformatear el texto de los oradores. Me gustaría que el texto estuviera en una especie de cuadro (sin sangría)
Al utilizar el siguiente 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}
Obtengo el siguiente resultado, donde la segunda línea de un párrafo no está alineada con la primera línea:
Lo que deseo es el siguiente formato.(la cursiva y las comillas son opcionales):
¡Muchas gracias!
Respuesta1
Para lograr el efecto que desea, creo que lo que necesitaría hacer es redefinir el entorno de diálogo para que se \labelwidth
establezca en el ancho del nombre de personaje más largo, y establecerlo \leftmargin
exactamente en eso más el valor de \labelsep
(el ancho del espacio entre la etiqueta del nombre y el texto), que configuré en 0.5em
.
Puede utilizar el comando calc
del paquete \widthof{...}
para determinar la longitud del nombre de carácter más largo. A continuación, supongo que es "Marina", pero si tienes personajes con nombres más largos, necesitarás cambiar el \setlength{\widestname}{...
comando apropiadamente.
Por ejemplo:
\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}
Esto da este resultado.
Si también desea que cada diálogo esté en cursiva y comillas, creo que necesitará usar una sintaxis ligeramente diferente. Puede cambiar la definición de \speak
para tomar dos argumentos y poner el segundo argumento en cursiva y comillas. Es decir, cambie la línea del \renewenvironment
for dialogue
de arriba que dice:
\defcommand\speak [1] {\item[{##1}]}%
Dentro de esto:
\defcommand\speak[2]{\item[{##1}] {\itshape ``{##2}''}}%
Y luego tendrías que escribir el diálogo así, con llaves alrededor de los nombres y del texto del diálogo real:
\speak{Maria}{Nam dui ligula, fingilla \ldots}
\speak{Marina}{Lorem ipsum dolor \dots}
Y obtendrías esto.
Estilísticamente también podría considerar alinear a la derecha los nombres con el texto:
\defcommand\speak[2]{\item[\hfill {##1}] {\itshape ``{##2}''}}%
El paquete de diálogo no es tan complejo. Básicamente, has reescrito la mitad en este punto; podría considerar prescindir de él y usar \enuitem
un paquete similar para configurar el diálogo, pero ese es un tema aparte.
(Parece que cambié "Marie" por "Maria"; bueno, supongo que no importa para demostrar la solución).