1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ラテビブラテラテ】BibTeXの動作原理を考察する

Last updated at Posted at 2023-02-10

ラテビブラテラテ
ラテビブラテラテ
ラテビブラテラテ

という呪文があります.Bibを使って文献を管理している時の$\LaTeX$文章のコンパイル方法です.

  1. $\LaTeX$
  2. BibTeX
  3. $\LaTeX$
  4. $\LaTeX$

の順番に回せば,参照番号及び参考文献が載った文書を作成することができるというもの.
この記事では,なぜこの順番で処理を回す必要があるのか,BibTeXと$\LaTeX$を動かしながら考えます.

前提

以下のような.texファイルと.bibファイルを用意します.

_.tex
\documentclass{jsarticle}
\begin{document}

ここで,\cite{Mya2}の実装を拡張して自動微分を組むと...

\bibliographystyle{plain}
\bibliography{references}
\end{document}
references.bib
@url{Mya2,
	author = {Mya-Mya},
	date-added = {2023-02-10 12:15:04 +0900},
	date-modified = {2023-02-10 12:18:59 +0900},
	keywords = {Python, Machine Learning, AD},
	lastchecked = {2023-02-10},
	month = {01},
	title = {自動微分を実装して減衰振動を微分してみる},
	url = {https://qiita.com/Mya-Mya/items/2777703b25a2e0573d97},
	year = {2023},
	bdsk-url-1 = {https://qiita.com/Mya-Mya/items/2777703b25a2e0573d97}}

@url{Mya3,
	keywords = {Machine Learning, Optimization, TensorFlow},
	lastchecked = {2023-02-10},
	month = {01},
	rating = {0},
	title = {勾配法のハイパラを勾配法によって最適化する"Gradient Descent: The Ultimate Optimizer"の論文をスプレッドシートで実装してみる},
	url = {https://qiita.com/Mya-Mya/items/7a8ba000e0cfa099315e},
	year = {2023}}

手順と起こったこと

ラテビブラテラテを順番に行い,周辺ファイルの変化を見ます.なお,DVIファイルはdvipdfmxコマンドを用いてPDFに変換後,表示しています.

1.pLaTeXを動かす[1回目]

コマンド

platex _.tex

結果

エラー箇所

No file document.aux.

LaTeX Warning: Citation `Mya2' on page 1 undefined on input line 4.

No file _.bbl.
[1] (./_.aux)

LaTeX Warning: There were undefined references.

AUXファイルが生成される

document.aux
\relax 
\citation{Mya2}
\bibstyle{plain}
\bibdata{references}
\gdef \@abspage@last{1}

DVIファイル

  • 参考文献リストが表示されません.
  • 引用番号が?です.
    image.png

2.pBibTeXを動かす

コマンド

pbibtex _

pbibtexでは,引数において拡張子を除いたtexファイル名を指定します.

厳密に言えば,pbibtexはauxファイル名もしくは拡張子を除いたauxファイル名を引数として受け取る仕様となっています.しかし,本記事で紹介する手順においては,生成されたauxファイルとtexファイルの名前が一致するため,このような説明となっております.

結果

エラー箇所

なし

AUXファイル

変化なし

BBLファイルが生成される

_.bbl
\begin{thebibliography}{1}

\bibitem{Mya2}
Mya-Mya.
\newblock 自動微分を実装して減衰振動を微分してみる, 01 2023.

\end{thebibliography}

DVIファイル

変化なし
image.png

3.pLaTeXを動かす[2回目]

コマンド

platex document.tex

結果

エラー箇所

Citation `Mya2' on page 1 undefined on input line 4.

AUXファイルが変更される

document.aux
\relax 
\citation{Mya2}
\bibstyle{plain}
\bibdata{references}
+ \bibcite{Mya2}{1}
\gdef \@abspage@last{1}

DVIファイル

  • 参考文献リストが表示されました.
  • まだ引用番号は表示されません.
    image.png

4.pLaTeXを動かす[3回目]

エラー箇所

無し

AUXファイル

変更なし

DVIファイル

  • 引用番号が表示されました.
    image.png

考察

これらを踏まえると,以下のように動作していると考えられます.

それぞれのファイルの役割

  • TEX : 書くやつ.
  • BIB : これも書くやつ.
  • AUX : BiBファイル等の外部データや引用番号等,情報を繋ぐ役割.
    • \bibdata : 文書内で表示する参考文献リストのBIBファイル名.pBibTeXに読み込まれる.
    • \bibcite : 文書内で表示する引用番号と参考文献の対応付けを行う.
  • BBL : 文書内で表示する参考文献リストのマークアップ.
  • DVI : PDFの前身みたいなもの.PDF以外にも様々な形式になれる.

それ以外のやつはログファイルであり,要らないものです.ラテビブラテラテを行うことで,これらが徐々に繋がっていくのですね.

シーケンス図

いろいろ実験

以上で考察した動作原理が正しいかを見るために,色々と実験してみます.

pLaTeX[1回目]後にAUXの\bibdataをすり替える

pBibLaTeXは,AUXファイル内の\bibdataで指定されているBiBファイルを見て,BBLファイルを生成します.
それでは,AUXファイル内の\bibdataで指定されているBiBファイルを別のものにすり替えてからpBibLaTeXを実行すれば,参考文献リストを改ざんできるはず.
という訳で,以下のようなBIBファイルを用意しました.

references2.bib
@url{Mya2,
	author = {Mya-Mya},
	keywords = {Stupid, Crazy},
	lastchecked = {2023-02-10},
	month = {01},
	title = {バカめこっちは残像だ},
	url = {localhost:8888},
	year = {4000},
	bdsk-url-1 = {localhost:8888}}

AUXファイルを以下のように変えます.

_.aux
\relax 
\citation{Mya2}
\bibstyle{plain}
- \bibdata{references}
+ \bibdata{references2}
\gdef \@abspage@last{1}

ビブするとBBLファイルが以下のようになり,参考文献が改ざんされています.

_.bbl
\begin{thebibliography}{1}

\bibitem{Mya2}
Mya-Mya.
\newblock バカめこっちは残像だ, 01 4000.

\end{thebibliography}

その後ラテラテすると以下のようなDVIが得られ,参考文献が改ざんされました!
スクリーンショット 2023-02-10 13.35.00.png

2回目のpLaTeX後にAUXの\bibciteを改ざん

AUXファイル内の\bibciteは,\citeで指定されたKeyと引用番号を対応付けています.
では,ここを適当な文字列に変えれば,引用番号がメチャクチャになるはずです.

_.aux
\relax 
\citation{Mya2}
\bibstyle{plain}
\bibdata{references}
- \bibcite{Mya2}{1}
+ \bibcite{Mya2}{わーわーギャーギャーウェーイwwwwwww}
\gdef \@abspage@last{1}

その後ラテすると,予想通り,以下のようなDVIが得られます.
スクリーンショット 2023-02-10 13.38.58.png

まとめ

BiBTeX及びLaTeXの動作原理を考察してみました.ラテビブラテラテを実行する裏にはこのようなロジックが隠れていたのですね.これで一つ,意味不明な$\TeX$システムの解明が進みました.

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?