我有一个由存储在以下组织的目录中的多个 *.tex 文件构成的文档:
-2022
-07
-01
-note.tex
-file1.pdf
-differentfilename.pdf
-02
-note.tex
-05
-note.tex
-somefile.pdf
-anotherfile.pdf
etc.
我的“主” LaTeX 文档循环遍历所有日期文件夹并将 note.tex 包含在文档中。如果某一天有各种 pdf 文件,我想将它们作为链接包含在系统阅读器中打开。有没有办法让 LaTeX 循环遍历文件结构并根据需要包含 pdf?我的 MWE 尝试如下:
% !TEX options=--shell-escape
\documentclass{article}
\usepackage[letterpaper,margin=1.25in,top=1in,bottom=1in]{geometry}
\usepackage{pgfcalendar}
\let\d=\pgfcalendarshorthand
\newcommand\formatdate[2]{\pgfcalendar{cal}{#1}{#1}{#2}}
\newcommand\firstdate{2022-07-01}
\newcommand\lastdate{\year-\month-\day}
\begin{document}
\pgfcalendar{cal}{\firstdate}{\lastdate}{%
\def\formatteddate{\d{y}0/\d{m}0/\d{d}0}%
\graphicspath{ {./\formatteddate/}}
\IfFileExists{./\formatteddate/note.tex}{
\marginpar{\vspace*{1em}\textsf{ \d m. \d d- \d y- }}%
\vspace*{1.5em}
\addcontentsline{toc}{section}{\d mt \d d0, \d y0}%
\input{./\formatteddate/note.tex}
\begin{flushright}
HERE IS WHERE I'D LIKE SOME COMMAND THAT CAN FIND ANY PDFS IN THE DAY'S FOLDER AND INCLUDE A LINK TO THEM IF POSSIBLE.
\end{flushright}
}{}
}
\end{document}
我想如果文件名遵循某种惯例,那么做到这一点相当容易,但就我而言,它们没有,所以我想通过 .pdf 扩展名来识别它们并包含指向任何此类文件的链接。谢谢!
答案1
为了使我的 shell 脚本建议精确:在父目录中工作2022
。
- 创建一个包含所有前言材料(最多)的
.tex
文件(例如)。preamble.tex
\begin{document}
- 创建以下内容
buildscript.sh
(未经测试;可能有拼写错误)
#!/bin/bash
cat preamble.tex > main.tex
for filedate in */*/*
do
### Insert lines here such us your margin par and ToC commands
echo "\input{./${filedate}/notes.tex}" >> main.tex
if compgen -G $filedate/*.pdf >/dev/null; then
for pdffile in $filedate/*pdf
do
### Change this line to format it or whatever
echo "\href{run:./${pdffile}}" >> main.tex
done
fi
done
echo "\end{document}" >> main.tex
latexmk main.tex
如果您运行buildscript.sh
它,则应该首先为每个日期输入相应的日期notes.tex
,然后创建一个指向该目录中每个 pdf 文件的超链接(确保hyperref
在您的序言中加载)。创建 TeX 文件后,它将为您构建它。
快速解释:
- 上述脚本假设目录结构为年/月/日,如您所指示。
- 它假设每天都会有一个
notes.tex
;如果你愿意,你可以添加一个存在检查。 - 它不假设有任何 PDF 文件。该
compgen -G
命令是一个bash
特定的内置命令(因此#!/bin/bash
),如果 glob 模式具有非零匹配,则返回 true。因此,如果目录中没有 PDF 文件,则不会创建超链接。