CMakeでLaTeXファイルをコンパイルするマクロ


はじめに

背景

  • 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の書き方

LaTeX関連