縦組みで、発言者名+セリフの折り返し位置を揃える方法

Re: 縦組みで、発言者名+セリフの折り返し位置を揃える方法

- はやて (h20y6m) の投稿
返信数: 5

発言者名の最大長が予め分かっていて罫線などもいらないのであれば、 リスト系(箇条書き)環境を使うという手もあります。

itemizeなどの環境を作るのにつかわれるlist環境を使ってみます。

\begin{list}{}{%
  % 一番長い発言者の文字数分(:を含む)のはばを確保
  \setlength{\labelwidth}{4\zw}%
  % :の後ろの四分アキ(JFMグルー)が消えてしまうのでそのための調整
  \addtolength{\labelwidth}{-0.25\zw}%
  \setlength{\labelsep}{0.25\zw}%
  % 折り返しの左マージン
  \setlength{\leftmargin}{\labelwidth}%
  \addtolength{\leftmargin}{\labelsep}%
  % 発言毎に1行空ける場合
  \addtolength{\itemsep}{\baselineskip}%
  % 段落字下げしない場合
  \setlength{\listparindent}{0pt}%
}
\item[太郎:]
ああああああああああああああああああああ
ああああああああああああああああああああ
\item[花子:]
いいいいいいいいいいいいいいいいいいいい
いいいいいいいいいいいいいいいいいいいい
\item[権兵衛:]
うううううううううううううううううううう
うううううううううううううううううううう
\end{list}

パラメータは * http://xyoshiki.web.fc2.com/tex/list.html などを参考にしてみてください。

何度も使うなら独自環境として定義しておくと楽かもしれません。

\NewDocumentEnvironment{serifu}{m}{%
  \begin{list}{}{%
    \setlength{\labelwidth}{#1}%
    \addtolength{\labelwidth}{-0.25\zw}%
    \setlength{\labelsep}{0.25\zw}%
    \setlength{\leftmargin}{\labelwidth}%
    \addtolength{\leftmargin}{\labelsep}%
    \addtolength{\itemsep}{\baselineskip}%
    \setlength{\listparindent}{0pt}%
  }%
}{%
  \end{list}%
}

\begin{serifu}{4\zw}
\item[太郎:]
...
\end{serifu}
はやて (h20y6m) への返信

Re: 縦組みで、発言者名+セリフの折り返し位置を揃える方法

- 和田 勇 の投稿

はやてさんの提案の list と類似ですが description (enumitem) を利用した方法についても 末尾に参考ソースを示していますが、 tabularx の代わりに tabularray での実装でどうでしょうか?

添付のファイルを参考にしてください。

tabularrayの利点は以下の通りかな?

  1. tabularx の機能はほぼ使える(一部の文字列の変更でほぼほぼ対応可能)
  2. ページを跨っても特段留意することはない
    • list や description もページを意識する必要なし
  3. tabularx より後出なこともあり色々な機能がある(詳しくは texdoc tabularray でマニュアル参照)
和田 勇 への返信

Re: 縦組みで、発言者名+セリフの折り返し位置を揃える方法

- t bz の投稿

ご丁寧なご回答とサンプルファイルのご提供、ありがとうございました。

ご提案いただいた方法を含めていろいろと試してみた結果、今回は tabularray を用いる方法を採用することにいたしました。

詳しいご説明と貴重な情報をお寄せいただき、心より感謝申し上げます。
ありがとうございました。

はやて (h20y6m) への返信

Re: 縦組みで、発言者名+セリフの折り返し位置を揃える方法

- t bz の投稿
ご回答ありがとうございました。

ご提案いただいた方法も試してみたのですが、最終的には和田 勇さんが提示された tabularray を用いる方法を採用することにいたしました。

アイデアをお寄せいただき、本当にありがとうございました。
t bz への返信

Re: 縦組みで、発言者名+セリフの折り返し位置を揃える方法

- 和田 勇 の投稿

書き忘れていた。tabularray もメリットばかりではありません。デメリットもあります。

 処理時間

最大のデメリットは通常の表に関する部分は tabularx などのほぼ2倍の処理時間が必要なこと。 理由は単純。色々なことを考慮して2回処理するからです。 tabularx などに不足していた機能などを実現させるためではないかと推測しています。

もし色々な「表」パッケージに興味があるなら 「tabulararray vs array, table, tabular, tabularx, longtable, supertabular, longtabu, etc」 で検索してみてください。

処理時間に関しては、昨今のハードウェア環境ではそれほど問題にはならないと思いますが、 もし処理速度に不満を感じたら list や description の利用を検討してください。

  長い台詞

(この項、未検証なので間違ってるかもしれませんが) list や description ではほぼ問題は起きないと思いますが、 一段落の幅に近似したりあるいは超えるような長い「台詞(せりふ)?」がある場合では、 段落やページ境界での空きが目立つかもしれません、ないし、うまくいかないかもしれません。

tabulaarray vs list / description

いずれにしても、ほんのちょっと tabulax → tabularray より変更が多いですが、 困ったときは list や description の検討をしてみてください。移行は容易ですので。

和田 勇 への返信

Re: 縦組みで、発言者名+セリフの折り返し位置を揃える方法

- 和田 勇 の投稿
ごめんなさい、タイポに気がついて直そうと試みたけどタイムアップでタイポミスな情報が登録されてしまいました。