LoginSignup
3
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-06

はじめに

背景

  • 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関連

3
1
0

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
3
1