makefile - 在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
解决方案
替代解决方案,它将(希望)检查每个 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} 处生成它们的规则
推荐阅读
- javascript - 如何将外部 html 文件导入 React 应用程序?
- javascript - Jquery如何检查所有输入是否有值
- javascript - 页面仅在手动刷新后显示(React)
- ssl-certificate - 为 apache2 服务器购买了 .dev 域,但连接时出现认证错误
- php - 无法使用codeigniter在表格中显示图像
- php - CSRF 令牌不匹配 laravel 气闸 axios
- java - SQL Delete 语句中的多个条件
- flutter - Flutter Provider 问题 - 更改未反映
- mapbox - 带有西里尔街道名称的 Mapbox 地理编码
- ssis - SSIS 包错误“无法更新。数据库或对象是只读的。” 对于 Excel 目标