はじめに
背景
- LatexのコンパイルをCMakeでしたい。
- UseLATEX.cmakeというのがあるらしいが、うまくいかない。
- 中身をみても解析する気が起きず、CMakeの勉強がてら自作した。
- 元々Makefileのスケルトンはあったので、それをCMakeに移植してみた。
特徴
- add_executable()と似たような書き方でかける.
- プログラムと一緒にコンパイル可能
- out-of-source ビルドが可能
- bibファイルが入っていれば、bibtexを自動的に実行してくれる
- 同じ仕組みで他のコンパイルにもつかえる(と思う)
- 50行程度でかけたので,比較的読みやすい
実装
- https://github.com/tmichi/cmake_latex
- miLATEX.cmakeにマクロを定義しています。includeしてご利用ください.
- 予期せぬエラーが起こるかもしれませんので自己責任でご利用ください。
- pdflatex-> (bibtex) ->pdflatex -> pdflatexの順番に実行しています.
文法
add_tex_files ( target_name main.tex sample.bib ... )
# 引数は最低2個は必須
# target_name ターゲット名
# main.tex メインのファイル
# 第3引数以降 その他のファイル
CMakeLists.txtの例
CMakeLists.txt
cmake_minimum_required(VERSION 3.2)
set(CMAKE_VERBOSE_MAKEFILE 0) #未定義,or 0の場合は,余分なコンソール出力がなくなる(CMakeの変数).1にするとLaTexのログも出す.
project(exmaple NONE)
include (miLATEX.cmake) #ファイルのインクルード
set(MI_LATEX_COMMAND "pdflatex") # latex のコマンドを変えたい場合はこの変数に値を入れる.デフォルトはpdflatex
set(MI_BIBTEX_COMMAND "bibtex") # 上のbibtex版.デフォルトはbibtex
add_subdirectory(sample1)
add_subdirectory(sample2)
sample1/CMakeLists.txt
add_tex_files (sample1 main.tex) #第1,2引数は必須(ターゲット名とメインのtexファイル)
sample2/CMakeLists.txt
file(GLOB MI_TEX_IMG_FILES2 images/*) # images/以下の全ファイル
add_tex_files (sample2 main.tex main.bib sub0.tex ${MI_TEX_IMG_FILES2}) #画像,分割したtexファイルなどは後ろに並べておく.
コンパイル
- 通常のcmakeと同じです。
$ mkdir build
$ cd build/
$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/michi/latex_cmake/build
$ make
(ログ略)
$ ls sample1/main.pdf sample2/main.pdf
sample1/main.pdf sample2/main.pdf
$
課題
- cross-referenceが解消される最小回数コンパイルするようにする。
参考にしたページ
CMakeLists.txtの書き方
- https://qiita.com/mrk_21/items/5e7ca775b463a4141a58
- https://qiita.com/koara-local/items/a9b8324551a467d86765
- https://qiita.com/mrk_21/items/49d8802dc63a2791bcc3
- https://qiita.com/mrk_21/items/9de14590d6c3a2473284
- https://stackoverflow.com/questions/35029277/how-to-modify-environment-variables-passed-to-custom-cmake-target/35032051?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa