TeXの記憶(79) — bibitemを少し直す

\thebibliography環境の中の各文献の表示を、以下のように2行目からは1文字字下げしたいということになりました。\hangindentを使えば簡単なのですが、リスト環境ですから各パラメータを調整する必要があります。

1020

各項目の最初が字下げされていて続く行が左に寄っているなら簡単なのですが逆はどうすればいいんでしょうか。

考える時間が少ないからか、こちらの考えが足りないからかリスト環境のパラメータだけで調整するのは断念しました。

結局、各項目を2行目以降の位置に字下げしておいて、\bibitemの先頭で左に1文字強引に移動させることで解決しました。

\def\@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]\if@filesw
      {\let\protect\noexpand
       \immediate
       \write\@auxout{\string\bibcite{#2}{#1}}}\fi\hspace*{-1zw}}
\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
       {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\hspace*{-1zw}}
\def\@biblabel#1{%
  \setbox0=\hbox{99}\leavevmode\kern.5zw[\hbox to \wd0{\hss#1\hss}]}%

\renewenvironment{thebibliography}[1]
{\small
  \chapter*{参考文献}
  \list{\llap{\@biblabel{\@arabic\c@enumiv}\hskip4mm}}%
  {\labelwidth=0mm
    \labelsep=0mm
    \leftmargin=11.5mm
    \@openbib@code
    \usecounter{enumiv}%
    \let\p@enumiv\@empty
    \topsep\z@\parsep\z@\itemsep\z@\partopsep\z@
    \renewcommand\theenumiv{\@arabic\c@enumiv}}%
  \sloppy
  \clubpenalty\z@
  \@clubpenalty\clubpenalty
  \widowpenalty\z@
  \sfcode`\.\@m}
{\def\@noitemerr
  {\@latex@warning{Empty `thebibliography' environment}}%
  \endlist}

コメント

  1. TeX初心者 より:

    はじめまして、最近TeXを学び始めましたTeX初心者です。

    この記事を参考にし、自分もbibitemをいじってみたところ、見事にインデントが加わり感動いたしました。

    しかし、1点問題があるようです。
    dvipdfmxでpdf化したときに、citeのリンクが正常に作成されない点です。

    今までciteを文中に使用した際、作成されたpdfではそのciteのところに参考文献へのリンクが自動生成され、クリックすることで参考文献のページに飛ぶようになっていました。
    そのリンクが消えてしまい、例えば「dvipdfmx:warning: PDF destination “cite.bunken001” not defined.
    」のような警告が出てしまいます。

    現在解決法を模索中ですが、マクロとなると何をすればいいのかよく分からないのが現状です。
    お力添え頂けないでしょうか?
    よろしくお願いいたします。

    • satoryosato より:

      ご連絡が遅くなりましてすみません。
      citeのリンクの件、これから考えてみますね。