Hatena::ブログ(Diary)

hogeなlog

プロフィール

hogelog

hogelog

小室 直(こむろ すなお)。電気通信大学2003年入学。2010年修士卒業。プログラミングとかしてます。

カレンダー
1984 | 01 |
2006 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2010 | 01 | 06 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 12 |
2012 | 01 | 04 | 06 |

June 13(Fri), 2008

[] TeXコンパイル用のMakefile

もう死んでて、毎週研究室のゼミ資料つくるだけの日常。


hogehoge.texをコンパイルするとして、以下のようなMakefileでコンパイル。dviをつくるときmake、psファイルを作りたいときはmake ps、pdfファイルを作りたいときはmake pdf。BibTeXファイルは~/docs/bibtex/あたりにあるgc.bib, gcbook.bib, embedded.bib。

RESUME = hogehoge
BIBS = gc.bib,gcbook.bib,embedded.bib
TEX     = platex
BIB     = jbibtex
DVIPS = dvips
DVIPDF = dvipdfmx

.SUFFIXES: .ps .dvi .tex .eps .pdf .bib

all: dvi
dvi: deps bib $(RESUME).dvi
ps: $(RESUME).ps
pdf: $(RESUME).pdf

force:
        $(TEX) $(RESUME)
        $(BIB) $(RESUME)
        $(TEX) $(RESUME)
        $(TEX) $(RESUME)

deps:
        ./texdep.pl $(RESUME).tex >deps

bib:
        zsh -c "cp -p $(HOME)/docs/bibtex/{$(BIBS)} ."

clean:
        -rm -f *.aux *.toc *.lot *.lof *.dvi *.log *.bbl *.blg *.pdf *.ps

remake: clean all

.tex.dvi:
        $(TEX) $(RESUME)
        $(BIB) $(RESUME)
        $(TEX) $(RESUME)
        $(TEX) $(RESUME)
.dvi.ps:
        $(DVIPS) $(RESUME)
.dvi.pdf:
        $(DVIPDF) $(RESUME)

-include deps

依存関係を調べるtexdep.plはこんなの。

#!/usr/bin/perl

use strict;
use warnings;
if(@ARGV == 0) {
  print "usage: $0 texfile\n";
  exit -1;
}
my $texfile = $ARGV[0];

if($texfile =~ /([^\.]+)\.tex/) {
  my $texname = $1;
  print "$texname.dvi: ", join(' ', texdep($texfile)), "\n";
  print "$texname.ps: $texname.dvi\n";
  print "$texname.pdf: $texname.dvi\n";
}

sub texdep {
  my ($texfile) = @_;
  my (@depls, @texls);
  open TEX, $texfile or die "cannot open $texfile";
  while(<TEX>) {
    if(/\\input{([^}]+)}/) {
      print $1;
      push @texls, $1;
    }
    elsif(/\\verbatiminput{([^}]+)}/ or /\\includegraphics\[.+\]{([^}]+)}/) {
      push @depls, $1;
    }
    elsif(/\\bibliography{([^}]+)}/) {
      push @depls, map{"$_.bib"}split(',', $1);
    }
  }
  close TEX;
  for my $input (@texls) {
    push @depls, texdep($input);
  }
  return $texfile, @depls;
}
最近のコメント
Connection: close