make
私は実行時に、各.texファイルに対して.pdfファイルを生成するMakefileを含む複数の.texファイルを含むフォルダが欲しいです。私の制限は、一部(すべてではない).texファイルに参考文献があることです。参考文献を含む.texファイルは、bibtexツールを使用して条件付きで生成され、最終的な.pdfファイルに参照を構築する.bblファイルを生成します。これは、bibtexがテキストに引用された参考文献を見つけることができない場合、bibtexがエラーコードを返し、ビルドプロセスを中断するために必要です。以下は提案されたmakefileソリューションです。これは、ifneq が FILE_BIBS 値を評価しないため、機能しません。
ファイルの生成(注:4つのスペースをタブに置き換える必要があります。そうしないと、通訳は正しく機能しません。)
SOURCES:=$(wildcard $(SRC_DIR)*.tex)
BIBS:=$(wildcard $(SRC_DIR)*.bib)
OUTPUT:=$(patsubst %.tex, %.pdf, $(SOURCES))
.PHONY: all
all: $(OUTPUT)
# Build procedure for all .tex files
%.pdf: %.tex $(BIBS)
pdflatex $(patsubst %.tex, %, $<) > /dev/null
# Scan the current .tex file for the phrase \bibliography and put the text
# into a variable called FILE_BIBS, if there is no bibliography phrase in
# the file, FILE_BIBS will be empty
$(eval FILE_BIBS=$(shell grep -m 1 '^[[:space:]]*\\bibliography[[:space:]]*{' $< | sed 's/\\//g' | sed 's/{//g' | sed 's/}//g'))
echo $(FILE_BIBS)
# If there are .bib files in the project
ifneq ($(BIBS),)
echo "there are bibs FILE_BIBS: $(FILE_BIBS)"
# See if FILE_BIBS is not empty (the file uses a bibliography)
ifneq ($(FILE_BIBS),)
# This should print out for outline.tex and not for outline2.tex
# This does not print out in either case
echo "file has bib"
bibtex $(patsubst %.tex, %, $<) > /dev/null
pdflatex $(patsubst %.tex, %, $<) > /dev/null
endif
endif
pdflatex $(patsubst %.tex, %, $<) > /dev/null
.PHONY: clean
clean:
-rm -f *.pdf *.log *.out *.aux *.dvi *.blg *.bbl
概要.tex
\documentclass{article}
\usepackage{natbib}
\bibliographystyle{apa}
\begin{document}
Types of integration \cite[81-82]{INCOSE-Handbook}.
\bibliography{references}{}
\end{document}
輪郭2.tex
\documentclass{article}
\begin{document}
Hello.
\end{document}
参考資料.bib
@BOOK{INCOSE-Handbook,
TITLE = {Systems Engineering Handbook},
SUBTITLE = {A guide for system life cycle processes and activities},
AUTHOR = {Walden, David D. and Roedler, Gerry J. and Forsberg, Kevin J. and Hamelin, R. Douglas and Shortell, Thomas M.},
YEAR = {2015},
PUBLISHER = {Wiley},
EDITION = 4,
ADDRESS = {7670 Opportunity Rd., Suite 220 San Diego, CA, USA 92111-2222}
}
出力
$ make
pdflatex outline2 > /dev/null
echo
echo "there are bibs FILE_BIBS: "
there are bibs FILE_BIBS:
pdflatex outline2 > /dev/null
pdflatex outline > /dev/null
echo bibliographybibliography
bibliographybibliography
echo "there are bibs FILE_BIBS: bibliographybibliography"
there are bibs FILE_BIBS: bibliographybibliography
pdflatex outline > /dev/null
アウトラインを作成するときにbibtex呼び出しが表示されると予想しましたが、そうではありませんでした。これは、2番目のifneqが正しく機能していないことを示します。
Makefile は、2 番目のファイルがifneq
機能せず、FILE_BIBS
空でない場合は true と評価されるため、機能しません。ユーザーは、を実行してフォルダにすべての.texファイルをビルドできるようにすることをお勧めします。make
推奨ソリューション以外の新しいソリューションは、コマンドラインインターフェイス、make、pdftex、bibtex、awkなどのUnix / Linux環境の標準ツールのみを使用する必要があります。 、sed、grep。