
Ich möchte den Dialogtext formatieren und dabei dieDialogPaket. Ich habe den Lautsprecher bereits fett gedruckt, konnte ihn aber nichtFormatieren Sie den Text der Sprecher. Ich möchte, dass der Text in einer Art Kasten steht (ohne Einrückung)
Bei Verwendung des folgenden Skripts:
\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}
Ich erhalte das folgende Ergebnis, wenn die zweite Zeile eines Absatzes nicht mit der ersten Zeile ausgerichtet ist:
Ich wünsche mir folgendes Format(Kursivschrift und Zitate sind optional):
Vielen Dank!
Antwort1
Um den gewünschten Effekt zu erzielen, müssen Sie meiner Meinung nach die Dialogumgebung neu definieren, sodass \labelwidth
auf die Breite des längsten Charakternamens eingestellt ist, und \leftmargin
genau auf diesen Wert plus den Wert \labelsep
(die Breite des Abstands zwischen der Namensbezeichnung und dem Text) einstellen, den ich auf eingestellt habe 0.5em
.
Sie können den Befehl calc
des Pakets verwenden \widthof{...}
, um die Länge des längsten Charakternamens zu bestimmen. Im Folgenden gehe ich davon aus, dass es „Marina“ ist, aber wenn Sie Charaktere mit längeren Namen haben, müssen Sie den \setlength{\widestname}{...
Befehl entsprechend ändern.
Zum Beispiel:
\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}
Dies ergibt diese Ausgabe.
Wenn Sie auch Kursivschrift und Anführungszeichen um jeden Dialog haben möchten, müssen Sie meiner Meinung nach eine etwas andere Syntax verwenden. Sie könnten die Definition von ändern, \speak
sodass zwei Argumente verwendet werden, und das zweite Argument kursiv und in Anführungszeichen setzen. Das heißt, ändern Sie die Zeile von \renewenvironment
for dialogue
oben, die lautet:
\defcommand\speak [1] {\item[{##1}]}%
Das mögen:
\defcommand\speak[2]{\item[{##1}] {\itshape ``{##2}''}}%
Und dann müssten Sie den Dialog folgendermaßen schreiben, mit Klammern sowohl um die Namen als auch um den eigentlichen Dialogtext:
\speak{Maria}{Nam dui ligula, fingilla \ldots}
\speak{Marina}{Lorem ipsum dolor \dots}
Und Sie würden dies bekommen.
Stilistisch könnte ich auch erwägen, die Namen rechtsbündig am Text auszurichten:
\defcommand\speak[2]{\item[\hfill {##1}] {\itshape ``{##2}''}}%
Das Dialogpaket ist nicht so komplex. Sie haben es an dieser Stelle im Grunde schon zur Hälfte neu geschrieben. Sie könnten es auch weglassen und \enuitem
ein ähnliches Paket zum Einrichten des Dialogs verwenden, aber das ist ein anderes Thema.
(Sieht aus, als hätte ich „Marie“ in „Maria“ geändert; na ja, ich nehme an, für die Demonstration der Lösung ist das nicht wichtig.)