首页 > 解决方案 > 在makefile中使用pdfcrop遍历pdf文件并分配依赖项

问题描述

我可以在我的 makefile 中迭代 pdf 文件(图片)以裁剪边距。为此,我在 Windows 10 上使用 TexLive 的 pdfcrop 功能。但现在我无法创建依赖项。如果 pdf 文件未裁剪或我的图片文件夹中有未裁剪的新 pdf 文件,pdfcrop 将裁剪边距并将其以相同的名称保存在同一文件夹中(因此实际上覆盖旧的 pdf 文件)。我认为这可能很容易,但我只是不知道如何做到这一点。这是我在makefile中的代码。

MAIN_FILE = Dissertation
FIG_DIR  = ./Bilder/Abbildungen
FIG_FILES  := $(wildcard $(FIG_DIR)/*.pdf)

all: $(MAIN_FILE).pdf

$(MAIN_FILE).pdf: $(MAIN_FILE).tex $(CROP_FILES)
    pdflatex $(MAIN_FILE).tex

CROP_FILES = ${FIG_FILES:%=%.crop}

$(CROP_FILES): $(FIG_FILES) # this line doesn't seem work correctly
    $(foreach FIG_FILE, $(FIG_FILES), $(call CROP, $(FIG_FILE)))

define CROP
    pdfcrop $(1) $(1).crop

endef

标签: makefilelatexcropgnu

解决方案


替代解决方案,它将(希望)检查每个 PDF 文件的时间戳,并仅在更新/新文件上激活 CROP。

裁剪后的文件保留相同的文件名。如果'.crop'文件的时间戳比'pdf'文件更新,则意味着文件被裁剪,否则,PDF文件将被裁剪,并且'.crop'文件将被触摸。

MAIN_FILE = Dissertation
FIG_DIR  = ./Bilder/Abbildungen
FIG_FILES  := $(wildcard $(FIG_DIR)/*.pdf)

all: $(MAIN_FILE).pdf

    # The '.crop' timestamp capture the time the file was cropped
CROP_FILES=${FIG_FILES:%=%.crop}

%.crop: %
        pdfcrop $< $<
        touch $@

$(MAIN_FILE).pdf: $(MAIN_FILE).tex $(CROP_FILES)
        pdflatex $(MAIN_FILE).tex

修改以将“裁剪”文件放置到时间戳文件夹

TS_DIR=ts
CROP_FILES = ${FIG_FILES:${FIG_DIR}/%=${TS_DIR}/%.crop}

${TS_DIR}/%.crop: ${FIG_DIR}/%
        @mkdir -p ${TS_DIR}
        pdfcrop $< $<
        touch $@

建议进行更多测试,因为逻辑更复杂。'%.crop' 目标被替换为在 ${TS_DIR} 处生成它们的规则


推荐阅读