thebibliography環境での行の長さ

thebibliography環境での行の長さ

- TrueRoad の投稿
返信数: 3

先日、こちらの記事がきっかけで、
下手にキッチリ余白を設定するとキレイに組版できない、
行の長さを和文文字幅の整数倍にしておかないと、
段落の最後の行と他の行とで文字の位置がズレてしまう、
ということにはじめて気が付きました。

私の場合、特に余白やフォントサイズが指定されていなかった場合には、
デフォルトのまま使っていたため特に問題なかったのですが、
これらが指定されていた場合にはキッチリ設定してしまっていたため、
段落最終行に文字位置ズレが発生してしまっておりました。

よくよく提出先の指定の文言を見てみると
「〇〇mm を目安に」
といった感じでキッチリ設定しなくてもよいように書いてあることが多いので、
これからは整数倍になるようにしよう、と思っています。

ここから本題です。

本文の部分については確かに整数倍ならばキレイに組版できるようですが、
参考文献の部分はそれでも段落最終行の文字位置ズレが発生してしまいました。

以下の例は余白設定しておらずデフォルトのままなので、
最初から行の長さが和文文字幅の整数倍になっていると思います。
本文部分はズレないのですが、参考文献部分はズレます。

\documentclass{jsarticle}
\begin{document}
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
\begin{thebibliography}{9}
\bibitem{one}
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
\bibitem{two}
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
 □□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
\end{thebibliography}
\end{document}

jsarticle の代わりに jlreq にしてみても同様にズレました。

こういった場合は、どうすればズレないようにできるでしょうか。
参考文献の部分に和文文字だけが並べられるということは少ないような気もするので、
パッと見でズレているのがわかることは少ない、から、気にしない、
という手もあるのかもしれませんが。。。

もう一つ、提出先の指定の中には、
本文のフォントサイズが 9pt (正確には 9bp)、
参考文献のフォントサイズが 8pt (正確には 8bp)、
といったように場所によって異なるサイズのフォントが指定されていることがあります。
こういった場合には、どうすればズレないようにできるでしょうか。
行の長さを 8bp と 9bp の公倍数にすればよいのかもしれませんが。。。

TrueRoad への返信

Re: thebibliography環境での行の長さ

- きえだ ゆうすけ の投稿
文献のラベルの最大長と文献とのアキの和が“整数倍”でないというのが原因でしょうね.
\labelwidthと必要なら\labelsepを適宜計算させるようにすればよいと思います.
きえだ ゆうすけ への返信

Re: thebibliography環境での行の長さ

- TrueRoad の投稿
ご回答ありがとうございます。
ちゃんと計算したわけではなく、少々ムリヤリな感じもしますが、
とりあえず以下のようにしてみたところ、ちゃんと揃うようになりました。
\documentclass{jsarticle}
% jsarticle.cls の thebibliography に対して、追加と変更を加えたもの
\makeatletter
\renewenvironment{thebibliography}[1]{%
\global\let\presectionname\relax
\global\let\postsectionname\relax
\section*{\refname}\@mkboth{\refname}{\refname}%
\list{\@biblabel{\@arabic\c@enumiv}}%
{\setlength\labelwidth{2zw}% 変更:可変設定部分を 2zw に固定
\setlength\labelsep{1zw}% 追加:1zw に設定
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
\sloppy
\clubpenalty4000
\@clubpenalty\clubpenalty
\widowpenalty4000%
\sfcode`\.\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
\makeatother
\begin{document}
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
\begin{thebibliography}{9}
\bibitem{one}
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
\bibitem{two}
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■
\end{thebibliography}
\end{document}
本来可変長の部分を 2zw に固定してしまっていたり、
長さの計算を何もせずにエイヤで固定値を入れてしまっているので、
これでは使えないことが多いかとは思いますが、
とりあえずズレなくなりました。
本文と参考文献でフォントサイズが違うような場合も、
\labelwidth と \labelsep をうまく設定してやればなんとかなりそうですね。
ありがとうございました。

TrueRoad への返信

Re: thebibliography環境での行の長さ

- TrueRoad の投稿
本件、本文と参考文献でフォントサイズが異なっても、
\labelwidth を補正して文字ズレが起きないようにする処理を実装してみました。
https://gist.github.com/trueroad/80630e95df5af0234e36270b019e6458
これでいいのかイマイチ自信ありませんが、
ご参考になればと思います。