Я написал следующий скрипт shell
, чтобы решить эту проблему для слайдов в стиле LaTeX
beamer
, созданных с помощью inkscape
(I pdftk cat
слайды вместе в окончательную презентацию PDF
, а затем добавьте номера слайдов, используя скрипт ниже):
#!/bin/sh
# create working directory
tmpdir=$(mktemp --directory)
# read un-numbered beamer slides PDF from STDIN & create temporary copy
cat > $tmpdir/input.pdf
# get total number of pages
pagenum=$(pdftk $tmpdir/input.pdf dump_data | awk '/NumberOfPages/{print $NF}')
# generate latex beamer document with the desired number of empty but numbered slides
printf '%s' '
\documentclass{beamer}
\usenavigationsymbolstemplate{}
\setbeamertemplate{footline}[frame number]
\usepackage{forloop}
\begin{document}
\newcounter{thepage}
\forloop{thepage}{0}{\value{thepage} < '$pagenum'}{
\begin{frame}
\end{frame}
}
\end{document}
' > $tmpdir/numbers.tex
# compile latex file into PDF (2nd run needed for total number of pages) & redirect output to STDERR
pdflatex -output-directory=$tmpdir numbers.tex >&2 && pdflatex -output-directory=$tmpdir numbers.tex >&2
# add empty numbered PDF slides as background to (transparent background) input slides (page by
# page) & write results to STDOUT
pdftk $tmpdir/input.pdf multibackground $tmpdir/numbers.pdf output -
# remove temporary working directory with all intermediate files
rm -r $tmpdir >&2
Сценарий читает STDIN
и записывает STDOUT
печать диагностики pdflatex
вывод на STDERR
.
Так что просто скопируйте и вставьте приведенный выше код в текстовый файл, скажем enumerate_slides.sh
, сделайте его исполняемым (chmod +x enumerate_slides.sh
) и назовите его так:
./enumerate_slides.sh < input.pdf > output.pdf [2>/dev/null]
Должно быть легко настроить это для любого другого типа документа, настроив шаблон LaTeX
для использования правильных documentclass
, формата и стиля бумаги.
редактирование:
Я заменил echo
на $(which echo)
, поскольку в ubuntu
символические ссылки /bin/sh
на dash
, которые переопределяют команду echo
внутренней интерпретацией escape-последовательностей оболочки по умолчанию, и не предоставляют параметр -E
для переопределения этого поведения , Обратите внимание, что в качестве альтернативы вы можете экранировать все \
в шаблоне LaTeX как \\
.
редактирование:
Я заменил $(which echo)
на printf '%s'
, поскольку в zsh
, which echo
возвращает echo: shell built-in command
вместо /bin/echo
.
См. этот вопрос , чтобы узнать, почему я решил использовать printf
в конце.