我正在尝试使用 LaTeX 来记录讲座笔记,但无法按照我想要的方式实现。对于每堂讲座,我都可以访问一个包含演示幻灯片的 PDF 文件,其中一张幻灯片对应一页。我希望能够导入这些幻灯片并将它们放在文档页面的顶部,然后在下面显示与该幻灯片相关的文字。在讲座期间,我会写一些类似的东西\slide{23}{Example text}
,让“示例文本”显示在幻灯片 23 下方。我不会为每张幻灯片写东西,所以它们需要添加到每页的顶部,而我不需要写,\slide{24}{}
例如,如果我对幻灯片 24 没有什么要说的。
我是 LaTeX 的新手,所以我不知道从哪里开始做这样的事情,如果能提供一些建议或有用的链接,我将不胜感激。我的总体思路是这样的:
获取要导入的 pdf 文件的页数
\pdfximage{lecture_slides.pdf}
\the\pdflastximagepages
注意:我将使用pdflatex
,因此这应该可行。
定义一个以数字和字符串作为强制参数的命令\slide{}{}
。该数字保存在一个列表中,该列表包含已添加文本的所有幻灯片的编号。
定义一个命令\importslides{path}
,计算 pdf 文件的页数(如上所述),然后使用 导入幻灯片\includegraphics[page number]{path}
。据推测,我会为此使用从 1 到文件中的页数的 for 循环。对于每一页,命令都必须检查带有文本的幻灯片列表,如果列表中存在该特定幻灯片,则在页面下方添加与其关联的字符串。
这是解决这个问题的好方法吗?有人对如何进行有什么建议吗?或者我可以在哪里找到有关如何在 LaTeX 中进行此类编程的信息?
答案1
更新改进版本(旧版本在最后)
间距等无法直接自动化。每个幻灯片文件都需要进行一些手动调整。
\documentclass[a5paper]{article}
\usepackage{pdfpages}
\usepackage{pgffor}
\usepackage{xparse}
\usepackage{blindtext}
\newlength\slidetextdistance
\setlength{\slidetextdistance}{0.48\textheight}
\NewDocumentCommand{\mypagecommand}{+m}{%
\vspace*{\slidetextdistance}
#1
}
\newtoks\localtok% To grab the possible `\par` in the third argument.
\NewDocumentCommand{\importsheet}{O{}m+o}{%
\IfFileExists{#2.pdf}{%
\IfValueTF{#3}{%
\localtok={#3}
\includepdf[offset=0 0.4\textheight,frame,column,pagecommand={\mypagecommand{\the\localtok}},scale=0.9,#1]{#2.pdf}
\localtok={}
}{%
\includepdf[offset=0 0.4\textheight,frame,scale=0.9,#1]{#2.pdf}
}%
}{%
Sorry, not available
}%
}
\newcommand{\myslidetext}[1]{\noindent\textbf{Slide #1}\par \blindtext}
\begin{document}
\pagestyle{empty}
% Use some in a loop, just for demonstration
\foreach \x in {1,...,10} {%
\importsheet[pages=\x]{gravitation_slides}[\noindent\textbf{Slide \x}\par \blindtext]
}
% Import some special one, without comments
\importsheet[pages=15]{gravitation_slides} % No slide text
\end{document}
这是一个例子,并不完美,特别是我目前不知道如何计算外部文件中的幻灯片数量。
\documentclass[a4paper]{article}
\usepackage[lmargin=1.5cm,rmargin=1.5cm,tmargin=1.5cm,bottom=1.5cm]{geometry}
\usepackage{pdfpages}
\usepackage{pgffor}
\usepackage{xparse}
\usepackage{blindtext}
\newcommand{\mypagecommand}[1]{%
\vspace*{0.9\textheight}
#1
}
\NewDocumentCommand{\importsheet}{O{}m+o}{%
\IfFileExists{#2.pdf}{%
\IfValueTF{#3}{%
\includepdf[frame,column,pagecommand={\mypagecommand{#3}},noautoscale=true,scale=0.9,#1]{#2.pdf}
}{%
\includepdf[noautoscale=true,scale=0.9,#1]{#2.pdf}
}%
}{%
Sorry, not available
}%
}
\begin{document}
\foreach \x in {1,...,10} {%
\importsheet[pages=\x]{mysource}[Slide \x \blindtext]
}
\end{document}