
使用中にダイアログテキストをフォーマットしたいのですが対話パッケージ。スピーカーを太字にしましたが、スピーカーのテキストをフォーマットするテキストをボックス内(インデントなし)に表示したいのですが
次のスクリプトを使用する場合:
\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}
次のような結果になります。段落の 2 行目が 1 行目と一致していません。
私が望むのは次の形式です(斜体フォントと引用符はオプションです):
どうもありがとう!
答え1
希望する効果を得るには、ダイアログ環境を再定義して が\labelwidth
最も長いキャラクター名の幅に設定され、 が の幅に の値 (名前ラベルとテキスト間のスペースの幅)\leftmargin
を加えた値になるように設定する必要があると思います。\labelsep
私は に設定しました0.5em
。
calc
パッケージのコマンドを使用して\widthof{...}
、最長のキャラクター名の長さを判定できます。以下では「Marina」であると想定していますが、より長い名前のキャラクターがいる場合は、コマンドを適切に変更する必要があります\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
2 つの引数を取り、2 番目の引数を斜体と引用符で囲みます。つまり、上記の\renewenvironment
forの行を次のように変更します。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
ダイアログを設定するための同様のパッケージを使用することを検討することもできますが、これは別のトピックです。
(「Marie」を「Maria」に変更したようですが、まあ、解決策を示す上では問題にならないと思います。)