1

次のフォルダー構造があります

   1st-grade-math-class/
      common/
        mystyle.sty
        mysubstyle.sty
        fonts/
          font1.ttf
          font2.ttf
          font3.ttf
      week01/
        handout.tex
        image1.pdf
        image2.pdf
      week02/
        handout.tex
        image1.pdf
        image2.pdf
      ...
      week13/
        handout.tex
      output/
        [empty]

そして、次のことを行うために、最善の方法で Makefile を作成したいと思います。

  • TEXINPUTSに共通ディレクトリを適切に含めるようにしてください

  • handout.texを PDF にコンパイルし(pdflatex または xelatex を使用)、出力ディレクトリにweek01-handout-student.pdfとして配置します。

  • ファイルの先頭にLaTeXの行を追加して(フラグを設定する)handout.texをPDFにコンパイルし、出力ディレクトリweek01 -handout-teacher.pdfとして配置します

  • すべてをクリーンアップします (ログ、aux などのファイル)

基本的な Makefile/bash スクリプトをすべてのサブディレクトリに手動で複製し、それぞれを for ループで 1 つずつ呼び出す以外の方法でこれを行う方法を知っているかどうかはわかりません。

理想的には、ルート ディレクトリに単一の Makefile を使用して、このプロセスを構築する方法について助けていただければ幸いです。ありがとう。

更新:誰かが私の現在の使用法よりも良い提案を持っている場合に備えて、意図的に LaTeX のコンパイル方法について詳細を提供したくありませんでした。今私はLatexmkを使用しています(これはすでにLaTeXのmakeのようなラッパーです):

  • latexmk -pdf file.texは file.pdfを生成します
  • コード行を追加するには、単純な echo "line of code" > temp.tex と cat handout.tex >> temp.tex を実行し、次に同じ latexmk コマンドを実行します
  • ディレクトリ内のlatexmk -c file.texは、file.texのコンパイルに使用されたすべての一時ファイルを消去します。
  • TEXINPUTS は TeX パス変数で、TeX が (そのパスで) スタイル ファイルを見つけられるようにします。 TEXINPUTS=full-path-to/common を実行し、何かをコンパイルする前に TEXINPUTS をエクスポートします。

誰かより良い提案があれば、私は喜んで引き受けます。

4

2 に答える 2

1

このようなものは、私が信じていることをするはずです:

OUTDIR := output

# Tell make to export this environment variable to all recipe lines it runs.
export TEXINPUTS := $(abspath common)

# Get the list of all of our week directories.
weekdirs := $(wildcard week*)
#$(info weekdirs:$(weekdirs))

# Create student output filenames from week directory names.
STUDENT_HANDOUTS := $(patsubst %,$(OUTDIR)/%-handout-student.pdf,$(weekdirs))
#$(info STUDENT_HANDOUTS:$(STUDENT_HANDOUTS))

# Create teacher output filenames from week directory names.
TEACHER_HANDOUTS := $(patsubst %,$(OUTDIR)/%-handout-teacher.pdf,$(weekdirs))
#$(info TEACHER_HANDOUTS:$(TEACHER_HANDOUTS))

# Default target depends on all output files.
all: $(STUDENT_HANDOUTS) $(TEACHER_HANDOUTS)

# Pattern rule for building pdf files.
%.pdf:
        @echo + Making $@ from $^
        @echo cd $(@D) && echo latexmx -pdf $(abspath $<)
        @echo cd $(@D) && echo latexmk -c $(abspath $<)

# Static pattern rule mapping student output files to input files.
$(STUDENT_HANDOUTS) : $(OUTDIR)/%-handout-student.pdf : %/handout.tex

# Pattern rule to generate temporary input files from original input files.
%/handout-tmp.tex: %/handout.tex
        @echo echo 'line of code' '>' $@
        @echo cat $^ '>>' $@

# Static pattern rule mapping teacher output files to (temporary) input files.
$(TEACHER_HANDOUTS) : $(OUTDIR)/%-handout-teacher.pdf : %/handout-tmp.tex

行のコメントを外して$(info)、変数がどのようにまとめられているかを少し確認します。

これはlatexmk -c、出力ファイルの作成後に補助ファイルをクリーンアップするために使用します。

于 2014-10-01T16:19:40.010 に答える