ロコリンの雑記

アニメ大好きニートのロコリンのブログ。2015年卒(修士)の社会人。学生時代(2010年)から続けてるブログなのでエントリによっては学生ブログと社会人ブログになっています。時系列から察して。
 
 
このブログについて
ブログ内検索
カテゴリ
プロフィール

ロコリン

Author:ロコリン
2018年5月だけニート(6月から会社員)。2015年3月まで大学院生でした。
趣味:アニメ/Twitter/ゲーム/ニコ動
今(2015年2月更新):プリキュア/プリパラ/アイカツ/ごちうさ/艦これ

外部リンク
Twitter

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

LaTeX で BibTeX (参考文献) と MakeIndex (索引) を目次に追加する方法 

BibTeX の使い方と MakeIndex の使い方については様々なサイトで紹介されているのでここでは紹介しません。しかし,これらを同時に使った時に正しく組版する方法については他サイトで言及がないのでここで紹介します。

まず次のような TeX ファイルがあるとします。目次,参考文献,索引を使っています。

test_0.tex

\documentclass[11pt,dvipdfmx]{jreport}
\usepackage{makeidx}	% 索引を作るのに使う
\makeindex	% 索引を作る

\makeatletter	% ↓定義・再定義開始↓

% \bibliography (BibTeX) による参考文献を目次に追加
% http://www.nsknet.or.jp/~tony/TeX/faq/macro.htm#bibliography
\renewenvironment{thebibliography}[1]{%
	\chapter*{\bibname\@mkboth{\bibname}{\bibname}}%
	\addcontentsline{toc}{chapter}{\bibname}% この行追加
		\list{\@biblabel{\@arabic\c@enumiv}}%
			{\settowidth\labelwidth{\@biblabel{#1}}%
			\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
}

\renewcommand{\bibname}{参考文献}

\newcommand\myprintindex{	% 索引を目次に追加
	\clearpage
	%\phantomsection	% ← hyperref を使う時は入れる。使わないなら不要。
	\addcontentsline{toc}{chapter}{\indexname}
	\printindex
}

\makeatother	% ↑定義・再定義終了↑

\begin{document}

\tableofcontents	% 目次

\chapter{真夏の夜の淫夢}

真夏の夜の淫夢\cite{inmu2000}はコートコーポレーションが2000年に発売したアレなビデオ。
ニコニコ動画や Twitter などで流行している(2013年現在)。
そのため,随所でこの作品の名言を見ることになる。
たまげたなぁ。

\section{野獣先輩}

4章,野獣先輩の名言を示す。

「こ↑こ↓\index{ここ@こ↑こ↓}」

「帰って,どうぞ!†悔い改めて†\index{くいあらためて@†悔い改めて†}」

「まずうちさぁ,屋上あんだけど……焼いて行かない?」

「大丈夫でしょ。ま,多少はね。」

サッー!(迫真)\index{さっーはくしん@サッー!(迫真)}

「すっげえ白くなってる。はっきりわかんだね\index{はっきりわかんだね}。」

% 参考文献
\bibliographystyle{junsrt}	% 参考文献のスタイル
\bibliography{bibs}	% ←どの参考文献データベースを読み込むかを指定する。(ここでは ./bibs.bib を読み込む)

\myprintindex	% 索引

\end{document}
参考文献は次の bib ファイルに入っているものとします。

bibs.bib

@misc{inmu2000,
	title={{Babylon Stage34 真夏の夜の淫夢 ~the IMP~}},
	howpublished={コートコーポレーション},
	year=2000
}

これらから PDF を作成するには次の順にコマンドを実行します。

  1. TeX コンパイル (platex)
  2. 参考文献 BibTeX 作成 (pbibtex)
  3. TeX コンパイル (platex)
  4. 索引 MakeIndex 作成 (mendex)
  5. TeX コンパイル (platex)
  6. TeX コンパイル (platex)
  7. PDF 作成 (dvipdfmx)

例えば,上記の test_0.tex と bibs.bib から組版するには次のようにします。

platex test_0.tex
pbibtex test_0
platex test_0.tex
mendex -c -g -p any test_0.idx
platex test_0.tex
platex test_0.tex
dvipdfmx test_0.dvi

当然,毎回これを手動で実行するのは大変なので自動化するべきです。Windows の人はバッチファイル (bat) を,Linux の人はシェルスクリプト (sh) を,Mac OS X の人はシェルスクリプト (command) を作ればいいと思いますよ。

私が作ったものを例として示します。

tes2pdf.bat

:: tex2pdf
:: *.texファイルをpdfとして出力します。
@echo off
setlocal
echo tex2pdf

:: 引数1 (*.tex ファイル) が入力されていれば filedrop へ移動
if exist %1 goto filedrop

:: エラー表示
echo 入力エラー
echo このバッチファイルに *.tex ファイルをドロップしてください。
pause
goto end


:filedrop

:: カレントディレクトリを引数1 (*.tex ファイル) のある場所へ移動
%~d1
cd "%~d1%~p1"

:: TeX コンパイル処理
platex "%~n1%~x1"
:: BibTeX 処理
pbibtex "%~n1"
platex "%~n1%~x1"
:: MakeIndex 処理
if exist "%~n1.idx" (
	if exist dot.ist (
		mendex -c -g -s dot.ist -p any "%~n1.idx"
	) else (
		mendex -c -g -p any "%~n1.idx"
	)
	platex "%~n1%~x1"
)
:: BibTeX および MakeIndex の反映処理
platex "%~n1%~x1"
:: PDF 作成処理
if exist ipa.map (
	dvipdfmx -f ipa.map "%~n1.dvi"
) else (
	dvipdfmx "%~n1.dvi"
)


:: 終了
:end
endlocal

tex2pdf.sh

#!/bin/bash

# コマンドライン引数の数をチェック。
if [ $# -ne 1 ] ; then
	echo "引数の数は1個な。"
	exit 1
fi

# 入力されたファイルの拡張子をチェック。
case $1 in
	*.tex)
		;;
	*)
		echo "*.tex ファイルを入れてくれ。"
		exit 1
		;;
esac

# TeX コンパイル処理
platex $1
# BibTeX 処理
pbibtex ${1/.tex}.bbl
platex $1
# MakeIndex 処理
if [ -e ${1/.tex}.idx ] ; then
	if [ -e dot.ist ] ; then
		mendex -c -g -s dot.ist -p any ${1/.tex}.idx
	else
		mendex -c -g  -p any ${1/.tex}.idx
	fi
	platex $1
fi
# BibTeX および MakeIndex の反映処理
platex $1
# PDF 生成処理
dvipdfmx ${1/.tex}.dvi
スポンサーサイト
コメント















 管理者にだけ表示を許可する

トラックバック
 
http://rexpit.blog29.fc2.com/tb.php/124-856ad1be
最新記事
最新コメント
FC2カウンタ
欲しい
最近買ったもの
Amazon 検索
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。