From f689c91581665257602a841d03f73078c3495e14 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 7 Feb 2022 03:03:44 +0000 Subject: CTAN sync 202202070303 --- biblio/pbibtex/pbibtex-manual/LICENSE | 28 + biblio/pbibtex/pbibtex-manual/README.md | 34 + biblio/pbibtex/pbibtex-manual/jbibtex.pdf | Bin 0 -> 257313 bytes biblio/pbibtex/pbibtex-manual/jbibtex.tex | 672 +++++++++++++ biblio/pbibtex/pbibtex-manual/jbtxdoc.pdf | Bin 0 -> 289185 bytes biblio/pbibtex/pbibtex-manual/jbtxdoc.tex | 1090 ++++++++++++++++++++++ biblio/pbibtex/pbibtex-manual/jbtxhak.pdf | Bin 0 -> 247228 bytes biblio/pbibtex/pbibtex-manual/jbtxhak.tex | 692 ++++++++++++++ biblio/pbibtex/pbibtex-manual/pbibtex-manual.pdf | Bin 0 -> 118781 bytes biblio/pbibtex/pbibtex-manual/pbibtex-manual.tex | 313 +++++++ 10 files changed, 2829 insertions(+) create mode 100644 biblio/pbibtex/pbibtex-manual/LICENSE create mode 100644 biblio/pbibtex/pbibtex-manual/README.md create mode 100644 biblio/pbibtex/pbibtex-manual/jbibtex.pdf create mode 100644 biblio/pbibtex/pbibtex-manual/jbibtex.tex create mode 100644 biblio/pbibtex/pbibtex-manual/jbtxdoc.pdf create mode 100644 biblio/pbibtex/pbibtex-manual/jbtxdoc.tex create mode 100644 biblio/pbibtex/pbibtex-manual/jbtxhak.pdf create mode 100644 biblio/pbibtex/pbibtex-manual/jbtxhak.tex create mode 100644 biblio/pbibtex/pbibtex-manual/pbibtex-manual.pdf create mode 100644 biblio/pbibtex/pbibtex-manual/pbibtex-manual.tex (limited to 'biblio/pbibtex/pbibtex-manual') diff --git a/biblio/pbibtex/pbibtex-manual/LICENSE b/biblio/pbibtex/pbibtex-manual/LICENSE new file mode 100644 index 0000000000..c5f477cd6b --- /dev/null +++ b/biblio/pbibtex/pbibtex-manual/LICENSE @@ -0,0 +1,28 @@ +Copyright (C) 2010 ASCII MEDIA WORKS. +Copyright (C) 2016-2022 Japanese TeX Development Community +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/biblio/pbibtex/pbibtex-manual/README.md b/biblio/pbibtex/pbibtex-manual/README.md new file mode 100644 index 0000000000..bb31242e0c --- /dev/null +++ b/biblio/pbibtex/pbibtex-manual/README.md @@ -0,0 +1,34 @@ +# pbibtex-manual + +This is a project of preparing a manual of Japanese pBibTeX and upBibTeX. + +## Contents + +The main document (pbibtex-manual.pdf) is an official manual of +Japanese pBibTeX and upBibTeX. + +Current (u)pBibTeX is a forked version of JBibTeX. For historical +reasons, we provide the documentations of JBibTeX as-is: + + * jbibtex.pdf: Basic description of JBibTeX. + * jbtxdoc.pdf: Japanese translation of btxdoc.pdf, with additional notes for JBibTeX. + * jbtxhak.pdf: Japanese translation of btxhak.pdf, with additional notes for JBibTeX. + +Note that descriptions of JBibTeX's encoding handling are +incorrect any more with (u)pBibTeX. + +## Repository + +The bundle is maintained on GitHub: +https://github.com/texjporg/pbibtex-manual + +## License + +The bundle may be distributed and/or modified under the terms of +the 3-clause BSD license (see [LICENSE](./LICENSE)). + +## Release Date + +2022-02-06 + +Japanese TeX Development Community diff --git a/biblio/pbibtex/pbibtex-manual/jbibtex.pdf b/biblio/pbibtex/pbibtex-manual/jbibtex.pdf new file mode 100644 index 0000000000..65f4fb0925 Binary files /dev/null and b/biblio/pbibtex/pbibtex-manual/jbibtex.pdf differ diff --git a/biblio/pbibtex/pbibtex-manual/jbibtex.tex b/biblio/pbibtex/pbibtex-manual/jbibtex.tex new file mode 100644 index 0000000000..5c328fe9c4 --- /dev/null +++ b/biblio/pbibtex/pbibtex-manual/jbibtex.tex @@ -0,0 +1,672 @@ +\documentstyle[tables]{jarticle} +\def\dg{\gt} +\def\dm{\mc} +\voffset=-2.3cm +\hoffset=-2.3cm +\textheight=25.5cm +\textwidth=16.6cm + +\def\JTeX{\leavevmode\lower .5ex\hbox{J}\kern-.17em\TeX} +\def\JLaTeX{\leavevmode\lower.5ex\hbox{J}\kern-.17em\LaTeX} + +\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} + +\def\JBibTeX{\leavevmode\lower .6ex\hbox{J}\kern-0.15em\BibTeX} + +\def\myftnote#1{\footnote{\parindent=16pt\hskip-15pt\hang\indent#1\parindent=10pt}} + + +\def\tstrut{\vrule height 2.346ex depth 0.908ex width 0pt} +\thicksize=0.7pt +\thinsize=0.3pt + +\setcounter{topnumber}{3} +\setcounter{bottomnumber}{3} +\setcounter{totalnumber}{6} +\renewcommand{\topfraction}{0.99} +\renewcommand{\bottomfraction}{0.99} +\renewcommand{\textfraction}{0.01} + +\title{日本語\BibTeX:\JBibTeX} +\author{松井 正一 {\tt\ (matsui@denken.or.jp)}\\ +\normalsize (財)電力中央研究所 情報システム部 (〒100 千代田区大手町1-6-1) } +\date{1991年1月1日} +\begin{document} +\baselineskip=16pt + +\maketitle + +\begin{abstract} + +\JBibTeX は\BibTeX\ 0.99cを基に +{\tt bib, bst}ファイル中に漢字コードを使えるように変更を加えたものである. + +このメモでは,先ず最初に\BibTeX の概要を簡単に説明した後, +日本語化に対しての基本的な考え方,主な変更点, +日本語に対応するように作成したスタイルについて +説明する. +\end{abstract} + +\section{はじめに} + +\TeX をNTTの斉藤氏が日本語化してくれたおかげで\TeX で +日本語が使えるようになった\myftnote{ICOTの高木氏(現在日立),都立大の +桜井氏の力に負うところも大きい.}.またNTTの磯崎氏が\LaTeX の +日本語版 \JLaTeX を作ってくれたので, +簡単に日本語のタイプセットができるようになった\myftnote{最初に開発した +\JBibTeX はNTT版を想定していたので,ASCII版に対する記述がないだけで, +他意はない.現在はNTT版,ASCII版の両方を使っている.}. + +技術系の文書を書く場合には,参考文献の管理に手間取ることが多い. +この手間を軽減するためのプログラムとして\LaTeX には,{\tt roff} +一族の{\tt refer}に対応した +\BibTeX があるが,この日本語化ができて +いなかったので\myftnote{1988年4月に,高木氏 +から\JTeX~in C のテープを入手した時点で.またASCIIバージョンを知らなかった +ので.}, +\JLaTeX の機能を活かしきれないきらいがあった\myftnote{私は面倒くさい +ことは嫌いなので.}. +そこで,とりあえず日本語を使える形の\BibTeX を\JBibTeX という形で +作成してみた. + +\section{\BibTeX の概要} + +\subsection{処理の流れ} +\BibTeX は\LaTeX で作成される{\tt aux}ファイル\myftnote{ファイルの +エクステンションでファイル名を代表する.}中 +の \verb|\citation|に示されて +いる \verb|\cite|項目に対応する参考文献レコードを\LaTeX の +文書中に \verb|\bibliography|で指定されたデータベースファイル +({\tt bib})から +検索し, \verb|\bibliographystyle|で指定された参考文献 +書式(スタイル)で{\tt bbl}ファイルに書き出す形で動作する.実行時の +メッセージは端末に出力されると同時に,ログファイルの{\tt blg}ファイルにも +出力される. + +通常はある文書{\tt file.tex}を処理するには次のような +手順をふむ\myftnote{{\tt bbl}ファイルの内容が固定された後は,{\tt latex}を +起動するだけでよい(相互参照関係の処理のために2回以上の起動が必要な +こともある).}. + +\newcounter{myn} +\begin{list}% +{\arabic{myn}.}{\usecounter{myn} +\setlength{\parsep}{1pt} +\setlength{\itemsep}{1pt} +\setlength{\topsep}{1pt} +} +\item {\tt latex file}で{\tt aux}を作り出す. +\item {\tt bibtex file}で{\tt aux, bib}から{\tt bbl}ファイルを作り出す. +\item 以後の{\tt latex file}の起動で{\tt bbl}が自動的に読み込まれる. +\end{list} + +\subsection{参考文献データベース} +データベース中の参考文献レコードは,文献の形式(論文,本など)を指定した +後に,引用キー,書誌項目を ``キーワード=値'' の形でカンマで区切って +並べる形で記述する\cite{latex,btxdoc}. +\newpage +文献の形式としては以下が用意されている. +\begin{table}[h] +\begintable +{\dg 文献の形式}|{\dg 説\hskip2cm 明}\hfil\crthick +{\tt article}\hfill| 論文誌など発表された論文\hfill\cr +{\tt book}\hfill | 出版社の明示された本\hfill\cr +{\tt booklet}\hfill | 印刷,製本されているが出版主体が不明なもの\hfill\cr +{\tt conference}\hfill | inproceedingsと同じ(Scribeとの互換性のため)\hfill\cr +{\tt inbook}\hfill | 書物の一部(章,節,文など何でも)\hfill\cr +{\tt incollection}\hfill | それ自身の表題を持つ,本の一部分\hfill\cr +{\tt inproceedings\ }\hfill | 会議録中の論文\hfill\cr +{\tt manual}\hfill | マニュアル\hfill\cr +{\tt masterthesis}\hfill | 修士論文\hfill\cr +{\tt misc}\hfill | 他のどれにも当てはまらない時に使う\hfill\cr +{\tt phdthesis}\hfill | 博士論文\hfill\cr +{\tt proceedings}\hfill | 会議録\hfill\cr +{\tt techreport}\hfill | テクニカルレポート\hfill\cr +{\tt unpublished}\hfill | 正式には出版されていないもの\hfill\endtable +\end{table} + +それぞれで必須な項目(フィールド)がある. + +項目(フィールド)としては以下がある\myftnote{正確にはplain, alpha, +abbrv, unsrtで,annoteを除いた項目が意味を持つ(タイプセットに +使われる).}. +\begin{table}[h] +\begintable +{\dg フィールド名}|{\dg 説\hskip2cm 明}\hfil\crthick +{\tt address}\hfill | 出版主体の住所\hfill\cr +{\tt annote}\hfill | 注釈付きのスタイルで使われる\hfill\cr +{\tt author}\hfill | 著者名\hfill\cr +{\tt booktitle}\hfill | 本の名前\hfill\cr +{\tt chapter}\hfill | 章,節などの番号\hfill\cr +{\tt crossref}\hfill | 相互参照する文献のデータベースのキー\hfill\cr +{\tt edition}\hfill | 本の版\hfill\cr +{\tt editor}\hfill | 編集者\hfill\cr +{\tt howpublished\ }\hfill | どのようにしてこの奇妙なものが発行されたか\hfill\cr +{\tt institution}\hfill | テクニカルレポートの発行主体\hfill\cr +{\tt journal}\hfill | 論文誌名\hfill\cr +{\tt key}\hfill | 著者名がない時に相互引用,ラベル作成などに使われる\hfill\cr +{\tt month}\hfill | 発行月,または書かれた月\hfill\cr +{\tt note}\hfill | 読者に役立つ付加情報\hfill\cr +{\tt number}\hfill | 論文誌などの番号\hfill\cr +{\tt organization\ }\hfill | 会議を主催した機関名あるいはマニュアルの出版主体\hfill\cr +{\tt pages}\hfill | ページ(範囲)\hfill\cr +{\tt publisher}\hfill | 主版社(者)名\hfill\cr +{\tt school}\hfill | 修士,博士論文が書かれた大学名\hfill\cr +{\tt series}\hfill | シリーズ,あるいは複数巻の本の名前\hfill\cr +{\tt title}\hfill | 表題\hfill\cr +{\tt type}\hfill | テクニカルレポートの種類\hfill\cr +{\tt volume}\hfill | 論文誌,複数巻の本の巻\hfill\cr +{\tt year}\hfill | 発行年,または書かれた年\hfill\endtable +\end{table} +\newpage + +以下にデータベースの記述例を示す. + +{\baselineskip=11pt +\begin{quote} +\begin{verbatim} + @ARTICLE{la, + author="Masao Iri and Kazuo Murota and Shouichi Matsui", + title="Linear-time approximation algorithms for finding the + minimum-weight perfect matching on a plane", + journal=ipl,volume=12,pages="206--209",year=1981 + } +\end{verbatim} +\end{quote} +} + +頻繁に使われる論文誌名などは,({\tt bst}ファイル中に)後述のマクロ機能を使って +省略形を定義しておくことで,{\tt journal=ipl}などと書ける({\tt bib}ファイル +中に{\tt @STRING(ipsj=\{情報処理学会\})}のように定義することもできる). + +\subsection{スタイル} +スタイルは{\tt alpha.bst}などのスタイルファイルに記述されている. +スタイルファイル中の書式は,スタックマシンに対しての命令を +後置演算子記法で記述した形である\cite{btxhak}. + +スタイルを記述する言語には二種類の関数がある.一つはシステム組み込みの +ものであり,{\tt newline\$, write\$} などのように名前の最後が{\tt `\$'}で +終る.もう一つは{\tt MACRO, FUNCTION}を使って定義するものである. + +組み込み関数には以下のようなものがある(全部で37ある). + +\begin{table}[h] +\parasize=9.68cm +\begintable +{\dg\bf 組み込み関数(名)\ }|{\dg 機\hskip2cm 能}\hfil\crthick +{\tt >, <, =} \hfill | \para{整数の比較}\cr +{\tt +, -}\hfill |\para{整数加算,減算}\cr +{\tt *}\hfill | \para{文字列の連結}\cr +{\tt :=}\hfill |\para{代入}\crthick +{\tt add.period\$}\hfill|\para{文字列の{\tt `\}'}でない最後の文字が, +{\tt `.', `?', `!'}のいずれでもなければ{\tt `.'}を最後に付加する}\cr +{\tt call.type\$}\hfill|\para{エントリの型(文献の型)に応じた関数を呼び出す. +例えば{\tt book}なら関数{\tt book}を呼び出す.}\cr +{\tt change.case\$}\hfill | \para{指定に応じて大文字, +小文字に変換した文字列を返す(指定が{\tt `t'}なら +最初の文字以外をすべて小文字に,{\tt `l'}ならすべて +小文字に,{\tt `u'}ならすべて大文字に変換する).}\cr +{\tt chr.to.int\$}\hfill |\para{1文字のみの文字列のASCIIコードを返す}\cr +{\tt text.prefix\$}\hfill | \para{高々指定された文字数 +以内の先頭文字列を返す}\cr +{\tt skip\$}\hfill | \para{何もしない}\cr +{\tt substring\$}\hfill | \para{部分文字列を返す}\cr +{\tt write\$}\hfill | \para{文字列を{\tt bbl}ファイルに書き出す} \endtable +\end{table} + +スタイルは前述の関数とコマンドおよびシステム変数を使って記述する. +コマンドは以下からなる. +\begin{itemize} +\item 宣言と変数,関数定義のための5つのコマンド({\tt ENTRY, FUNCTION, INTEGERS, +MACRO, STRINGS}) + +\begin{table}[h] +\begintable +{\dg コマンド名}\ | {\dg 機\hskip2cm 能}\hfil\crthick +{\tt ENTRY}\hfill | フィールドとエントリを宣言する\hfill\cr +{\tt FUNCTION}\hfill | 新たな関数を定義する\hfill\cr +{\tt INTEGERS}\hfill | グローバルな整数型の変数を宣言する\hfill\cr +{\tt MACROS}\hfill | 文字列マクロを定義する\hfill\cr +{\tt STRINGS}\hfill | グローバルな文字列型の変数を宣言する\hfill\endtable +\end{table} + +\item データベース読み込みのためのコマンド({\tt READ}).データベース +を読み込み,内部的にリストの形式にする. +\newpage +\item 処理と出力のための4つのコマンド({\tt EXECUTE, ITERATE, REVERSE, SORT}) + +\begin{table}[h] +\begintable +{\dg コマンド名}\ | {\dg 機\hskip2cm 能}\hfil\crthick +{\tt EXECUTE}\hfill | 1つの関数を実行する\hfill\cr +{\tt ITERATE}\hfill | 現在のリスト中の各エントリに対して1つの関数を +適用する\hfill\cr +{\tt REVERSE}\hfill | {\tt ITERATE}と同じ操作をリストの逆順に行う\hfill\cr +{\tt SORT}\hfill | {\tt sort.key\$}によってリストをソートする\hfill\endtable +\end{table} +\end{itemize} + +システム変数には以下がある. +\begin{table}[h] +\begintable +{\dg 変数名}| {\dg 説\hskip2cm 明}\hfil\crthick +{\tt sort.key\$}\hfill | 文字列型,ソートのキー\hfill\cr +{\tt entry.max\$}\hfill | 整数型,エントリ文字列の最大長(100)\hfill\cr +{\tt global.max\$\ }\hfill | 整数型,文字列の最大長(1000)\hfill\endtable +\end{table} + +以下にスタイルファイル{\tt alpha}の一部分を例として示す. + +\begin{figure}[h] +{\baselineskip=11pt +\begin{quote} +\begin{verbatim} +MACRO {tcs} {"Theoretical Computer Science"} +READ +FUNCTION {sortify} + { purify$ "l" change.case$ } +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} +INTEGERS { et.al.char.used } +FUNCTION {initialize.et.al.char.used} + { #0 'et.al.char.used := } +EXECUTE {initialize.et.al.char.used} +ITERATE {presort} +SORT +EXECUTE {initialize.longest.label} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {begin.bib} +{ et.al.char.used + { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ } + 'skip$ + if$ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +\end{verbatim} +\end{quote} +} +\end{figure} +\section{日本語化の概要} +\subsection{バージョン0.10と0.20の生い立ち} +最小限の変更ですませることにし\myftnote{手抜きである.}, +以下の形で元の\BibTeX (Version 0.99c; Pascal版)に変更を +加えた第1バージョン(0.10)を1988年5月に作成した.この +ために行った変更は,change +fileの変更が600行程度,Cで書かれたサポートルーチン(bibext.c)への +変更が50行程度であるが,change fileへの本質的な変更は200行程度である. + +その後1989年5月に\BibTeX のCバージョンに対応して, +Pascalコンパイラーのないシステムでも動作するように, +第2バージョン(0.20)を作成した.このために +行った変更は,新たな組み込み関数を追加する +ことも含めてchange fileの変更が450行程度, +bibext.cへの変更が430行程度で +ある\myftnote{{\tt web2c}の出力中の{\tt putc}を日本語 +コードに対応するための{\tt Fputc}に{\tt sed}する +ために{\tt Makefile}の一部分も変更した.}.{\tt bibext.c}の変更の +大部分は\JTeX 用に桜井氏が作成したプログラムを流用しているので,新たに +作成した部分は少ない\myftnote{作業はSUN-3で行ったが,その他のマシンへの +移植作業はJUNETを通じて協力していただいた.これにより +現在は,SUN-4, VAX/ Ultrix/BSD, NEWS /NEWS-OS, Symmetry /Dynix, +FACOM M Series /UTS, LUNA /BSD, ΣWSなどで動作している.}. + +\subsection{バージョン0.30とMS-DOS版の旅立ち} +筆者が勤務の関係で米国出張中のクリスマス休暇の間に作成した +のがバージョン0.30と{\tt MS-DOS}版の\JBibTeX である\myftnote{寒い所 +だったので,家族で外出 +する気にもならず,お金もなかったので旅行もできずで {\tt :-)}.}. + +バージョン0.30ではASCII版のversion 0.98をベースにした{\tt Kanji BibTeX} +との整合性を向上させる,また不完全であった日本語対応を完全にするなどの +作業を行った. +このためにバージョン0.20から変更したchange fileの行数は50行程度である. +これに際しては,職場の同僚である +二方厚志,所健一の両氏,(株)アスキーの倉沢良一,渡邉雄一両氏の協力を得た. +特に渡邉氏には多忙な中,様々なテストに協力していただいた. +バージョン0.30ではドキュメント類の修正,スタイルファイルの改良も行った. +これにより,NTT版だけでなく,ASCII版でも(ドキュメントの処理も含めて) +問題なく動作するバージョンの配布キットが完成した. + +MS-DOS版はUNIX上で作成したCのソースを直接変更してTurbo-Cを利用して作成した. +コンパイラ,リンカの制約から大量の大域変数が宣言できないので, +大域変数の宣言部分をいくつかのファイルに分けるとか,動的にメモリを +割り当てるとかの変更をCソースに直接施した.変更行数は100行程度である. +利用可能メモリの制約から,処理可能引用文献数がUNIX版に比べて +少ないことを除けば(300件程度以内でないとだめ), +実用上十分な性能を持つプログラムである. + +\subsection{漢字コードの扱い} + +オリジナルの\BibTeX への変更を少なくするために, +漢字コードは内部的にはEUCで表現することとした. +ファイルから一行を読み込む時点で,EUCならそのまま,JIS漢字コードはEUCに +コード変換する\myftnote{JIS漢字コードのエスケープ・シーケンスの +先頭の2バイトのみを漢字in/outの +判定に使用し,3バイト目は何でもよいようにしてある.また,当所ではSJISは +使っていないのでバージョン0.10ではそれは考えていなかったが, +バージョン0.20ではそれにも対処できるようにした.MS-DOS版ではSJISがディフォルト +の漢字コードになっている.JISも読める.}. + +漢字コードをファイルに書き出す時にコード系の変換を行う.\JBibTeX +はNTT版 \JTeX に改良を加えて漢字コードとしてJISの他に,EUCも使えるように +したものの上の\JLaTeX と対にして使うことを前提としているが,ASCII版でも +問題なく使える. +この\JTeX では漢字コードの指定がEUC/SJISであっても,JIS漢字コードも読み込める +ように変更したものである\myftnote{都立大の桜井氏が中心となって +開発しているバージョンに対応している.}. + +そこで第1バージョン(0.10)では漢字コードの変換は以下の形で行う +こととした. + +\begin{itemize} +\item 補助({\tt aux}),スタイル({\tt bst}),データベース({\tt bib})ファイル中 +の漢字コードの総てがEUC漢字コードであれば,{\tt bbl}, {\tt blg}ファイル +あるいは端末への出力はEUCコードで行う. +\item 上記以外の場合には,書き出しが行れる直近に読んだJIS漢字のコードの +エスケープ・シーケンスを使って漢字コードを書き出す\myftnote{完全に漢字コード +対応になっていない可能性があるので,bibファイルなどの記述にエラーがあった +時に,端末などにEUCコードのままで漢字コードが出力されるかもしれない(第1 +バージョン(0.10)の場合).}. +\end{itemize} + +漢字コードの変換は,入力時はbibext.cで行い,出力時はbibtex本体で行うことと +したために,change fileの変更が多くなった. + +第2バージョン(0.20)以降では,漢字コード系はサイト毎に +コンパイル時に決定することとし,利用者単位には次の環境変数で変更可能とした. + +\begin{figure}[h] +\thicksize=0pt +\thinsize=0pt +\begintable +端末\hfill |{\tt BIBTERMCODE}\hfill | \hskip5cm\cr +ファイル\hfill | {\tt BIBFILECODE}\hfill | \hskip5cm\endtable +\end{figure} + +これらの変数に\JTeX の \verb|\kanjiterminaltype|, \verb|\kanjifiletype|で +指定するのと同じ値を設定することで(EUCなら20, +SJISなら10など)入出力のコード系を変更できる(\JTeX 同様EUC, SJISを指定 +してあってもJISコード系も読み込めるようになっている). + +漢字コードの変換はすべてbibext.cの中で行うこととしたので,change fileの +変更が少なくなっている. + +\subsection{組込み関数の仕様変更} + +組込み関数の{\tt substring\$, text.prefix\$} においては +1つの漢字コードの間で(1バイト目と2バイト目の間で)文字列が切られないようにした. +例えば,`漢字' の先頭から3文字(バイト)を抜出すと `字' の2バイト目がなくなって +しまうので,このような場合には,4バイト目まで切出すようにした\myftnote{これは +日本語用のスタイルでない{\tt alpha, plain}などを +使った場合でもそれなりの出力が得られるようにするためである.}. + +前記との関係で,{\tt chr.to.int\$} は引数が +漢字コードならばsingle characterでなくてもwarningを出さず, +漢字文字列の1バイト目のコードを値として返すようにした\myftnote{これは0.10バー +ジョンで試作したスタイルファイル中で,漢字コード文字列の判定をいいかげんに +行うために必要となった変更であり,0.20バージョンでは漢字コード文字列判定用に +新たな組み込み関数を追加したので不要かも知れない.}. + +以上はバージョン0.10から行っていた変更であるが,バージョン0.30では,さらに +次の2つの変更も追加した. + +{\tt add.period\$} 関数は,半角の`!'$\!$, `?'$\!$, `.'で終われば, +`.'を付加しないので,全角の`!',`?',`.',`。'で終わっても +`.'を付加しないようにした. + +{\tt format.name\$} 関数では,漢字コードで表記された氏名の場合には全角の空白も +半角の空白と同じように扱うこととした.また複数の名前は \verb*| and | +を間に入れて列挙するが,漢字コード表記された氏名の場合には +全角の``,'', ``、''を使っても \verb*| and | と同じように扱うようにした. +これで漢字コード著者名の入力が以前より簡単になるはずである(少なくともPCでかな +漢字変換FEPを使っている場合には,半角への切り替えが不要になる). + +\subsection{組み込み関数の追加} + +次に述べる日本語用のスタイルに関連することであるが,漢字コードを含む文字列の +場合に処理を分ける必要がある.第1バージョンでは漢字コードを含むかどうかは, +先頭文字のみで判定するようなスタイルを作成したが,これでは不完全である +ので,第2バージョン以降からは{\tt is.kanji.str\$} という関数を追加した. +この関数は,与えられた文字列が日本語コード(non ASCIIコード)を +含む時に``真''(整数の1)を返す関数である. + +\newpage +\section{日本語用のスタイル} + +\subsection{問題点} +前述の方法で日本語を扱えるようにしても,\BibTeX のスタイル(bst)を +日本語に合せないと,参考文献が奇妙な型式となる. +例えば,{\tt plain}のスタイルを使うと,著者が複数の場合 + +\vskip 2mm +\hskip1cm +[1] 松井 and 篠原 $\cdots$ +\vskip 2mm + +\noindent のような形になってしまう.日本語の場合にはやはり + +\vskip 2mm +\hskip1cm +[1] 松井, 篠原 $\cdots$ +\vskip 2mm + +\noindent のようになって欲しい.また英語の場合には`{\tt et al.}'でよいが +日本語の場合には`{\dg ほか}'の方がよい. +さらに,文献をソートする場合には著者名を主キーとするスタイルが多いので, +ここが漢字コードであると漢字コードの順に並ぶので具合がよくない. + +{\tt alpha}では著者の名前からラベルを作るが,英語と混在することを考えると +ラベルも + +\vskip 2mm +\hskip1cm +[松篠87] 松井, 篠原 $\cdots$ +\vskip 2mm + +\noindent のような形よりは + +\vskip 2mm +\hskip1cm +[MS87] 松井, 篠原 $\cdots$ +\vskip 2mm + +\noindent のほうが望ましいと考えた. + +\subsection{日本語用のスタイルの試作} + +上記のような問題を解決することを考慮したスタイルを標準スタイル +{\tt plain}, {\tt alpha}, {\tt abbrv}, {\tt unsrt}を基に{\tt jplain}, +{\tt jalpha}, {\tt jabbrv}, {\tt junsrt} +という形で作ってみた.また情報処理学会論文誌{\tt tipsj},情報処理 +学会欧文論文誌{\tt jipsj}, +電子情報通信学会論文誌{\tt tieic},日本オペレーションズリサーチ学会 +論文誌{\tt jorsj},人工知能学会誌{\tt jsai},ソフトウェア科学会誌{\tt jssst}用 +のスタイルも試作してみた. + +参考文献のソートあるいはラベル作成を巧く行うことを +考え合せて,日本語の文献には著者名のローマ字標記を`名前', `姓'の順で(英語風に) +入れる`{\tt yomi}'なる新たなフィールドを{\tt bib}ファイル中に +書くこととした\myftnote{この順番に異論のある人もあろうが\cite{jeng}, +多くの日本人がこの形で(英語で)書いて論文を発表していることから +こう決めた.}$^,$\myftnote{ここにひらがなで`読み'をかくことも, +もちろんできるから,五十音順にソートすることも可能である.}. +このフィールドを使ってソートを行ったり, ラベルを作るような形で +上記のスタイルを作成した\myftnote{yomiというフィールドを +加えるために{\tt bibtex}本体を変更する必要はない. +スタイルファイル中の{\tt ENTRY}に追加するだけである.}$^,$\myftnote{著者名の +処理以外にも変更を加えている.詳しくは配布キット中の{\tt jbtxbst.doc}を +参照されたい.}. + +\newpage +{\tt jalpha}スタイルの一部を例として示す(ただし配布済みのスタイルとは +異なる部分がある). + +\vskip2mm + +{\baselineskip=11pt +\begin{quote} +\begin{verbatim} +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff}{ll}" format.name$ is.kanji.str$ + {s nameptr "{ff}{ll}" format.name$ 't :=} + {s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=} + if$ + nameptr #1 > + { namesleft #1 > + {", " * t * } + { t "others" = + { s is.kanji.str$ + {"ほか" * } + {", et~al." * } + if$ + } + { s is.kanji.str$ + {", " * t * } + { numnames #2 = + {" and " * t * } + {", and " * t * } + if$ + } + if$ + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +\end{verbatim} +\end{quote} +} + +\subsection{データベースの記述方法} + +以上のようにした\JBibTeX のための{\tt bib}ファイルの中身は次のように +する\myftnote{著者の姓と名の間にスペース(半角でも全角でも)を +入れておかないと,{\tt jabbrv}スタイルの時に姓だけにならずに,名も出 +力されてしまうので注意が必要である.スペースで姓と名を区切った場合には, +スタイルファイルの記述において,漢字コード著者名を{\tt format.name\$} して +得られるfirst nameには姓が,last nameには名が得られることに注意が必要で +ある({\tt format.name\$} を完全には日本語対応にしていないためである.しかし +family name, last tokenと読み替えれば問題ないし{\tt :-)}.日本語対応の +スタイルファイルを作成した経験から言うと,漢字コード著者名と +それ以外の場合に同じフォーマットを指定して{\tt format.name\$} を呼び出す +ことはほとんどないので,混乱するかもしれないが,あえてこのままにしてある). +また,例では漢字コード著者名の区切りとして,`` and '' を使ってあるが,ここは +もちろん,``,'' (但し全角!)でよい.}. + +{\baselineskip=11pt +\begin{quote} +\begin{verbatim} + @ARTICLE{la, + author="Masao Iri and Kazuo Murota and Shouichi Matsui", + title="Linear-time approximation algorithms for finding the + minimum-weight perfect matching on a plane", + journal=ipl,volume=12,pages="206--209",year=1981 + } +\end{verbatim} +\newpage +\begin{verbatim} + @ARTICLE{あふれ無し, + author="松井 正一 and 伊理 正夫", + title="あふれのない浮動小数点表示方式", + journal="情報処理学会論文誌", volume=21, number=4, pages="306--313", + yomi="Shouichi Matsui and Masao Iri", + year=1980 + } +\end{verbatim} +\end{quote} +} + +このようにデータベースを作成しておくと{\tt jplain}ならば + +\vskip 1.5mm +\hskip1cm +[1] Masao Iri, Kazuo Murota, and Shouichi Matsui. +Linear-time approximation $\cdots$ + +\hskip1cm +[2] 松井正一, 伊理正夫. あふれのない浮動小数点表示方式. $\cdots$ +\vskip 1.5mm + +\noindent のような形で参考文献リストが得られる.{\tt jalpha}なら + +\vskip 1.5mm +\hskip1cm +[IMM81] Masao Iri, Kazuo Murota, and Shouichi Matsui. Linear-time approximation + $\cdots$ + +\hskip1cm +[MI80]~~~ 松井正一, 伊理正夫. あふれのない浮動小数点表示方式. $\cdots$ +\vskip 1.5mm + +\noindent となる.{\tt jabbrv}なら + +\vskip 1.5mm +\hskip1cm +[1] M. Iri, K. Murota, and S. Matsui. Linear-time approximation + $\cdots$ + +\hskip1cm +[2] 松井, 伊理. あふれのない浮動小数点表示方式. $\cdots$ +\vskip 1.5mm + +\noindent となる.著者が漢字コードなのに`{\tt yomi}'がない場合には,例えば, + +\vskip 1.5mm +\hskip1cm +[松井80] 松井正一, 伊理正夫. あふれのない浮動小数点表示方式. $\cdots$ +\vskip 1.5mm + +\noindent となるようにしてある(著者が複数でも先頭の著者のみからラベルを +作るようにしてある).ただし,ソートキーには漢字コード(EUCコード)が +使われるから,順番はおかしなものとなる. + + +\section{おわりに} + +本稿では日本語化した\BibTeX である\JBibTeX について述べた. +バージョン0.20まではとりあえず動くという形で作成してあったが, +バージョン0.30では十分実用に耐えるレベルに達したと考えている. +日本語用のスタイルについても同様である. +現在までのところ利用者がさほど多くないため,使用経験が乏しい. +今後は使用経験に基づき,日本語のために必要な組み込み関数の +変更・追加などの改良を加えていきたい.また各種の学会用のスタイルの +作成も必要であると考えている. +またOren Patashnik氏からの私信によれば,今年中(1991)にversion 1.0をリリースする +予定らしいので,それの日本語化も必要であろう. + +\bibliography{jbibtex} +\bibliographystyle{jplain} +\end{document} diff --git a/biblio/pbibtex/pbibtex-manual/jbtxdoc.pdf b/biblio/pbibtex/pbibtex-manual/jbtxdoc.pdf new file mode 100644 index 0000000000..a93b140c09 Binary files /dev/null and b/biblio/pbibtex/pbibtex-manual/jbtxdoc.pdf differ diff --git a/biblio/pbibtex/pbibtex-manual/jbtxdoc.tex b/biblio/pbibtex/pbibtex-manual/jbtxdoc.tex new file mode 100644 index 0000000000..458ef617fd --- /dev/null +++ b/biblio/pbibtex/pbibtex-manual/jbtxdoc.tex @@ -0,0 +1,1090 @@ +\documentstyle{jarticle} +\def\dg{\gt} +\def\dm{\mn} +\voffset=-2.3cm +\hoffset=-2.3cm +\textwidth=16.6cm +\textheight=25cm + +\def\JTeX{\leavevmode\lower .5ex\hbox{J}\kern-.17em\TeX} +\def\JLaTeX{\leavevmode\lower.5ex\hbox{J}\kern-.17em\LaTeX} +\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} + +\def\JBibTeX{\leavevmode\lower .5ex\hbox{{\rm J}}\kern-0.15em\BibTeX} +\def\trnote#1{\footnote{\parindent=16pt\hskip-15pt\hang\indent 訳注:#1\parindent=10pt}} + +\title{B\kern-.05em{\large I}\kern-.025em{\large B}\kern-.08em\TeX ing: +B\kern-.05em{\large I}\kern-.025em{\large B}\kern-.08em\TeX の使い方 +\footnote{翻訳の部分は原著者の許可を得て配布するものであり,翻訳について, +\JBibTeX\ に関する記述については松井に問い合わせられたい.} +\ $^,$\footnote{\JBibTeX\ (version 0.30)の説明も含む.}} +\author{Oren Patashnik(訳:松井正一)} +\date{January 31, 1988(翻訳版:1991年1月1日)} + +\begin{document} +\baselineskip=17pt + +\maketitle + +\section{概要} + +[この文書は\BibTeX\ version 1.00が完成した時に拡充される. +タイプミス,欠落,不正確な部分,特に,分かりにくい部分について, +著者まで連絡されたい({\tt patashnik@SCORE.STANFORD.EDU}, 日本語および +\JBibTeX\ に関する部分は{\tt matsui@denken.or.jp}). +改善に関する意見を歓迎する.] + +これは\BibTeX\ version 0.99a\trnote{version 0.99a以降の +意味であり,\JBibTeX の基になっている0.99cも含まれる.} +の利用者のためのものであり\trnote{\JBibTeX 利用者のためでもある. +\JBibTeX については\cite{jbibtex}も参照されたい.}, +参考文献スタイルの設計者(製作者)はこの文書を読んだ後,製作者のためだけに +書かれている ``Designing \BibTeX\ Styles''~\cite{btxhak}を読む必要がある. + +本稿は以下の3節からなる. +第\ref{相違点} 節で \BibTeX のversion 0.98iと0.99aの相違点を, +各々に対応する標準スタイルファイルの相違点とともに述べる. +第\ref{latex-appendix} 節は\LaTeX\ book~\cite{latex}の付録B.2の修正であり, +第\ref{odds-and-ends} 節で他の文書には書かれていない一般的事項,特殊事項に +ついて述べる. +本稿の読者は\LaTeX\ bookの関連する節に精通していることが望まれる. + +この文書は\BibTeX\ を走らせる作業を助けるための入力例としての役割も持つ. +多くの文書と同じくこの文書も参考文献の引用を含んでいる.参考文献リストを +作るためには, +この文書自身を処理するためには, +先ず({\tt aux}ファイルを作るために)\LaTeX\ を実行し, +次に({\tt bbl}ファイルを作るために)\BibTeX\ を実行し, +最後に\LaTeX をもう2回実行する(1回は{\tt bbl}ファイル中の情報を +取り込むためであり,もう1回は前方参照を解決するためである). +めったに起こらないことではあるが,さらにもう1回 +\BibTeX/\LaTeX\ を走らせなければならないこともある. + +\BibTeX\ version 0.99aは,closed参考文献書式を標準としている. +\LaTeX\ version 2.09とともに使う必要がある\trnote{\JBibTeX\ は +\JLaTeX\ とともに使う.}. +open参考文献書式にするためにはオプション文書スタイルの{\tt openbib} +を使う必要がある. +(open書式では主ブロックの間で改行が行われるが,closedでは行われない.) + +{\dg 注意}:\BibTeX\ 0.99aでは古いスタイルファイルは使えない,同様に +\BibTeX\ 0.98iでは新しいスタイルファイルは使えない. +(しかし新しい\BibTeX\ で古いデータベースファイルを使うことはできる.) + +{\dg インプリメンタへの注意}:\BibTeX\ には +参考文献スタイルファイルの入力ディレクトリのための{\tt TEXINPUTS:}と, +データベースファイルの入力ディレクトリのための{\tt BIBINPUTS:} +の2つの論理名\trnote{UNIX/MS-DOSではそれぞれ{\tt TEXINPUTS}と +{\tt BIBINPUTS}の環境変数}が用意されている. + +\vskip\baselineskip +{\dg\bf\JBibTeX\ での注意点}: +漢字コード系は{\tt BIBTERMCODE, BIBFILECODE}の2つの +環境変数で変更可能であり,\JTeX\ の \verb|\kanjiterminaltype, \kanjifiletype|に +指定するのと同じものを指定する.UNIX版ではサイト毎に標準コードが設定されて +いるはずであり,MS-DOS版ではSJISが標準である. + +\newpage +\section{変更点} +\label{相違点} +本節では\BibTeX\ versions 0.98iと0.99aの違いと,各々のバージョンに対応する +スタイルの違いについて述べる.0.98iと0.99aの間には +多くの相違点があるが0.99と1.00の間ではもっとずっと少なくなるであろう. + +\subsection{\BibTeX\ の新機能} +\label{features} + +以下に\BibTeX\ の新機能とその使い方を列挙する\trnote{\JBibTeX\ の機能でも +ある.}. + +\begin{enumerate} + +\item +個々の文献毎に \verb|\cite|, \verb|\nocite|を明示的に指定 +しなくても, `\verb|\nocite{*}|' コマンドひとつで, +データベース中のすべての文献を並べたリストを作ることができる. +これは,このコマンドを +使った場所で,データベース中のすべてのエントリをその +順番で \verb|\nocite|することに相当する. + +\item +\label{concat} +フィールド(あるいは{\tt @STRING}の定義中で)文字列の連結を指定できる. +例えば,次のように定義しておくと, +\begin{verbatim} + @STRING( WGA = " World Gnus Almanac" ) +\end{verbatim} +別々ではあるが似たような{\tt title}エントリを簡単に作れる. +\begin{verbatim} + @BOOK(almanac-66, + title = 1966 # WGA, + . . . + @BOOK(almanac-67, + title = 1967 # WGA, +\end{verbatim} +次のような使い方も可能である. +\begin{verbatim} + month = "1~" # jan, +\end{verbatim} +この時,スタイルファイル中での{\tt jan}の省略形の定義によって異なるが, +{\tt bbl}ファイル中では `\verb|1~Jan.|' あるいは +`\verb|1~January|' のようになる. +(フィールドのデータ長には上限があるが) `{\tt\#}' によって +任意の数の文字列を連結できる. +`{\tt\#}' の前後には,スペース\trnote{漢字コードの +スペース(空白)ではダメ!}か改行を置くことを忘れてはならない. + +\item +\BibTeX\ に新たな相互参照機能を付け加えた.これを例にそって説明する. +文書中に \verb|\cite{no-gnats}|と指定し, +データベース中に次の2つのエントリがあるとしよう. +\begin{verbatim} + @INPROCEEDINGS(no-gnats, + crossref = "gg-proceedings", + author = "Rocky Gneisser", + title = "No Gnats Are Taken for Granite", + pages = "133-139") + . . . + @PROCEEDINGS(gg-proceedings, + editor = "Gerald Ford and Jimmy Carter", + title = "The Gnats and Gnus 1988 Proceedings", + booktitle = "The Gnats and Gnus 1988 Proceedings") +\end{verbatim} +この時,次に述べる2つのことがおこる. +第1に,特別な意味を持つフィールド{\tt crossref}は,{\tt no-gnats} +エントリで欠落しているフィールドを, +引用している{\tt gg-proceedings}から継承することを\BibTeX に +伝える.先の例でいえば{\tt editor}と{\tt booktitle}の2つを +継承する. +ただし,標準のスタイルでは{\tt booktitle}フィールドは +{\tt PROCEEDINGS}型のエントリでは意味を持たない. +この例の{\tt gg-proceedings}エントリの{\tt booktitle}フィールドは, +これを参照している +ものがこのフィールドを継承できるようにするためだけのものである. +この会議の論文がどんなに多くデータベース中にあっても, +この{\tt booktitle}フィールドは1回だけ書けばよい. + +第2に, {\tt gg-proceedings}エントリを \verb|\cite|あるい +は \verb|\nocite|で引用している +2つ以上の論文が参照していると, このエントリ +自身が \verb|\cite|あるいは \verb|\nocite|されていなくても, +\BibTeX は自動的に{\tt gg-proceedings}エントリを参考文献リストに +加える.つまり{\tt no-gnats}の他に1つ以上の論文が\linebreak {\tt gg-proceedings}を +参照していると,自動的に参考文献リストに加えられる. + +ただし,上記の結果となることを保証するためには, +相互参照されているエントリは, +それを引用しているすべてのエントリよりデータベースファイル中で +後ろになければならない. +従って,相互参照されているエントリは最後に置くことになる. +(さらに,残念なことだが,ネストされた相互参照 +はうまく扱えない.すなわち,相互参照している先がさらに他を参照している +場合にはうまく動作しないことがある.) + + +最後の注意: +この相互参照機能は,現在でも利用できる,古い\BibTeX の +参照の機能とは全く関係がない. +すなわち,次のような使い方は新しい機能から何の影響も受けない. +\begin{verbatim} + note = "Jones \cite{jones-proof} improves the result" +\end{verbatim} + + +\item +\BibTeX\ はアクセント付き文字(accented character)を扱えるようになった. +例えば次のような2つのフィールドからなるエントリがあり, +\begin{verbatim} + author = "Kurt G{\"o}del", + year = 1931, +\end{verbatim} +参考文献スタイルとして{\tt alpha}を使ったとすると, +\BibTeX\ はこのエントリのラベルをあなたの望み通りに [G{\"o}d31] とする. +このような結果を得るためには\verb|{\"o}|あるいは\verb|{\"{o}}|のように +アクセント付き文字列を中括弧(ブレース; \verb|{}|)で囲んでやる必要がある. +さらに,このために使う中括弧は,フィールドやエントリの区切り以外の中括弧の +中に含まれてはならないし,中括弧の中の一番最初の文字はバックスラッシュ +でなければならない.従ってこの例でいえば\verb|{G{\"{o}}del}| +でも\verb|{G\"{o}del}|でもうまくゆかない. + +この機能は\LaTeX~bookの表3.1と表3.2にある,バックスラッシュの付かない +外国文字(foreign symbols)を除く,すべてのアクセント付き文字を扱うことができる. +この機能は利用者が定義する「アクセント付き文字」でも使える.すぐ後で例を示す. +ラベルの文字数を数える場合には,\BibTeX\ は中括弧の中の +文字列をまとめて1文字と数える. + + +\item +\BibTeX\ はハイフン付きの人名も扱うことができる.例えば,次のような +エントリ, +\begin{verbatim} + author = "Jean-Paul Sartre", +\end{verbatim} +で{\tt abbrv}スタイルを使うと,結果は `J.-P. Sartre' となる. + +\item +\label{preamble} +データベースファイル中に\verb|@PREAMBLE|を書くことができる. +コマンドは,文字列からなり,名前と等号記号がないことを +除けば\verb|@STRING|と同じである.以下に例を示す. +\begin{verbatim} + @PREAMBLE{ "\newcommand{\noopsort}[1]{} " + # "\newcommand{\singleletter}[1]{#1} " } +\end{verbatim} +(ここでも文字列連結の機能が使われていることに注意しよう). +標準のスタイルでは,ここに書いた文字列(多くの場合\LaTeX\ のマクロ) +をそのまま{\tt bbl}ファイルに書き出す. +上に示した \verb|\noopsort|コマンドを例に,使い方を示す. + +ソーティングする(アルファベット順に並べる)ことを考えよう. +\BibTeX\ は割とうまく並べてくれるが,条件によっては\BibTeX\ が +混乱することがある. +データベースの中に同一著者による2巻からなる本のエントリがあり, +参考文献リストでは第1巻が第2巻の直前に並んで欲しいとしよう. +さらに第1巻には1973年に発刊された第2版があり,第2巻には第1版しかなく +その発刊は1971年であったとしよう. +標準スタイル{\tt plain}は著者名と発刊年でソートキーを作り, +第2巻の方が発刊が早いために,\BibTeX\ を助けてやらない限り,第2巻 +の方が先にならんでしまう. +このためにはこの2つの{\tt year}フィールドを次のようにする. +\begin{verbatim} + year = "{\noopsort{a}}1973" + . . . + year = "{\noopsort{b}}1971" +\end{verbatim} +\verb|\noopsort|の定義から, +\LaTeX\ は年としては本当の年以外は印刷しない. +しかし\BibTeX\ は \verb|\noopsort|の指定が `a', `b' を +修飾するものとみなすので,ソートの時にはあたかも `a1973' と `b1971' +が年のように扱う.`a' は `b' より前なので,望み通り第1巻が第2巻の前に並ぶ. +ところで,もしこの著者の別の著作がデータベース中にある場合には +他の著作との関係を正しくするために\verb|{\noopsort{1968a}}1973|と +\verb|{\noopsort{1968b}}1971|といったように書かねばならないこともある. +(ここでは第1巻の第1版の発刊年が1968年であることから,これで正しい +場所に並ぶものと考えている.) + +使える\verb|@PREAMBLE|コマンドの数には上限があるが,\verb|@PREAMBLE| +の数を1つのデータベースにつき1つにしておけば,上限を超えることはない. +したがって,項目\ref{concat} で述べた,文字列の連結機能を使えば +この制限は大した問題ではない. + +\item +\BibTeX\ のソーティング算法は安定(stable)なものとなった.つまり, +2つの異なるエントリが同一のソートキーを持つ場合には, +引用順に並ぶようになった. +(参考文献スタイルがこれらのソートキー,通常は著者名の後に年と +表題を付加したもの,を作る\trnote{日本語用のスタイルでは, +yomiというフィールドがあればそれを著者名の代わりに使うことで,読みの +アルファベット順に並ぶようにしている.}) + +\item +\BibTeX\ はファイル名の小文字/大文字変換を行わないようになった. +これにより,例えばUNIXシステム上に\BibTeX\ をインストールするのが簡単になった. + +\item +コマンドラインの{\tt aux}ファイル名の処理を行うコードを付加することが +簡単に行えるようになった. + +\end{enumerate} + + +\subsection{標準スタイルの変更点} + +本節では,一般利用者に関係する標準スタイル +({\tt plain}, {\tt unsrt}, {\tt alpha}, {\tt abbrv}) +の変更点について述べる\trnote{対応する日本語用のスタイルは +各々{\tt jplain}, {\tt junsrt},{\tt jalpha}, {\tt jabbrv}である.}. +スタイル作成者に関係した変更点は +``Designing \BibTeX\ Styles''~\cite{btxhak}に述べられている. + +\begin{enumerate} + +\item +一般にソーティングは先ず ``author'' で,次に年,最後に表題で行う. +古いバージョンでは年が使われていなかった. +(しかし{\tt alpha}スタイルでは先ずラベル +でソートした後,上記のソートを行う). +authorの前後に引用符が付いているのは,editor, organizationなどの +他のフィールドが使われることもあるからである. + +\item +多くの不必要なタイ(\verb|~|)を取り除いた. +これにより,参考文献リストをフォーマットした時に, +\LaTeX\ から出力される `\hbox{\tt Underfull} \verb|\hbox|' +の数が少なくなった. + +\item +イタリック指定(\hbox{\verb|{\it ...}|})を +強調指定(\hbox{\verb|{\em ...}|})に置き換えた. +出力は変化しないはずである. + +\item +{\tt alpha}スタイルでは,ラベルを作る際に著者名のいくつかを省略した +ことを示す記号を `*' から `$^{+}$' に変更した. +しかし,以前の形式の方が好き,あるいはこんな記号が不要な場合でも +スタイルファイルの修正は不要である. +{\tt alpha}スタイルが(\verb|\thebibliography| environmentの直前に) +{\tt bbl}ファイルに書き出す \verb|\etalchar| +コマンドを,前節の第\ref{preamble} 項目で述べたように, +データベース中の{\tt @PREAMBLE}を使って, +\LaTeX\ の \verb|\renewcommand|を用いて定義し直せば,`$^{+}$' +の形式を変更できる. + +\item +{\tt abbrv}スタイルでは,月名として`March'と`Sep.' +の替わりに`Mar.'と`Sept.'を使うようになった. + +\item +標準スタイルでは, +\BibTeX\ の新しい相互参照機能を使っている場合には, +他の文献を参照しているエントリに対しては, +参照先に記述されているフィールドのほとんど全てを +省略し, \verb|\cite|を使って参照を示すようになっている. + +これは参照元が大部な著作の一部分である場合に使う. +このような状況としては以下の5つが考えられる. +(1) {\tt INPROCEEDINGS} +(あるいは{\tt CONFERENCE}, どちらも同じこと) +が{\tt PROCEEDINGS}を参照している; +(2) {\tt BOOK}, (3) {\tt INBOOK}, +あるいは(4) {\tt INCOLLECTION} +が{\tt BOOK}を参照している +(複数巻からなる書物の中のある1巻が参照している); +(5) {\tt ARTICLE}が{\tt ARTICLE}を参照している. +(この場合には,参照されているものは実は論文誌全体であるが, +エントリ型として{\tt JOURNAL}がないからこうする. +この時には論文誌の{\tt author}と{\tt title}がないという +警告メッセージが出力されるが,このメッセージは無視すればよい). + +\item +{\tt MASTERSTHESIS}と{\tt PHDTHESIS} +エントリ型では,任意フィールドとして{\tt type}を書けるようになった. +これにより, +\begin{verbatim} + type = "{Ph.D.} dissertation" +\end{verbatim} +とデータベース中に書くことで,標準の `PhD thesis' の替わりに +`Ph.D.\ dissertation' とできるようになった. + +\item +同様に{\tt INBOOK}と{\tt INCOLLECTION} +エントリ型では,任意フィールドとして{\tt type}を書けるようになった. +これを使えば,次のようにデータベースに書いておけば, +標準の `chapter~1.2' の替わりに,`section~1.2' とできる. +\begin{verbatim} + chapter = "1.2", + type = "Section" +\end{verbatim} + +\item +{\tt BOOKLET}, {\tt MASTERSTHESIS}, +{\tt TECHREPORT}エントリ型では, +{\tt BOOK}の{\tt title}のようにではなく, +{\tt ARTICLE}の{\tt title}のように, +表題をフォーマット(タイプセット)するようになった. + +\item +{\tt PROCEEDINGS}と{\tt INPROCEEDINGS} +エントリ型では,{\tt address}フィールドを出版社,主催者の住所を +示すために使うのではなく,会議の開催された場所を示すために使うように +なった. +出版社,開催者の住所を入れたいのであれば, +{\tt publisher}か{\tt organization}フィールドに入れること. + +\item +{\tt BOOK}, {\tt INBOOK}, {\tt INCOLLECTION}, +{\tt PROCEEDINGS}エントリ型では,{\tt volume}だけを +許すのではなく, +{\tt volume}か{\tt number}のいずれか一方を許すようになった. + +\item +{\tt INCOLLECTION}エントリ型では,{\tt series}と{\tt edition} +フィールドを許すようになった. + +\item +{\tt INPROCEEDINGS}と{\tt PROCEEDINGS} +エントリ型では, +{\tt volume}または{\tt number}と +{\tt series}を許すようになった. + +\item +{\tt UNPUBLISHED} エントリ型では,日付情報を後に付けて, +{\tt note}フィールドを1つのブロックとして出力するようになった. + +\item +{\tt MANUAL}エントリ型では,{\tt author}フィールドが +空であれば,{\tt organization}フィールドを第1ブロックとして +出力するようになった. + +\item +{\tt MISC}エントリ型では,全ての任意フィールド +(すなわち全てのフィールド)が空の時には +警告メッセージを出力するようになった. + +\end{enumerate} + +\subsection{\JBibTeX\ の標準スタイル} + +\JBibTeX\ の標準スタイルとしては{\tt plain, alpha, abbrv, unsrt}に対応して +{\tt jplain, jalpha, jabbrv,\linebreak junsrt}が作成されている.また情報処理学会 +論文誌{\tt tipsj}, 情報処理学会欧文論文誌{\tt jipsj}, 電子情報通信学会論文誌{\tt tieice}, +日本オペレーションズリサーチ学会論文誌{\tt jorsj}, +人工知能学会{\tt jsai}, ソフトウェア学会誌{\tt jssst}用のスタイルも作成されて +いる.これらのスタイルで行なっている日本語対応は以下の通りである({\tt jipsj} +は英語なので,変更は必ずしも日本語対応のためだけではない). + +\begin{enumerate} +\item 著者名が日本語かどうかで名前のフォーマットの方法を変える. + +\item 著作名に日本語が含まれる場合には強調指定を付けない. + +\item ページ範囲指定を{\tt Page}, {\tt Pages}から{\tt p.}, {\tt pp.}に +変更した.ナンバー指定,ボリューム指定を{\tt No.}, {\tt Vol.}に変更した. + +\item ソーティングキーを作る時には,{\tt yomi}フィールドがあればその情報を +著者名,編集者名の代りに使う. +\end{enumerate} + +\section{データベースのエントリ} +\label{latex-appendix} + +本節は\LaTeX\ book~\cite{latex}, +\copyright~1986, by Addison-Wesley の付録B.2の単なる修正版である. +基本構成は同じであり,細目が少し変更されている. + +\subsection{エントリの型} + +参考文献をデータベースに登録する場合に一番最初に決めなければ +ならないことは,その型(種類)である.完全な決まったやり方はないが, +\BibTeX\ ほとんどすべての文献を合理的に扱うためのエントリの型を +用意している. + +文献の出版形態が異なればそれが持っている情報も異なる. +論文誌に発表されたものには論文誌の巻数(volume)と番号(number)があるが, +本の場合にはこれらは通常意味がない. +従って異なったエントリ型毎に異なったフィールドがある. +エントリの型毎にフィールドは以下の3つに分類される. +\begin{description} + +\item[必須] +これが欠落していると警告メッセージが出力され,まれにではあるが +文献リストが変な形に出力される. +もし必須な情報が意味を持たないのであれば,間違った型を指定しているのである. +必須な情報が意味を持つのであるが,他のフィールドにそれが記述されている +場合には警告メッセージを無視すればよい. + +\item[任意] +このフィールドは,もしあれば使われるが,何の問題もなしに省略できる. +もしこれらのフィールドの情報が読者を助けるのであれば, +これを省略しない方がよい. + +\item[無視される] +このフィールドは無視される. +\BibTeX\ は必須あるいは任意のフィールド以外は無視するから,{\tt bib}ファイル +には好きなフィールドを書いてよい. +参考文献リストには出力されないかもしれないが, +文献に関連するすべての情報を{\tt bib}ファイルに書いておくとよい. +例えば,論文のアブストラクトをコンピュータのファイルにとっておくのであれば, +{\tt bib}ファイル中の{\tt abstract}フィールドに入れておけばよい. +{\tt bib}ファイルはアブストラクトを入れて置くにちょうどよい場所であり, +アブストラクト付きの文献リストを作成するスタイルを作ることもできる. + +{\dg 注意}:フィールド名をミススペルするとそのフィールドは無視される. +特に任意フィールドの場合には\BibTeX\ は警告メッセージを出さないから, +タイプミスに注意しなければならない. + +\end{description} + +以下で各々のエントリの型について説明を行う. +同時に,文献リストの項目として並べられる順番に +(エントリ型によっては特定のフィールドのあるなしで若干順番が異なることもあるが) +必須フィールド,任意フィールドを示す. +これらエントリの型は,{\em Scribe}システムのためにBrian Reidが +採用したvan~Leunen~\cite{van-leunen}の分類と同じものである. +個々のフィールドの意味については次節で説明する. +標準以外のスタイルでは任意フィールドのいくつかを無視することがある. +{\tt bib}ファイル中ではエントリの型の前に{\tt @}文字を +付けるのを忘れてはならない. + + +\begin{description} +\sloppy + +\item[article\hfill] 論文誌中の論文,雑誌の記事. +必須フィールド:{\tt author}, {\tt title}, {\tt journal}, +{\tt year}. +任意フィールド:{\tt volume}, {\tt number}, +{\tt pages}, {\tt month}, {\tt note}. + +\item[book\hfill] 出版主体が明確な本. +必須フィールド:{\tt author}または{\tt editor}, +{\tt title}, {\tt publisher}, {\tt year}. +任意フィールド:{\tt volume}または{\tt number}, {\tt series}, +{\tt address}, {\tt edition}, {\tt month}, +{\tt note}. + +\item[booklet\hfill] 印刷,製本されているが,出版者あるいはスポンサー +の名前がないもの. +必須フィールド:{\tt title}. +任意フィールド:{\tt author}, {\tt howpublished}, +{\tt address}, {\tt month}, {\tt year}, {\tt note}. + +\item[conference\hfill] {\tt INPROCEEDINGS}と同じ. +{\em Scribe\/}との互換性のため. + +\item[inbook\hfill] 章(あるいは節などの)本の一部分かつ/または(and/or) +本のあるページ範囲. +必須フィールド:{\tt author}あるいは{\tt editor}, {\tt title}, +{\tt chapter}かつ/または{\tt pages}, {\tt publisher}, +{\tt year}. +任意フィールド:{\tt volume}または{\tt number}, {\tt series}, +{\tt type}, {\tt address}, +{\tt edition}, {\tt month}, {\tt note}. + +\item[incollection\hfill] それ自身の表題を持つ本の一部. +必須フィールド:{\tt author}, {\tt title}, {\tt booktitle}, +{\tt publisher}, {\tt year}. +任意フィールド:{\tt editor}, {\tt volume}または{\tt number}, +{\tt series}, {\tt type}, {\tt chapter}, {\tt pages}, +{\tt address}, {\tt edition}, {\tt month}, {\tt note}. + +\item[inproceedings\hfill] 会議録中の論文. +必須フィールド:{\tt author}, {\tt title}, {\tt booktitle}, +{\tt year}. +任意フィールド:{\tt editor}, {\tt volume}または{\tt number}, +{\tt series}, {\tt pages}, {\tt address}, {\tt month}, +{\tt organization}, {\tt publisher}, {\tt note}. + +\item[manual\hfill] マニュアル. +必須フィールド:{\tt title}. +任意フィールド:{\tt author}, {\tt organization}, +{\tt address}, {\tt edition}, {\tt month}, {\tt year}, +{\tt note}. + +\item[mastersthesis\hfill] 修士論文. +必須フィールド:{\tt author}, {\tt title}, {\tt school}, +{\tt year}. +任意フィールド:{\tt type}, {\tt address}, {\tt month}, +{\tt note}. + +\item[misc\hfill] 他のどれも当てはまらない時に使う. +必須フィールド:なし. +任意フィールド:{\tt author}, {\tt title}, {\tt howpublished}, +{\tt month}, {\tt year}, {\tt note}. + +\item[phdthesis\hfill] 博士論文. +必須フィールド:{\tt author}, {\tt title}, {\tt school}, +{\tt year}. +任意フィールド:{\tt type}, {\tt address}, {\tt month}, +{\tt note}. + +\item[proceedings\hfill] 会議録. +必須フィールド:{\tt title}, {\tt year}. +任意フィールド:{\tt editor}, {\tt volume}または{\tt number}, +{\tt series}, {\tt address}, {\tt month}, +{\tt organization}, {\tt publisher}, {\tt note}. + + +\item[techreport\hfill] 学校などで発行されているテクニカルレポートであり, +通常は通番を持つ. +必須フィールド:{\tt author}, +{\tt title}, {\tt institution}, {\tt year}. +任意フィールド:{\tt type}, {\tt number}, {\tt address}, +{\tt month}, {\tt note}. + +\item[unpublished\hfill] 正式には主版されていないが,著者,表題のある著作物. +必須フィールド:{\tt author}, {\tt title}, {\tt note}. +任意フィールド:{\tt month}, {\tt year}. + +\end{description} + +上に示したフィールドに加えて,各々のエントリ型では任意フィールドとして +{\tt key}があり,スタイルによっては並べ替え,相互参照, +あるいは \verb|\bibitem|を作るのに使われる. +また,「著者」情報が欠けているエントリに対しては必ず{\tt key}フィールド +を入れておかないといけない. +「著者」は通常は{\tt author}フィールドに書くが, +エントリの型によっては,{\tt editor}フィールド +であったり,あるいは{\tt organization}フィールドであったりもする +(第\ref{odds-and-ends} 節でもっと詳しく説明する). +{\tt key}フィールドを \verb|\cite|に現れるデータベースのエントリの 最初に書くキーと混同してはならない.この項目が ``key'' という名前 +なのは{\it Scribe}との互換性のためである. + +\vskip\baselineskip +{\dg\bf \JBibTeX\ での注意}:\JBibTeX\ の標準スタイルでは +以下に示されているフィールドの他に,任意フィールドとして, +漢字コード表記された著者名の「読み」を書くためのフィールドとして +{\tt yomi}がある. + +\subsection{フィールド} + +標準スタイルで認識されるフィールドを以下に示す. +標準スタイルでは無視されるが,この他の任意のフィールドを +書いてもよい\trnote{\JBibTeX\ の標準スタイル用に{\tt yomi}フィールドが +追加されている.} + +\begin{description} + +\item[address\hfill] +通常は{\tt publisher}などの住所を書く. +van~Leunenは,大きな出版社に対してはこれを省略することを勧めている. +他方,小さな出版社に対しては,読者の便を考えて,完全な住所を書くとよい. + +\item[annote\hfill] +注釈. +標準のスタイルでは使われないが,他の注釈つきの参考文献スタイルで使われる. + +\item[author\hfill] +著者名であり,\LaTeX\ bookに説明されているように書く\trnote{\JBibTeX\ では, +漢字コード著者名の姓と名の間にはスペース(半角でも全角でも)を置くことが +望ましい(スペースがないと{\tt jabbrv}スタイルなど省略形が基本のスタイルの +時に姓だけにならない).}. + +\item[booktitle\hfill] +一部分を引用する本の表題. +記述の方法については\LaTeX\ bookを参照のこと. +エントリ型が本({\tt book})の場合には{\tt title}を使う. + +\item[chapter\hfill] +章(あるいは節などの)番号. + +\item[crossref\hfill] +参照する文献のデータベースキー. + +\item[edition\hfill] +本の版---例えば ``Second''. +(日本語以外では)順序数で書くこと,また最初の文字は上記の例のように +大文字のこと.必要であれば標準スタイルが自動的に小文字に変換する. + +\item[editor\hfill] +編集者の名前を\LaTeX\ bookの説明のように書く. +{\tt author}フィールドもある場合には,ここには論文が載っている +本あるいは論文集の編集者名を書く\trnote{\JBibTeX\ では, +編集者名の姓と名の間にはスペースを置くことが望ましい(スペースが +ないと{\tt jabbrv}スタイルの時に姓だけにならない).}. + +\item[howpublished\hfill] +この奇妙な著作がどのようにして出版されたか. +最初の文字は大文字でなければならない. + +\item[institution\hfill] +テクニカルレポートのスポンサー名. + +\item[journal\hfill] +論文誌の名前. +多くの論文誌の省略形が用意されている. +{\it Local Guide}を参照のこと. + +\item[key\hfill] +著者に関する情報(第\ref{odds-and-ends} 節参照)がない時に +ソーティング,相互参照,ラベル作成の処理に使われる. +このフィールドを,データベースエントリの +最初の項目である \verb|\cite|で使うキーと混同してはならない. + +\item[month\hfill] +著作物が出版された月.未出版であれば書かれた月. +\LaTeX\ bookの付録B.1.3に示されている3文字の省略形を使うこと\trnote{ +念のために列挙すると{\tt jan, feb, mar, apr, may, jun, +jul, aug, sep, oct, nov, dec}}. + +\item[note\hfill] +読者を助ける付加的な情報を記述する. +最初の文字は大文字でなければならない. + +\item[number\hfill] +論文誌,雑誌,テクニカルレポートあるいは一連の著作の番号. +通常,論文誌,雑誌の特定の号は巻数と番号で識別され,テクニカルレポート +を発行している機関はレポートに番号を振っている.またシリーズの +本にも番号がある. + +\item[organization\hfill] +会議のスポンサーあるいはマニュアル{\tt manual}を出版した機関の名称. + +\item[pages\hfill] +{\tt 42--111}, {\tt 7,41,73--97}, {\tt 43+}などの(いくつかの)ページあるいは +ページ範囲(最後の例は後続ページが単純な範囲でないことを示す). +{\em Scribe}互換のデータベースの維持を簡単にするため,標準のスタイルでは +{\tt 7-33}のようなダッシュ1つの形式を\TeX\ での数値範囲の指定形式である +{\tt 7--33}のようなダッシュ2つに自動的に変換する. + +\item[publisher\hfill] +出版主体の名称. + +\item[school\hfill] +修士論文,博士論文が書かれた(提出された)大学名. + +\item[series\hfill] +一連の書物のシリーズ名,セット名. +本全体を引用する場合には,{\tt title}フィールドにその本の +表題を書き,任意フィールドである{\tt series}にシリーズ名 +あるいは複数巻の書物の題名を書く. + +\item[title\hfill] +著作の表題.\LaTeX\ bookの説明のようにタイプセットされる. + +\item[type\hfill] +テクニカルレポートの種類---例えば ``Research Note''. + +\item[volume\hfill] +論文誌あるいは複数巻の書物の巻数. + +\item[year\hfill] +著作物が出版された年.未出版であれば書かれた年. +標準スタイルは,`{(about 1984)}' のような,どんな形でも{\tt year}フィールド +に許すが,区切り文字以外の最後の4文字は, +通常は{\tt 1984}のような4つの数字から構成されていなくてはならない. + +\item[yomi\hfill]{\dg\bf\JBibTeX\ のみで意味を持つ}. +著者(編集者)名が日本語文字の時にソート,ラベル作成がうまくいくように +漢字コード氏名の代りに使うフィールドであり,ローマ字表記した姓名を著者名などと +同じ書き方で記述する(ひらがなで書いて五十音順にソートしたりもできる). +例を示す. +\begin{verbatim} + author="松井 正一 and 高橋 誠", + yomi="Shouichi Matsui and Makoto Takahasi" +\end{verbatim} +\end{description} +\newpage + +\section{ヒント} +\label{odds-and-ends} + +本節では,他では詳しく説明されていない事項を解説する. +簡単なものから順に説明する. +その前に先ず口上を述べたい. + +参考文献のタイプセットスタイルの選択の余地は少ない.論文誌$X$は$Y$の +スタイルを指定するし,また別の論文誌は別のものを指定する. +しかし,選択の余地があるのであれば,{\tt plain}標準スタイルを使うことを +勧める. +このスタイルは,他のものより具体的で生き生きした,より良い著作と +なるとvan~Leunen~\cite{van-leunen}は主張している. + +他方で, +{\em The Chicago Manual of Style\/}~\cite{chicago}, +は引用が本文中に `(Jones, 1986)' のように +現れる「著者-年月日形式(author-date)」を推奨している. +しかし,私はこのような方式は関連する/しない情報が散乱するだけでなく, +本文が漠然とし,たいしたことではないかも知れないが受動態や曖昧な文が多くなると +考える.さらにコンピュータタイプセットの出現により, +「これが最も実用的な方法である」といった議論は +まったく意味のないものとなったと考える. +例えば,{\em Chicago Manual\/}の401ページの中ごろに述べられている, +「{\tt plain}のようなスタイルの欠点は,タイプした後では, +引用文献の追加・削除のためには, +参考文献リストの修正だけでなく,本文中の番号の修正が必要なことである」 +といった主張はまったくの時代錯誤といえる. +\LaTeX\ を使えば欠点ではないことは明らかである. + +最後に, +「著者名-年月日形式」の論理的欠陥はそのためのプログラムを作成してみると +非常に明白になる.例えば,多数の参考文献リストを普通にアルファベット順 +に並べた時に,`(Aho et~al., 1983b)' が `(Aho et~al., 1983a)' の半ページ +も後に並ぶことがある. +これを修正するともっと悪くなることもある. +なんてこった. +(悲しいことに,私はそういったスタイルをプログラムしたことがある. +阿呆な出版者のせいで,あるいは私の主張に同調せずに,このような +スタイルを使いたいのであれば, +この方式のスタイルはRochester style collectionから入手可能である.) + +前口上が長くなってしまったが,私の気分は良くなり,血圧も正常に戻った. +以下に標準スタイルで\BibTeX\ を使う時のヒントを示す(標準以外のスタイルでも +多くの事柄があてはまる). + +\begin{enumerate} + +\item +\BibTeX\ のスタイル設計言語を使えば,参考文献のリスト作成以外にも, +一般的なデータベース操作のためのプログラムを作ることができる. +これを使ってデータベース中のすべての文献のデータベースキー/著者の +索引を生成するプログラムを作ることは,この言語に精通していれば簡単な +ことである. +どんなツールが用意されているかについては{\em Local Guide\/} +を参照されたい. + +\item +標準スタイルで使っている13個のエントリ型でほとんどの文献をうまく +フォーマットできるが,13個だけでなんでもうまくできるわけではない. +したがって,エントリ型の使い分けを工夫するとよい(しかし, +余りにいろんな型を試してみないとうまくいかないのは, +エントリの型が間違っていることが多い). + +\item +フィールド名は厳格に考えなくてよい. +例えば,出版者の住所を{\tt address}フィールドではなく, +名前とともに{\tt publisher}フィールドに入れることもできる. +あるいは,複雑な形式の文献には{\tt note}フィールドをうまく使うことで +対処できる. + +\item +警告メッセージは深刻に考える必要はない. +例えば{\em The 1966 World Gnus Almanac}のように,表題に年が +入っている文献では,{\tt year}フィールドは省略した方がよく, +\BibTeX\ の警告メッセージは無視してよい. + +\item +{\tt author}, {\tt editor}の名前が余りに多い時には名前リストを +``and others'' で終りにしておけば,標準スタイルでは +``et~al.'' に自動的に変換される\trnote{\JBibTeX では, +漢字コード著者なら ``ほか'' に変換される.}. + +\item +一般に,\BibTeX\ が大文字を小文字に自動的に変換するのを +止めさせたかったら,中括弧({\tt \{ \}})で囲めばよい. +しかし,左中括弧に続く最初の文字がバックスラッシュであると, +変換されることもある. +「特殊文字」のところで再び説明する. + +\item +{\em Scribe\/}との互換性のため,データベースファイル中に {\tt @COMMENT} +コマンドを書くことができる. +\BibTeX\ はデータベースファイル中ではエントリの内側 +以外ならどこにでもコメントを書くことを許すから, +実際にはこのコマンドは不要である. +あるエントリをコメントアウトするには,単にエントリの型の +前の{\tt @}文字を取り除けばよい. + +\item +標準スタイルファイル中には計算機科学関係の論文誌の +省略形がいくつか入れてあるが,これはあくまでも例である. +これと異なる論文誌の省略形は {\tt @STRING}コマンドを +使って,個人のデータベースで定義するのがよい. +そして\LaTeX\ の \verb|\bibliography|指定の最初の引数として, +この省略形の入ったデータベースを記述すればよい. + +\item +「月」に関しては,自分で月名を書かずに,3文字の省略形を使うのがよい. +そうすれば整合的な形式となる. +「日」の情報も含めたい場合には{\tt month}フィールドに書く.例えば, +\begin{verbatim} + month = jul # "~4," +\end{verbatim} +とすれば,望みの結果が得られる. + +\item +(参考文献が引用順に列挙される) {\tt unsrt}スタイルを \verb|\nocite{*}| +(データベースのすべての文献が列挙される)と +共に使う場合には,文書中の \verb|\nocite{*}|コマンドの位置で +引用文献の並ぶ順番が決まる. +第\ref{features} 節で示した規則によれば, +コマンドが文書の先頭にあれば,データベース中の順番そのものになり, +最後にあれば, \verb|\cite|あるいは \verb|\nocite|で明示的に引用した +文献が引用順に並び,その後にそれ以外のものがデータベース中の順番で +並ぶ. + +\item +学位を授与するのは大学であり学部ではないから, +学位論文に対しては,van Leunenは学位の後に学部名を書かないことを +推奨している. +学部名を書いた方が読者が論文を見つけやすいと考えるのであれば, +学部名は{\tt address}フィールドに書くとよい. + +\item +{\tt MASTERSTHESIS}と{\tt PHDTHESIS}のエントリ形は +{\em Scribe\/}との互換性のために付けた名称であり, +{\tt MINORTHESIS}と{\tt MAJORTHESIS}の方が良い名前かも知れない. +従ってアメリカ以外での学位論文ではこのことを念頭におくこと. + +\item +ある著者の2つの著作の著者名が若干異なる場合の対処の方法. +2つの論文が次のようであったとしよう. +\begin{verbatim} + author = "Donald E. Knuth" + . . . + author = "D. E. Knuth" +\end{verbatim} +2つのやり方が考えられる. +(1)このままにする,(2)これは同一人物であるであることがはっきりと +分かっているので,著者の好みの形式(例えば,`Donald~E.\ Knuth')に統一する. +最初の方法では文献の並ぶ順番が正しくなくなるかもしれないし, +2番目の方法では名前を少し変えたことで,誰かが電子的に検索した時に +へまをやるかもしれない. +私好みの第3の方法がある. +2番目の論文のフィールドを次のように変換する. +\begin{verbatim} + author = "D[onald] E. Knuth" +\end{verbatim} +\BibTeX\ はかぎ括弧がないとしてソートするし, +かぎ括弧によって読者は完全な「名」は元の論文にはなかったと考える +から,前述の問題が解決できる. +もちろん `D[onald]~E.\ Knuth' はみっともないという別の問題が生ずるが, +私はこの場合には正確さのためには美しさを犠牲にしてよいと考える. + +\item +\LaTeX\ のコメント文字 `{\tt\%}' はデータベースファイル中では +コメント文字ではない. + +\item +前節でふれた「著者」についてもっと詳しく説明しよう. +ほとんどすべてのエントリでは「著者」は単に{\tt author}フィールドの +情報である. +しかしながら, +{\tt BOOK}と{\tt INBOOK}エントリ型では, +{\tt author}に著者がなければ{\tt editor}フィールドが使われ, +{\tt MANUAL}では, +{\tt author}に著者がなければ{\tt organization}フィールドが使われ, +{\tt PROCEEDINGS}では, +{\tt editor}に著者なければ{\tt organization}フィールドが使われる. + +\item +ラベルの作成の時に,{\tt alpha}スタイルでは上述の「著者」を使うが, +{\tt MANUAL}と{\tt PROCEEDINGS}エントリ型では +{\tt key}フィールドが{\tt organization}フィールドより優先する. +これは次のような場合に役立つ. +\begin{verbatim} + organization = "The Association for Computing Machinery", + key = "ACM" +\end{verbatim} +{\tt key}フィールドがないと{\tt alpha}スタイルは{\tt organization}フィールド +の情報から3文字のラベルを作る. +{\tt alpha}スタイルは `{\tt The}' を取り除くが,それでも +ラベルは `\hbox{[Ass86]}' となってしまい,仕組み通りではあるが,有益な +ものではない. +上のように{\tt key}フィールドを入れることで,もっとよいラベル +`\hbox{[ACM86]}' とできる. + +しかし,{\tt organization}フィールドを無効にするために +{\tt key}フィールドが常に必要なわけではない. +例えば, +\begin{verbatim} + organization = "Unilogic, Ltd.", +\end{verbatim} +としておけば,{\tt alpha}スタイルは `\hbox{[Uni86]}' といった +合理的なラベルを生成する. + +\item +第\ref{features} 節でアクセント付き文字を説明した. +\BibTeX\ にとってはアクセント付き文字は, +トップレベルの左中括弧の直後の文字がバックスラッシュである +中括弧で括られている文字列,すなわち +「特殊文字」の特別な場合にすぎない. +例えば, +\begin{verbatim} + author = "\AA{ke} {Jos{\'{e}} {\'{E}douard} G{\"o}del" +\end{verbatim} +には `\verb|{\'{E}douard}|' と `\verb|{\"o}|'の2つの特殊文字がある. +(上の例で,フィールドの区切り文字であるダブルクオートを +中括弧で置き換えたものでも同じことである). +一般に\BibTeX\ は特殊文字中の\TeX\ あるいは\LaTeX\ コマンドに対しては +何の操作もほどこさないが,そうでない場合には操作を{\dg ほどこす}. +したがって表題を小文字に変換するスタイルでは +\begin{verbatim} + The {\TeX BOOK\NOOP} Experience +\end{verbatim} +を +\begin{verbatim} + The {\TeX book\NOOP} experience +\end{verbatim} +に変換する. +(しかし,`{\tt The}' は表題の最初の単語であるので +それはそのままである). + +特殊文字はアクセント付き文字を扱うのに役立ち, +\BibTeX\ にあなたの望み通りの順番で文献を並べさせるのに役立つ. +また\BibTeX\ は特殊文字をすべてをまとめて1文字と数えるから,ラベルの中に +文字を追加するのに役立つ. +\BibTeX\ とともに配布されている{\tt XAMPL.BIB}ファイル中にすべての使い方の +例がある. + +\item +本節の最後の項目として({\tt author}, {\tt editor}フィールドの中に +記述する)名前について,\LaTeX\ bookの付録Bより少し詳しく説明する. +以下では「名前」は個人に対応するものとしよう. +(複数の著者を1つのフィールドに入れるには,中括弧に入れないで, +前後にスペースを入れて ``and'' でつなぐ. +ここでは1つの名前だけを考える). + +名前は,姓(Last),von, 名(First)とJrの4つの部分からなり, +それぞれは(空かもしれないが)文字列(トークン)のリストからなる. +空でない名前の姓は空でない,すなわち1つの文字列からなる名前 +は姓だけのものとなる\trnote{漢字コード表記された名前では,姓と名の間に +スペース(半角でも全角でも)を入れておけば,Family nameとLast-tokenから +なるものとされ,スペースがなければLast-tokenのみからなるとされる.}. + + +Per Brinch~Hansenの名前は次のようにタイプしなければならない. +\begin{verbatim} + "Brinch Hansen, Per" +\end{verbatim} +この名前の名は ``Per'' の1つのトークンからなり, +姓は ``Brinch'' と ``Hansen'' の2つのトークンからなり, +von, Jrの部分はない. +もし次のようにタイプしたとすると, +\begin{verbatim} + "Per Brinch Hansen" +\end{verbatim} +\BibTeX\ は(誤って),``John~Paul Jones'' の名トークンが ``Paul'' であるのと +同じように ``Brinch'' が名のトークンであると考え,2つの名トークンと +1つの姓トークンからなるものとする. + +もう1つ例を示そう. +\begin{verbatim} + "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin" +\end{verbatim} +この名前には4つの名トークンと,2つのvonトークンと,2つの姓トークンがある. +vonパートは小文字で始まることから,\BibTeX\ は各々の部分がどこから始まり, +どこで終るかがわかる. + +一般に中括弧のレベルが0のところで小文字で始まるものはvonトークンとされる. +技術的には「特殊文字」は中括弧のレベル0であるから,\TeX\ のコマンド +文字列の大文字,小文字を保つようなダミーの特殊文字を使うことで, +\BibTeX\ がvonトークンとして扱うように/扱わないようにできる. + +まとめると,\BibTeX\ は名前の書き方として次の3つの形式を許す. +\begin{verbatim} + "First von Last" + "von Last, First" + "von Last, Jr, First" +\end{verbatim} +Jrパートがある場合,あるいは姓が複数の構成要素からなる場合以外では +一番最初の書き方を使うのが普通である. + +\item +\JBibTeX\ では漢字コード名の場合には姓と名の間にスペース(半角でも全角でも)を +置くことを標準とするが,スペースがなくても,{\tt jabbrv}スタイルなどで出力 +される名前が姓のみにならないなどの問題しか生じない.また,複数の氏名を並べる +時には \verb*| and | の代わりに,全角の句点 ``,'' あるいは ``、'' を使う +こともできる. + +\item アルファベット順でなく,五十音順にソートしたければ{\tt yomi}フィールドに +「ひらがな」で「読み」を書いておけばよい. +{\tt jplain}, {\tt jabbrv}でアルファベット表記の著者はアルファベット順に +並べ,その後に日本語著者名のものを五十音順に並べたい場合などに, +ひらがな表記の読みを使えばよい. + +ただし{\tt jalpha}スタイルではラベルをうまく作り出すには工夫が必要である. +{\tt jalpha}スタイルを使った時には,五十音順にソートすることはないであろうが, +次の例のようにすればよい. + +{\baselineskip=11pt +\begin{verbatim} + @preamble{ "\newcommand{\noop}[1]{}" } + @BOOK{sym, + editor="Janusz S. Kowalik", + title="Coupling Symbolic and Numerical Computing in Expert Systems", + publisher="North-Holland", year=1986} + @BOOK{dss, + editor="Clyde W. Holsapple and Andrew B. Whinston", + title="Decision Support Systems: Theory and Application", + publisher="North-Holland", year=1987} + @INCOLLECTION{goto, + author="後藤英一", title="計算機による数式処理とは", + yomi="{\noop{ごとう}後}藤", + crossref="reduce", pages="4--6", year=1986 } + @UNPUBLISHED{磯崎, + author="磯崎 秀樹",title="How To Use {\JLaTeX}", + yomi="{\noop{いそざき}磯}崎", + note="memo for {\JLaTeX}", year=1987} +\end{verbatim} +} + +こうしておけば,各々のラベルは[Kow86], [HW87], +[後藤86], [磯崎87]となり,アルファベット順に[HW87], [Kow86]と並んだ後に, +五十音順に[磯崎87], [後藤86]と並ぶ. +\end{enumerate} + +\bibliography{jbtxdoc} +\bibliographystyle{jplain} +\end{document} diff --git a/biblio/pbibtex/pbibtex-manual/jbtxhak.pdf b/biblio/pbibtex/pbibtex-manual/jbtxhak.pdf new file mode 100644 index 0000000000..9637eb38f8 Binary files /dev/null and b/biblio/pbibtex/pbibtex-manual/jbtxhak.pdf differ diff --git a/biblio/pbibtex/pbibtex-manual/jbtxhak.tex b/biblio/pbibtex/pbibtex-manual/jbtxhak.tex new file mode 100644 index 0000000000..c3a2a23471 --- /dev/null +++ b/biblio/pbibtex/pbibtex-manual/jbtxhak.tex @@ -0,0 +1,692 @@ +\documentstyle{jarticle} +\def\dg{\gt} +\def\dm{\mc} +\voffset=-2.3cm +\hoffset=-2.3cm +\textwidth=16.6cm +\textheight=25cm + +\def\JTeX{\leavevmode\lower .5ex\hbox{J}\kern-.17em\TeX} +\def\JLaTeX{\leavevmode\lower.5ex\hbox{J}\kern-.17em\LaTeX} +\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} + +\def\JBibTeX{\leavevmode\lower .5ex\hbox{{\rm J}}\kern-0.15em\BibTeX} +\def\trnote#1{\footnote{\parindent=16pt\hskip-15pt\hang\indent 訳注:#1\parindent=10pt}} + + +\title{Designing B\kern-.05em{\large I}\kern-.025em{\large B}\kern-.08em\TeX\ + Styles\\ +B\kern-.05em{\large I}\kern-.025em{\large B}\kern-.08em\TeX スタイル +の作り方 +\footnote{翻訳の部分は原著者の許可を得て配布するものであり,翻訳について, +\JBibTeX に関する記述については松井に問い合わせられたい.} +\ $^,$\footnote{\JBibTeX (version 0.30)\cite{jbibtex}の説明も含む.} +} + +\author{Oren Patashnik(訳:松井正一)} +\date{January 31, 1988(翻訳版:1991年1月1日)} +\def\orig#1{} +\begin{document} +\baselineskip=17pt + +\maketitle + +\setcounter{section}{4} +\section{参考文献スタイルをハックする} +\label{style} +本稿は,実際には +\BibTeX の一般的なドキュメントである``\BibTeX ing''~\cite{btxdoc}の最終節 +であり, +第\ref{style} 節からはじまる(そしてこの節だけで終る). +しかし先のドキュメントは\BibTeX の利用者向けであり,本稿はスタイル +作成者向けであるので,物理的に分離したものとなっている. +とはいえ,この文書の読者は``\BibTeX ing''に精通している必要があり,本稿で +参照している節,節番号は2つの文書が1つのものと仮定している. + +本節と標準スタイルファイルのドキュメントである{\tt btxbst.doc}で\trnote{日本 +語対応版は{\tt jbtxbst.doc}である.} +既存のスタイルファイルの修正方法,新たなスタイルファイルの作成 +方法を説明する. +もしちゃんとしたスタイルファイルを作ろうと思っているのであれば, +スタイルに関してvan~Leunen~\cite{van-leunen}に, +タイプセットに関してLamport~\cite{latex}とKnuth~\cite{texbook}に, +さらに場合によっては, +細かな互換性の問題から{\em Scribe\/}~\cite{scribe}に精通していなければ +ならない. +せっせと仕事をする合間に,Strunk and Whiteによる名小冊子 +\cite{strunk-and-white}を読むことを薦めるが,読まないのであれば, +少なくてもデータベース中のエントリと参考文献リストを見て,\BibTeX が複数の +名前をどう扱っているかを調べること\trnote{日本語対応版での漢字コード著者名の +扱い方についても調べること.}. + +新たなスタイルを作る場合には,望みのものに近い既存のスタイルを修正する +のがよい\trnote{新たなスタイルを作る時だけでなく,既存のスタイルを +修正する時でも,直接{\tt .bst}ファイルを修正するのではなく{\tt btxbst.doc, +jbtxbst.doc}を修正する方が,再利用可能性が高くなる,運が良ければ1つの修正で +複数のスタイルを修正できる,などの利点がある.}. +これは古いスタイルを\BibTeX\ version 0.99用に修正する場合にもあてはまる. +(私自身が4つの非標準スタイルを修正した経験からの忠告である). +古い(version 0.98i)スタイルのために作った関数を新しいスタイルファイルに +入れる時には,代入関数({\tt :=})の引数の順番が変更されたことに注意 +しないといけない. +スタイルファイルが完成したら,{\tt XAMPL.BIB}データベースの全てを +使って\trnote{{\tt \char"5Cnocite\{*\}}で行える.},標準エントリの全ての +型に対して望みの結果になることを確認すればよい. + +標準スタイルの虫,やりたいことができない場合にはOren Patashnikに +文句を言うこと\trnote{日本語用のものについては +松井正一{\tt (matsui@denken.or.jp)}に知らせること.}. + +\subsection{概要} + +参考文献スタイルはスタックマシンに対する命令を後置演算子形式で記述する. +標準スタイルのドキュメントを見れば,どう書くかを知るのは難しいことでは +ないが,本稿ではもっと詳しく説明する(希望があればさらに詳しくする). + +基本的にはスタイルファイルは, +名前のない言語で,プログラムを記述することにより, +どのようにしてデータベースのエントリ +から参考文献リストを作るかを\BibTeX に教えるものである(日本語対応スタイル +では\JBibTeX に教えることである.以下\BibTeX に当てはまることは\JBibTeX にも +当てはまるので,いちいちことわらない). +(以下では「エントリ」は「エントリ・リスト」のことであり,文脈から明らかな +場合には単に「リスト」とする). +このプログラム言語には,次の細節(subsection)で説明する10個のコマンドがある. +これらのコマンドは言語のオブジェクト:定数,変数,関数,スタック, +エントリ・リストを操作するものである. +(注意:この文書中の用語は説明を簡単にするために選んだものであり, +\BibTeX 本来の用語とは若干異なる.例えばこの文書中の「変数」,「関数」 +はどちらも\BibTeX にとっては関数である.\BibTeX のエラーメッセージを +解釈する時にはこのことを念頭におくこと). + +\BibTeX の関数には{\dg 組み込み}のもの(第\ref{built-in-fns}節で説明する) +と{\tt MACRO}か{\tt FUNCTION}で定義するものの2種類がある. + +スタイル作成で最も時間のかかる作業は{\tt FUNCTION}コマンドを使って +関数を作成する,あるいは既存のものを変更することである. +(実際には,前述の参考文献に精通するのに要する時間の方が長いが, +それが終った後の話しである). + +例として関数の一部を取り出したものを見てみよう. +文字列型変数{\tt label},整数型変数{\tt lab.width}があり, +{\tt label}の後ろにに`{\tt a}'を連結し,{\tt lab.width}を1増やしたいとしよう. +\begin{verbatim} + . . . + label "a" * 'label := % label := label * "a" + lab.width #1 + 'lab.width := % lab.width := lab.width + 1 + . . . +\end{verbatim} +1行目で先ず{\tt label}はその値をスタックにプッシュする. +次に {\tt "a"} が文字列定数 `{\tt a}' をスタックに置く. +続いて組み込み関数 {\tt *} がスタックトップの2つの文字列をポップし, +それらを連結したものをプッシュする. +{\tt 'label}はその変数名をプッシュする. +最後に組み込み関数 {\tt :=} が変数名と連結結果をポップし,代入を +実行する. +\BibTeX はスタイルファイル中の {\tt \%} 以降はコメントとして扱う. +2行目も同様であるが,プッシュする整数定数 +として`{\tt \#}'と`{\tt 1}'の間にスペースのない {\tt \#1} を使っている. + +スペースの数はいくつでもよく,スペース,タブ,改行はいくつあっても +1つとみなされる(後で簡単に説明するように, +コマンドの途中では改行しないほうがよい). + +文字列定数としては,ダブルクォートで囲った中には印字可能文字なら +何を書いてもよい\trnote{日本語対応版では漢字コードでもよい.}. +文字列定数に限って\BibTeX は大文字と小文字の +区別をする.さらに文字列定数の中のスペースの数は意味が{\dg ある}. +また文字列定数は行をまたがってはならない(すなわち文字列の +始めと終りのダブルクォートは同じ行になければならない). + +変数,関数の名前は数字で始まってはならず,\LaTeX~bookの143ページに +ある10個の禁止文字を含んではならないが,それ以外の印字可能文字なら +何を使ってもよい\trnote{日本語対応版では漢字コードでもよい.日本語 +プログラミングできる{\tt :-)}.}. +さらに(ASCIIコードの)大文字と小文字の区別はしない. + +変数,定数の型としては整数型と文字列型しかない +(論理値は整数の0(偽)と1(真)として実現している). +変数の種類としては3種類ある. +\begin{description} + +\item[大域変数\hfill] {\tt INTEGERS}あるいは{\tt STRINGS}コマンドで宣言 +された整数型あるいは文字列型の変数. + +\item[エントリ変数\hfill] {\tt ENTRY}コマンドで宣言 +された整数型あるいは文字列型の変数.エントリリストのエントリ毎に +別々の値を持つ(例えば{\tt label}にエントリのラベルを持たせることが +できる). + +\item[フィールド\hfill] 読みだし専用の文字列型の変数であり,データベースの +情報が格納される.値は{\tt READ}コマンドでデータベースが読み込まれる +ことで設定される. +エントリ変数同様に各々のエントリ毎に別々の値を持つ. +\end{description} + + +\subsection{コマンド} + +10個のコマンドがある. +\hbox{\tt ENTRY}, \hbox{\tt FUNCTION}, \hbox{\tt INTEGERS}, +\hbox{\tt MACRO}, \hbox{\tt STRINGS}の5個は変数の宣言, +関数の定義のためであり, +\hbox{\tt READ}はデータベースの情報を読み込み, +\hbox{\tt EXECUTE}, \hbox{\tt ITERATE}, \hbox{\tt REVERSE}, +\hbox{\tt SORT})の4個はエントリを操作し,出力を作り出す. +すべてのコマンドを大文字で示したが, +\BibTeX はコマンド名の大文字と小文字の区別をしない. + +いくつかの制限:{\tt ENTRY}と{\tt READ}の数は1つでなければらない. +{\tt ENTRY}コマンド, すべての{\tt MACRO}コマンド,{\tt FUNCTION}コマンド +のいくつか(次節{\tt call.type\$} 参照)は{\tt READ}コマンドの前に +なければならない.また{\tt READ}コマンドはエントリ操作,出力の +4つのコマンドより前になければならない. + +(本質的ではないが)コマンドの間には1つ以上のブランク行を置き, +関数定義の中にはブランク行を置かないようにするとよい. +これによって\BibTeX の構文エラーからの回復を助けることができる. + +コマンドの引数は中括弧(\verb|{ }|)に入れる. +本節で述べられていない構文に関する事項は標準ファイルのドキュメント\trnote{ +{\tt btxbst.doc, jbtxbst.doc}のこと.}を参照されたい. +以下で10個のコマンドの説明を行う. + +\begin{description} + +\item[\hbox{\tt ENTRY}\hfill] +フィールドとエントリ変数を宣言する. +3引数であり,各々の引数は(空かもしれないが)変数名のリストである. +それらはフィールド,整数型のエントリ変数,文字列型のエントリ変数である. +また\BibTeX が相互参照で使うために自動的に宣言する +{\tt crossref}フィールドと, +{\tt SORT}コマンドで使うソートキーとして{\tt sort.key\$} が,文字列型の +エントリ変数として自動的に宣言される. +以上の変数はエントリ・リストのエントリ毎に別々の値を持つ. + +\item[\hbox{\tt EXECUTE}\hfill] +関数を1つ実行する.引数は関数名1つである. + +\item[\hbox{\tt FUNCTION}\hfill] +新たな関数を定義する. +2引数であり,最初が名前で2番目が定義である. +関数は使う前に定義しなければならない.したがって再帰関数は許されない. + +\item[\hbox{\tt INTEGERS}\hfill] +整数型の大域変数を宣言する. +引数は変数名のリスト1つである. +文字列変数の長さを制限する大域的変数として{\tt entry.max\$} と +{\tt global.max\$} が自動的に宣言される. +このコマンドはスタイルファイル中にいくつあってもよいが,変数は使う前に +宣言しなければならない. + +\item[\hbox{\tt ITERATE}\hfill] +現在のリストの順番にリストのエントリに対して1つの関数を実行する +(最初はリストは引用順に並んでいるが,{\tt SORT}によって順番は変わる). +引数は関数名1つである. + +\item[\hbox{\tt MACRO}\hfill] +文字列マクロを定義する. +引数は2つで,最初が変数名,関数名と同じように扱われるマクロ名で, +次がダブルクォートで囲まれた文字列であり,その定義である. +月名の3文字の省略形とよく使われる論文誌の省略形を定義しておくこと. +この定義は利用者のデータベース中の定義で置き換えることができるから, +利用者に変更してもらいたくないものは,同じ構文の{\tt FUNCTION}を +使って定義すればよい. + +\item[\hbox{\tt READ}\hfill] +エントリ・リスト中のエントリのフィールドの値をデータベース +から探索して設定する. +引数はない. +データベース中のエントリに,対応するフィールドの値がない場合には +(必ずしもデータベース中にすべてのフィールドが書かれているわけではない) +そのフィールドの値には欠測値のマークが付く. + +\item[\hbox{\tt REVERSE}\hfill] +{\tt ITERATE}コマンドとまったく同じことをエントリリストの逆順に実行する. + +\item[\hbox{\tt SORT}\hfill] +文字列型のエントリ変数{\tt sort.key\$} を使ってエントリリストを +ソートする. +引数はない. + +\item[\hbox{\tt STRINGS}\hfill] +文字列型の大域変数を宣言する. +引数は変数名のリスト1つである. +このコマンドはスタイルファイル中にいくつあってもよいが,変数は使う前に +宣言しなければならない. +\end{description} + +\subsection{組み込み関数} +\label{built-in-fns} + +組み込み関数の説明の前に,組み込みオブジェクトついて少し説明しておく. +組み込みのエントリ文字列変数として{\tt sort.key\$} があり, +ソートを行うスタイルでは値を設定しなければならない. +組み込みのフィールドとして,第4節で述べた相互参照機能のための +{\tt crossref}がある. +さらに整数型の大域変数 +{\tt entry.max\$} と{\tt global.max\$} があり,その値は\BibTeX の内部定数 +に設定されている. +\BibTeX から警告メッセージが出ないよう, +文字列への代入の前に,代入する文字列長をこれらの値より短くして +おかねばならない. + +現在組み込み関数は37個ある\trnote{日本語対応版では,組み込み関数を1つ +追加しているので,38個ある.}. +すべての組み込み関数の名前は最後が `{\tt \$}' で終る. +以下では「1番目」,「2番目」というのはスタックからポップされた順番を意味する. +「リテラル」はスタックの要素であり,整数値,文字列,変数名, +関数名,あるいは欠測フィールドを表す特別の値のいずれかである. +ポップされたリテラルの型が誤っていると\BibTeX は文句をいった後, +関数の返す値の型に対応して,整数値の0あるいは空文字列をプッシュする. + +\begin{description} + +\item[\hbox{\tt >}\hfill] +2つの(整数)リテラルをポップし,比較を行い,2番目が1番目より大きければ1を +そうでなければ0をプッシュする. + +\item[\hbox{\tt <}\hfill] +上と同様(小さければ). + +\item[\hbox{\tt =}\hfill] +スタックトップの(ともに整数あるいは文字列の) 2つのリテラルを +ポップして比較し,等しければ1を,そうでなければ0をプッシュする. + +\item[\hbox{\tt +}\hfill] +(整数の)2つのリテラルをポップしその和をプッシュする. + +\item[\hbox{\tt -}\hfill] +(整数の)2つのリテラルをポップしその差をプッシュする. +(2番目から1番目を引く). + +\item[\hbox{\tt *}\hfill] +2つの(文字列)リテラルをポップし,それらを連結したものをプッシュする +(逆順,2番目の後に1番目を連結する). + +\item[\hbox{\tt :=}\hfill] +2つのリテラルをポップし1番目(大域変数かエントリ変数)に2番目のリテラルの +値を代入する. + +\item[\hbox{\tt add.period\$}\hfill] +スタックトップの(文字列)リテラルをポップし,`{\tt \}}' でない最後の文字が +`{\tt .}'$\!$, `{\tt ?}'$\!$, `{\tt !}'のいずれでもなければ +`{\tt .}'を最後に加えた結果をプッシュする.いずれかであれば元の文字列を +プッシュする. + +{\dg \JBibTeX での注意}: +全角の`.',`。',`?',`!'の後にも `{\tt .}' は加えない. + +\item[\hbox{\tt call.type\$}\hfill] +その名前がエントリのエントリ型の名前である関数を実行する. +例えば,エントリの型が{\tt book}であれば{\tt book}という関数が実行される. +{\tt ITERATE}コマンドの引数として指定された場合には,{\tt call.type\$} は +エントリの情報を{\tt .bbl}ファイルに出力する. +不明なエントリ型(未定義の型)に対しては{\tt default.type}を実行する. +したがって各々の標準エントリ型に対応するもの以外に{\tt default.type}という型に +対応する関数を{\tt READ}コマンドの前に定義しておかねばならない. + +\item[\hbox{\tt change.case\$}\hfill] +2つの(文字列)リテラルをポップし,1番目のリテラルの指定にしたがって, +以下に説明する形式で,2番目の文字列の大文字/小文字変換を行う +(注意:次文で「文字」とは中括弧のレベル0,最も外側の中括弧のレベルの文字の +ことであり,第4節で説明した「特殊文字」を除くそれ以外の文字は変換されない). +1番目のリテラルが`{\tt t}'であれば,文字列の1番始めの文字およびコロンの後に +スペースが1個以上続く文字列の最初の文字はそのままで,それ以外を小文字に +変換する. +1番目のリテラルが`{\tt l}'であれば,すべての文字を小文字に変換する. +1番目のリテラルが`{\tt u}'であれば,すべての文字を大文字に変換する. +そして変換結果の文字列をプッシュする. +2つのリテラルの型が文字列型でない場合には文句を言い,空文字列をプッシュする. +リテラルの型は合っているが,変換指定が上記の何れでもない場合には,文句を +付けた後,単に2番目の文字列をそのままの形でプッシュする +(もう1つの注意:変換指定文字の大文字/小文字は区別されない.すなわち +{\tt t}と{\tt T}は同じものとされる). + +\item[\hbox{\tt chr.to.int\$}\hfill] +スタックトップの(文字列)リテラルをポップし,その長さが1文字であること +を確認した後,そのASCIIコードの整数をプッシュする. + +{\dg \JBibTeX での注意}: +漢字コード文字に対応するために,リテラルが漢字コード文字の場合には +2バイトを1文字と数え,値としては1バイト目のコード値(EUCコード値)を +プッシュする.ただし +これは\JBibTeX\ version 0.10との互換性のために残したものであり,仕様変更 +される可能性が高い. + +\item[\hbox{\tt cite\$}\hfill] +エントリに対応する {\verb|\cite|}コマンドの引数の文字列をプッシュする. + +\item[\hbox{\tt duplicate\$}\hfill] +スタックトップのリテラルをポップしそのコピーを2つプッシュする. + +\item[\hbox{\tt empty\$}\hfill] +スタックトップのリテラルをポップし,それが欠測フィールドであるか,あるいは +文字列中に空白文字以外が無い場合に,整数の1をプッシュし,それ以外の場合には +0をプッシュする. + +\item[\hbox{\tt format.name\$}\hfill] +スタックトップの3つのリテラル(順に文字列,整数,文字列)をポップする. +最後の文字列リテラルが名前リスト(要素が個人名に対応)であり,整数リテラルが +リストの何番目を取り出すのかの指定であり,最初の文字列リテラルが名前を +どの様にフォーマットするのか(次節で説明する)の指定である. +フォーマットされた名前の文字列をプッシュする. + +{\dg \JBibTeX での注意}: +この関数では全角のスペースは半角のスペースと同じとみなす(より正確に +いうと全角のスペースは半角のスペースに変換されて処理される).また,全角の +句点 ``,'' と ``、'' も ``\verb*| and |'' と同様に扱うので, +漢字コード氏名は句点で区切って並べることができる. + + +\item[\hbox{\tt if\$}\hfill] +3つのリテラル(順に2つの関数リテラル,整数リテラル)をポップし, +最後のリテラル値の整数値が0より大きい時には2番目のリテラルを実行し, +そうでなければ1番目のリテラルを実行する. + +\item[\hbox{\tt int.to.chr\$}\hfill] +スタックトップの(整数)リテラルをポップし,それをASCIIコードとして, +対応する文字を1文字の文字列に変換したものをプッシュする. + +\item[\hbox{\tt int.to.str\$}\hfill] +スタックトップの(整数)リテラルをポップし,それを(一意に定まる)文字列に +変換してプッシュする. + +\item[\hbox{\tt missing\$}\hfill] +スタックトップをポップし,それが欠測フィールドであれば整数の1を,そうで +なければ0をプッシュする. + +\item[\hbox{\tt newline\$}\hfill] +出力バッファに蓄積されている情報を{\tt bbl}ファイルに書き出す. +出力バッファが空である場合に限り空行を書き出す. +{\tt write\$} は適当に改行を行なうから,空行を書き出す時,あるいは +明示的に改行したい時だけに,この関数を使うのがよい. + +\item[\hbox{\tt num.names\$}\hfill] +スタックトップの(文字列)リテラルをポップし文字列中の名前の数, +すなわち,大文字/小文字を無視して,中括弧のレベル0の位置にあり,前後が +空白文字である``and''部分文字列の数に1を加えた値, +をプッシュする. + +{\dg \JBibTeX での注意}: +この関数では全角のスペースは半角のスペースと同じとみなす(より正確に +いうと全角のスペースは半角のスペースに変換されて処理される).また,全角の +句点 ``,'' と ``、'' も ``\verb*| and |'' と同様に扱うので, +漢字コード氏名は句点で区切って並べることができる. + +\item[\hbox{\tt pop\$}\hfill] +スタックトップをポップするがプリントはしない.不必要なリテラルを +取り除くのに使う. + +\item[\hbox{\tt preamble\$}\hfill] +データベースファイルから読み込んだ{\tt @PREAMBLE}すべてを連結した文字列を +プッシュする. + +\item[\hbox{\tt purify\$}\hfill] +スタックトップの(文字列)リテラルをポップし, +空白文字,ハイフン`\verb|-|'とタイ`\verb|~|' +(これらはスペースに変換される)のいずれでもないアルファベット +以外の文字,「特殊文字」に付随した制御文字列(コマンド; control sequence)に +含まれるアルファベット文字を除去した文字列をプッシュする\trnote{漢字コード +文字列なら変化しない.}. + +\item[\hbox{\tt quote\$}\hfill] +ダブルクォート文字(`\verb|"|')1文字からなる文字列をプッシュする. + +\item[\hbox{\tt skip\$}\hfill] +何もしない. + +\item[\hbox{\tt stack\$}\hfill] +スタックの内容を全部ポップしてプリントする.スタイル作成時のデバッグ用. + +\item[\hbox{\tt substring\$}\hfill] +スタックトップの3つのリテラル(順に長さ{\it len},開始位置{\it start}の +2つの整数リテラル,文字列リテラル)をポップする. +{\it start}が正ならば文字列の先頭から数えて, +(最初が1文字目として){\it start}文字目からの, +{\it start}が負ならば文字列の終りから数えて(最後の文字が1文字目として), +$-${\it start}文字目からの, +連続する(高々){\it len}文字の部分文字列をプッシュする. + +{\dg \JBibTeX での注意}: +この関数は1文字は1バイトからなるものとして処理するので,漢字コード +文字列では指定した +文字数の半分の数の漢字コード +が得られる.また漢字コードの1文字の間で切られないように +開始位置,文字数(バイト数)の調整を行なう.調整は開始位置が漢字コードの1バイト目 +に一致していれば.開始位置はそのまま,2バイト目であれば1バイト目から取り出す +ように調整する.終了位置が漢字コードの1バイト目であれば2バイト目まで取り出す +ように調整する.したがって指定した長さより最大2バイト長い文字列となる. +これは日本語用でないスタイルファイルを使った場合でもそれなりの出力が得られる +ようにするためである. + +\item[\hbox{\tt swap\$}\hfill] +スタックトップの2つのリテラルの順序を入れ替える. + +\item[\hbox{\tt text.length\$}\hfill] +スタックトップの(文字列)リテラルをポップし, +アクセント付き文字(正確には第4節で定義されている「特殊文字」)は, +(対応する右中括弧が欠けていても), +1文字として数えた時の文字数をプッシュする. + +{\dg \JBibTeX での注意}: +漢字コード1文字は2文字と数える. + +\item[\hbox{\tt text.prefix\$}\hfill] +2つのリテラル(順に整数リテラル{\it len},文字列リテラル)をポップし, +文字列の先頭から(高々){\it len}文字の連続した文字列をプッシュする. +{\tt substring\$} に似ているが,この関数では,「特殊文字」は +対応する右中括弧が欠けていても,複数のASCII文字から構成されていても, +1文字として数える. + +{\dg \JBibTeX での注意}: +この関数では特殊文字以外の文字は,1文字は1バイトからなるものとして +処理するので,漢字コード文字列では指定した文字数の半分の数の漢字からなる +文字列が得られる. +また漢字コードの1文字の間で切られないように,終了位置が漢字コードの +1バイト目であれば2バイト目まで取り出すように調整する. +したがって指定した長さより最大1バイト長い文字列となる. +これは日本語用でないスタイルファイルを使った場合でもそれなりの出力が得られる +ようにするためである(例えば{\tt alpha}ではラベルを著者名の姓の先頭3文字 +を用いて作成するが,漢字コードの中間で終らないように2文字にしてしまうと +情報量が少なくなる,また漢字コードは特殊文字と考えて処理するとラベルが長く +なり過ぎるのでこのような仕様とした). + +\item[\hbox{\tt top\$}\hfill] +スタックトップをポップしその内容を端末とログファイル{\tt blg}にプリントする. +デバッグに役立つ. + +\item[\hbox{\tt type\$}\hfill] +現在のエントリの型({\tt book, article}など)の文字列をプッシュする. +知らない型あるいは未定義の型であれば空文字列をプッシュする. + +\item[\hbox{\tt warning\$}\hfill] +スタックトップの(文字列型)リテラルをポップし, +警告メッセージであることを示してプリントする. +また,出力した警告メッセージの数を1増やす. + +\item[\hbox{\tt while\$}\hfill] +2つの(関数)リテラルをポップし,最初の関数を実行した結果であるスタックトップ +の値が0より大きい間,2番目の関数を繰返し実行する. + +\item[\hbox{\tt width\$}\hfill] +スタックトップの(文字列型)リテラルをポップし,その印字幅をある相対単位に +基づいて計算した整数値をプッシュする +(現在は1987年6月バージョンの$cmr10$フォントに基づいて,1/100ポイントを +1として計算する\trnote{漢字コードの幅情報は正確でないので注意が必要.}). +この関数は文字列を文字通りに扱う,すなわち,(対応する右中括弧が欠けていても) +「特殊文字」は特別に扱う以外は, +たとえある文字が\TeX で特別な意味を持っていても, +文字はそのままの形でプリントされるものとして幅を計算する. +ラベル文字列の幅を比較するためのものである. + +\item[\hbox{\tt write\$}\hfill] +スタックトップの(文字列)リテラルをポップし,出力バッファに書き出す(その結果, +バッファが一杯になれば{\tt bbl}ファイルにも書き出される). + +\item[\hbox{\tt is.kanji.str\$}\hfill] +\JBibTeX のみで定義されている組込み関数であり, +スタックトップの(文字列)リテラルをポップし,文字列中に日本語文字(全角文字)が +含まれていれば(整数の)1を,そうでなければ0をプッシュする. + +\end{description} + +組込み関数{\tt while\$} と{\tt if\$} ではスタック上に2つの関数リテラルが +必要である. +これらは関数名の前にシングルクォートを付けるか, +{\tt FUNCTION}コマンドを使って関数を定義したくなければ,その定義を +({\tt FUNCTION}コマンドの2番目の引数を中括弧で囲んで)そのまま書けばよい. +例えば次に示す関数の一部分は,{\tt label}が空文字列でなければ, +その最後に文字`{\tt a}'を付け加える. + +\begin{verbatim} + . . . + label "" = + 'skip$ + { label "a" * 'label := } + if$ + . . . +\end{verbatim} + +名前をクォートする関数は,{\tt skip\$} のような組込み関数である必要はなく, +例えば,フィールドでも,自分で定義した関数でもよい. + + +\subsection{名前のフォーマット} + +名前には何が入っているのか? これについては第4節で少し詳しく説明した. +名前は「名(first)」パート, vonパート, 「姓(last)」パートとJrパートから +なり,それぞれは名前トークンのリストからなり,それぞれのパートは +空かもしれないが,名前が空でなければ姓パートは必ず空ではない. +この小節では組込み関数の{\tt format.name\$} に指定するフォーマット指定文字 +を説明する. + +例として,非常に長い名前を考えてみよう. +データベースのエントリ~\cite{prime-number-theorem}に次のフィールドが +あるとしよう. +\begin{verbatim} + author = "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin" +\end{verbatim} +また「姓 カンマ イニシャル」(``last name comma initials'')の順で名前を +フォーマットしたいとしよう. +次のようなフォーマット指定文字列を使うと, +\begin{verbatim} + "{vv~}{ll}{, jj}{, f}?" +\end{verbatim} +\BibTeX はフォーマットされた文字列として次を作り出す. +\begin{verbatim} + de~la Vall{\'e}e~Poussin, C.~L. X.~J? +\end{verbatim} + +この例をもっと詳しく見てみよう. +このフォーマット指定文字列には,名前のそれぞれの構成要素に +対応する,中括弧レベルが1の4つの{\dg 断片}({\em pieces\/})がある. +対応する構成要素がなければ(この名前ではJr要素),その断片の中のすべてが +無視される. +中括弧のレベル0にあるものは(この例では,たぶんタイプミスであろうが, +`{\tt ?}'の文字は)そのままの形で出力されるが, +この機能はあまり使わないであろう. + +フォーマット指定の部分中では二重文字(double letter)は +構成要素のすべてを使うことを, +単文字(single letter)は省略形にしたものを使うことを\BibTeX に指定する. +これらの指定文字は中括弧のレベル1になければならず,それ以外の文字は( +後で説明してある文字以外のほとんどすべての文字は)そのままの形で使われる. +vonパートの最後にあるタイ(\verb|~|)は任意タイであり,\BibTeX が必要と判断 +した場合にのみ出力され,そうでなければスペースとして出力される. +本当にタイを出力したいのであれば2つ書いておけば,つまり{\verb|{vv~~}|}と +しておけば(1つだけ)出力される. +断片の最後の文字であるタイは任意タイとされるが,それ以外は通常の +文字として扱われる. + +\BibTeX は名前トークンの{\dg 間に}デフォールトの区切り文字列を書き出す. +これはスペースかタイのどちらか適した方,あるいは省略形トークンでは +ピリオドの後にスペースかタイの適した方を付けたものである. +しかしフォーマット指定の最後のトークンの後には +デフォールト区切り文字列を書き出さないから, +先の例で言えば`J'の後にはピリオドは付かない. +したがって次のように指定して, +\begin{verbatim} + "{vv~}{ll}{, jj}{, f.}" +\end{verbatim} +前の出力例の疑問符をピリオドに置き換えたフォーマット結果を得ることができる. +名前に「名」パートがない場合に対応するように,ピリオドは +疑問符の位置でなく「名」断片の中に置かねばならないことに注意しよう. + +\BibTeX のデフォールトの区切り文字を置き換えたいのなら,明示的に指定 +する必要がある. +例えばvonパートと姓パートのすべてのトークンの先頭文字を,間にスペースを +置かずに連結したラベルを作りたいのであれば, +次のように指定しなければならない. +\begin{verbatim} + "{v{}}{l{}}" +\end{verbatim} +こうすればフォーマット結果の文字列として`{\tt dlVP}'が得られる. +置き換えたいすべての部分毎に指定が必要であり(この例では両方に空文字列が +指定されている),指定は単文字,二重文字のすぐ後になければならない. +フォーマット指定文字列の中括弧のレベル1の中では, +以上で述べた文字以外を書くことはできない. + +{\dg\noindent\JBibTeX での注意点}: + +\begin{itemize} +\item 漢字コード表記された名前では,姓と名の間に +スペース(半角でも全角でも)を入れておけば,`{\tt f}'はFamily name(姓)に, +`{\tt l}'はLast-token(名)に対応することになるので,通常の +表記順に名前が書ける.しかしスタイルの作成では注意が必要である. +これは{\tt format.name\$} を完全な日本語対応版としていないからであるが, +実際に日本語対応のスタイルファイルを作成した経験からいうと,漢字コード表記 +された名前とそれ以外の名前に対して,同じフォーマット指定で +{\tt format.name\$} を呼び出すことは殆どないので,あえてこのままに +してある.しかし混乱の種かもしれない. + +\item {\tt jabbrv}で姓のみを出力できるようになどの目的で, +\JBibTeX\ ver. 0.20以降では +姓と名の間にスペース(半角でも全角でも)を置くことを標準としている. +しかしスペースがない場合にも結果がおかしくならないように,フォーマット指定 +には注意が必要である.例えば日本語スタイルの中では次のようなコーディングを +行なっている. + +{\baselineskip=11pt +\begin{verbatim} +editor is.kanji.str$ % 漢字コードの編集者? + {editor #1 "{ff}" format.name$ duplicate$ % 姓を取り出す + empty$ % 空?(姓と名の間に空白がない) + {pop$ editor #1 "{ll}" format.name$} % Last tokenを取り出す + 'skip$ % noop + if$ + } + {editor #1 "{vv~}{ll}" format.name$} % 英文編集者 +if$ +\end{verbatim} +} +\end{itemize} + +\subsection{\JBibTeX の標準スタイル} + +\JBibTeX の標準スタイルとしては{\tt plain, alpha, abbrv, unsrt}に対応して +{\tt jplain, jalpha,jabbrv,\linebreak junsrt}が作成されている. +さらに情報処理学会論文誌{\tt tipsj},情報処理学会欧文論文誌{\tt jipsj}, +電子情報通信学会論文誌{\tt tieic},日本オペレーションズリサーチ学会論文誌 +{\tt jorsj},人工知能学会誌{\tt jsai},ソフトウェア科学会誌{\tt jssst}用の +スタイルも作成されている.これらのスタイルで +行なっている日本語対応の主な変更は以下の通りである.詳しくは{\tt jbtxbst.doc} +を参照されたい. + +\begin{enumerate} +\item 著者名が日本語かどうかを{\tt is.kanji.str\$} を使って判定し, +名前のフォーマットの方法を変える. + +\item 著作名に日本語が含まれる場合には強調指定を付けない. + +\item ページ範囲指定を{\tt Pages}から{\tt pp.\ }に変更した. + +\item {\tt yomi}フィールドがあれば,その情報をソーティングキーを作る時に +著者名,編集者名の代りに使う. +\end{enumerate} + +\baselineskip=16pt +\bibliography{jbtxdoc} +\bibliographystyle{jalpha} +\end{document} diff --git a/biblio/pbibtex/pbibtex-manual/pbibtex-manual.pdf b/biblio/pbibtex/pbibtex-manual/pbibtex-manual.pdf new file mode 100644 index 0000000000..8fd53ff60f Binary files /dev/null and b/biblio/pbibtex/pbibtex-manual/pbibtex-manual.pdf differ diff --git a/biblio/pbibtex/pbibtex-manual/pbibtex-manual.tex b/biblio/pbibtex/pbibtex-manual/pbibtex-manual.tex new file mode 100644 index 0000000000..b88387f012 --- /dev/null +++ b/biblio/pbibtex/pbibtex-manual/pbibtex-manual.tex @@ -0,0 +1,313 @@ +%#!make pbibtex-manual.pdf +\documentclass[a4paper,11pt,nomag,dvipdfmx]{jsarticle} +\usepackage[textwidth=42zw,lines=40,truedimen,centering]{geometry} + +%%%%%%%%%%%%%%%% +% additional packages +\usepackage{amsmath} +\usepackage{array}\usepackage[all]{xy} +\SelectTips{cm}{} +%\usepackage[dvipdfmx]{graphicx} +\usepackage[T1]{fontenc} +\usepackage{booktabs,enumitem,multicol} +\usepackage[defaultsups]{newpxtext} +\usepackage[zerostyle=c,straightquotes]{newtxtt} +\usepackage{newpxmath} +\usepackage[hyperfootnotes=false]{hyperref} +\usepackage{pxjahyper} +\usepackage{hologo} + +% common +\usepackage{../ptex-manual/ptex-manual} + +\def\code#1{\texttt{#1}} +\def\file#1{\texttt{#1}} +\def\codechar#1{\ensuremath{\langle\mbox{\null\code{#1}\null}\rangle}} + +%%%%%%%%%%%%%%%% +\makeatletter +\setlist{leftmargin=2zw} +\setlist[description]{labelwidth=2zw,labelindent=1zw,topsep=\medskipamount} + +\def\>{\ifhmode\hskip\xkanjiskip\fi} + +\def\tsp{_{\mbox{\fontsize\sf@size\z@\ttfamily \char32}}} +\def\tpar{_{\mbox{\fontsize\sf@size\z@\ttfamily \string\par}}} +\def\tign{_{\mbox{\fontsize\sf@size\z@\selectfont --}}} + +\def\tableautorefname{表} +\def\figureautorefname{図} +\def\HyRef@autoref#1#2{% + \begingroup + \Hy@safe@activestrue + \expandafter\HyRef@autosetref\csname r@#2\endcsname{#2}{#1}% + \endgroup\textcompwordmark %欧文ゴースト +} +\makeatother + +\usepackage{shortvrb} +\MakeShortVerb*{|} +%%%%%%%%%%%%%%%% + +% logos +\def\eTeX{$\varepsilon$-\TeX} +\def\pTeX{p\kern-.10em\TeX} +\def\epTeX{$\varepsilon$-\pTeX} +\def\upTeX{u\pTeX} +\def\eupTeX{$\varepsilon$-\upTeX} + +\def\JTeX{\leavevmode\textcompwordmark\lower.5ex\hbox{J}\kern-.17em\TeX} +\def\JBibTeX{\leavevmode\textcompwordmark\lower.5ex\hbox{J}\kern-.08em\BibTeX} +\def\pBibTeX{p\kern-.05em\BibTeX} +\def\upBibTeX{u\pBibTeX} + +% additions to jslogo.sty +\makeatletter +\g@addto@macro\pdfstringdefPreHook{% + \def\JBibTeX{J\BibTeX}% + \def\pBibTeX{p\BibTeX}% + \def\upBibTeX{u\pBibTeX}% +} +\makeatother + +\def\TL{\TeX\ Live} + +\def\_{\leavevmode\vrule width .45em height -.2ex depth .3ex\relax} + +\frenchspacing +\begin{document} +\catcode`\<=13 +\title{\emph{\pBibTeX~/~\upBibTeX マニュアル}} +\author{日本語\TeX 開発コミュニティ\null +\thanks{\url{https://texjp.org},\ e-mail: \texttt{issue(at)texjp.org}}} +\date{version 0.99d-j0.33,\today} +\maketitle + +\pBibTeX と\upBibTeX は,それぞれ\pTeX と\upTeX と組み合わせて使用することを +想定して開発された\BibTeX の日本語対応版である. +\begin{itemize} + \item \pBibTeX の開発元:\\ + \url{https://github.com/texjporg/tex-jp-build/} + \item \upBibTeX の開発元:\\ + \url{http://www.t-lab.opal.ne.jp/tex/uptex.html} + \item 本ドキュメントの開発元:\\ + \url{https://github.com/texjporg/pbibtex-manual/} +\end{itemize} + +\BibTeX の日本語化は,電力中央研究所の松井正一氏によって +\JBibTeX という名称で公開されたもの\footnote{% +最終版は\JBibTeX~0.31である.1991/01/01付の\JBibTeX~0.30のパッケージに, +1992/10/31にfj.comp.texhaxグループへ投稿されたバグ修正パッチ(0.31)を +当てて得られる.}がベースであり,その仕様は\cite{jbibtex}に詳しい. +また,オリジナルの\BibTeX 付属ドキュメント\file{btxdoc.pdf}と +\file{btxhak.pdf}を日本語に訳し,\JBibTeX について補足を加えたドキュメントも +用意されている\cite{jbtxdoc,jbtxhak}. +これらのドキュメントは,レガシーエンコーディングの扱いに関する +記述(第\ref{diff}節を参照)を除き +現在の(u)\pBibTeX でも有効であるので,参照されたい. + +本文書では,オリジナルの\BibTeX の仕様を把握している読者を想定し, +\pBibTeX および\upBibTeX における機能の変更・追加点を説明する. + +\tableofcontents +\clearpage + +\section{日本語化の仕様} + +\BibTeX の日本語化の特徴は,大きく分けて3つである. +\begin{itemize} + \item 多バイト文字の扱い + \item 文字種が増えたことへの対応 + \item 日本語文字とそれ以外の区別 +\end{itemize} + +\subsection{多バイト文字の扱い} + +(u)\pBibTeX は,\BibTeX から最小の変更量で日本語を含む文献情報を +扱えるようにした都合上,多バイト文字の扱いは以下のとおりとなっている. +\begin{itemize} + \item \emph{文字列の位置や長さは「文字単位」ではなく「バイト単位」でカウントする}. + \item その結果として,開始位置や終了位置が多バイト文字の途中となる場合は, + \emph{多バイト文字の途中で切られないように位置を調整して多めに切り出す}. +\end{itemize} + +具体的には,以下のスタイルパラメータが該当する. +\begin{itemize} + \item |substring$|\\ + 整数値2つ(長さ,開始位置)と文字列リテラル1つをpopし, + 指定の長さ(バイト長)の部分文字列をpushする組込関数である. + \begin{itemize} + \item 開始位置が多バイト文字の2バイト目以降であれば,1バイト目から取り出す. + \item 終了位置が多バイト文字の最終バイトでなければ,最終バイトまで取り出す. + \end{itemize} + したがって,\pBibTeX (内部コード|euc|)では最大2バイト長く, + \upBibTeX (内部コード|uptex|)では最大6バイト長い文字列が取り出されうる. + + \item |text.prefix$|\\ + 整数値(長さ)と文字列リテラルをpopし,文字列の先頭から指定の長さ(バイト長)の + 連続した文字列をpushする組込関数である. + 終了位置が多バイトの文字の途中にならないよう調整されるので, + \pBibTeX (内部コード|euc|)では最大1バイト長く, + \upBibTeX (内部コード|uptex|)では最大3バイト長い文字列が取り出されうる. +\end{itemize} + +以下に例を示す. +% 例示ソース:tests/01jtest +% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=2006 +\pBibTeX と\upBibTeX では同じ文字でもバイト長が異なる場合があり, +その結果として取り出される見かけの文字数が異なることに注意. + +\pBibTeX (内部コード|euc|)の場合\par\medskip +\begin{minipage}{0.5\textwidth} +\begin{verbatim} +"あいうえお" #-1 #1 substring$ +"あいうえお" #-1 #2 substring$ +"あいうえお" #-1 #3 substring$ +"あいうえお" #-1 #4 substring$ +"あいうえお" #-1 #5 substring$ +"あいうえお" #-1 #6 substring$ +\end{verbatim} +\end{minipage} +\begin{minipage}{0.4\textwidth} +最後の1文字 = 「お」\par +最後の2文字 = 「お」\par +最後の3文字 = 「えお」\par +最後の4文字 = 「えお」\par +最後の5文字 = 「うえお」\par +最後の6文字 = 「うえお」 +\end{minipage}\par\medskip + +\upBibTeX (内部コード|uptex|)の場合\par\medskip +\begin{minipage}{0.5\textwidth} +\begin{verbatim} +"あいうえお" #-1 #1 substring$ +"あいうえお" #-1 #2 substring$ +"あいうえお" #-1 #3 substring$ +"あいうえお" #-1 #4 substring$ +"あいうえお" #-1 #5 substring$ +"あいうえお" #-1 #6 substring$ +\end{verbatim} +\end{minipage} +\begin{minipage}{0.4\textwidth} +最後の1文字 = 「お」\par +最後の2文字 = 「お」\par +最後の3文字 = 「お」\par +最後の4文字 = 「えお」\par +最後の5文字 = 「えお」\par +最後の6文字 = 「えお」 +\end{minipage}\par\medskip + +\subsection{文字種が増えたことへの対応} + +\begin{itemize} + \item |add.period$|\\ + 文字列リテラルをpopし,最後の文字(|}|を除く)がピリオド類 + \codechar{.}\codechar{?}\codechar{!}のいずれでもないときに + \codechar{.}を最後に加える組込関数である. + + \pBibTeX では,全角の\codechar{!}\codechar{?}\codechar{.}\codechar{。} + (それぞれU+FF01, U+FF1F, U+3002, U+FF0E)もピリオド類とみなし, + これらで終わっても\codechar{.}を付加しない. + + \upBibTeX ではさらにU+203C, U+2047, U+2048, U+2049もピリオド類とみなす. + + \item |format.name$|\\ + 文字列(フォーマット指定),整数値(何番めか),文字列(名前リスト)をpopし, + フォーマットされた名前の文字列をpushする組込関数である.\\ + (u)\pBibTeX では,日本人の姓名の間のスペースとして全角空白U+3000も + 半角空白と同じとみなし(全角空白は半角空白に変換して処理), + また複数の氏名間の区切りとして|and|と同様に + 全角の読点\codechar{、}とコンマ\codechar{,}(それぞれU+FF0C, U+3001)も使える. +\end{itemize} + +\subsection{日本語文字とそれ以外の区別} + +\begin{itemize} + \item |is.kanji.str$|\\ + (u)\pBibTeX 独自の組込関数である. + スタックトップの文字列リテラルをpopし, + 文字列中に「日本語文字」が1つでも含まれていれば整数値1を, + 含まれなければ0をpushする. + なお,「日本語文字」かどうかの判定は以下のように行う. + \begin{itemize} + \item \pBibTeX の場合\\ + ASCIIの範囲(0--127)に収まらない文字を全て「日本語文字」として扱う. + \item \upBibTeX (内部コード|uptex|)の場合\\ + 漢字・かな・ハングルに該当するUnicodeブロックの文字を「日本語文字」と + して扱う\footnote{実装上は\upTeX の\.{kcatcode}と同じブロック分けを流用して + いるのでそれに即して記述すると,既定値が16 (kanji), 17 (kana), 19 (hangul)の + ブロックを真,15 (latin), 18 (CJK symbol)のブロックを偽としている.}. + \pBibTeX とは異なり,記号類(句読点,括弧類,●○■□◆◇など)は「日本語文字」と + して扱わない(バージョンu1.27(\TL~2021)以降\cite{tjb109}). + \end{itemize} +\end{itemize} + +(u)\pBibTeX 用のスタイルファイルでは,しばしば +「日本人の姓名の間にはスペースを入れない」という挙動を実現するために +|is.kanji.str$|関数が実用されている. + + +\section{コマンドラインオプション} + +基本的には\BibTeX と同様であるが,以下が追加されている. +\begin{itemize} + \item |-kanji=|\\ + 入出力ファイルの文字コードを指定する. + 利用可能なの値: + \begin{itemize} + \item \pBibTeX :\code{euc}, \code{sjis}, \code{jis}, \code{utf8} + \item \upBibTeX :\code{euc}, \code{sjis}, \code{jis}, \code{utf8}, \code{uptex} + \end{itemize} + \item |-kanji-internal=|\\ + 内部コードを指定する(\upBibTeX 専用). + 利用可能なの値: + \begin{itemize} + \item \pBibTeX :なし(常に\code{euc}に固定) + \item \upBibTeX :\code{euc}, \code{uptex} + \end{itemize} +\end{itemize} + + +\section{参考:\JBibTeX と\pBibTeX の違い}\label{diff} + +松井氏による\JBibTeX~0.31(\BibTeX~0.99cベース)から +現在の\pBibTeX に至った経緯は以下のとおりである. +\begin{itemize} + \item 1994年,都立大(のち千葉大)の桜井貴文氏により, + \JTeX~1.6 (web2c~6.1)の配布キットに含めるための調整 → \JBibTeX~0.32 + \item 1995年,アスキー\pTeX の配布キットに含めるための調整 + \item 2002年,アスキーにより|-kanji|オプションの追加 → \JBibTeX~0.33 + \item 2009年,日本語\TeX 開発コミュニティが\JBibTeX をフォークし,\pBibTeX に改名 + \item 2010年,\pBibTeX が\pTeX とともに\TL へ収録される.のちに\BibTeX~0.99d対応 +\end{itemize} + +\JBibTeX は当初NTT \JTeX と組み合わせて使用することを想定して開発されたため, +文字コードに関する扱いにNTT \JTeX 由来のものが多かった. +具体的には以下の機能があったが,コマンド名が|jbibtex|から|pbibtex|(\pTeX と同じ接頭辞) +に改名された2009年に削除されている\cite{ptexlive}: +\begin{itemize} + \item JISコードにおいて日本語文字コード開始・終了を示す + 種々のエスケープ・シーケンス(|ESC$@|と|ESC$B|,|ESC(J|と|ESC(B|など)を区別しない. + \item 環境変数|BIBTERMCODE|, |BIBFILECODE|\footnote{松井氏のドキュメント + \file{jbibtex.pdf} \cite{jbibtex}の「3.3 漢字コードの扱い」および + \file{jbtxdoc.pdf} \cite{jbtxdoc}の「1. 概要」の\JBibTeX での注意点として + 言及されているもの.}は,\pBibTeX では参照されない. +\end{itemize} + + +\clearpage +\begin{thebibliography}{99} + \bibitem{jbibtex} 松井正一,「日本語\BibTeX :\JBibTeX」, + \file{./jbibtex.pdf} + \bibitem{jbtxdoc} 松井正一,「\BibTeX ing:\BibTeX の使い方」, + \file{./jbtxdoc.pdf} + \bibitem{jbtxhak} 松井正一,「Designing \BibTeX\ Styles --- \BibTeX スタイルの作り方」, + \file{./jbtxhak.pdf} + \bibitem{ptexlive} 土村展之,「コマンド名問題 - ptexlive Wiki」\\ + \url{https://tutimura.ath.cx/ptexlive/?%A5%B3%A5%DE%A5%F3%A5%C9%CC%BE%CC%E4%C2%EA} + \bibitem{tjb109} Haruhiko Okumura,「upbibtexで名と姓の間のスペースが消える」, + 2020/10/11,\\ + \url{https://github.com/texjporg/tex-jp-build/issues/109} +\end{thebibliography} + +\end{document} -- cgit v1.2.3