|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
#!/bin/bash
# This file:
# http://anggtwu.net/MAXIMA/mkanim1.sh.html
# http://anggtwu.net/MAXIMA/mkanim1.sh
# (find-angg "MAXIMA/mkanim1.sh")
# Author: Eduardo Ochs <eduardoochs@gmail.com>
# Version: 2024oct15
# Public domain.
#
#
# Introduction
# ============
# "mkanim1.sh" is a shell library to produce animated gifs.
# This file is a friend of:
# (find-angg "MAXIMA/topdf1.mac")
#
# In short: topdf1.mac is a library to produce animations in Maxima,
# but it only produces frames, each one as a separate PDF; then we can
# use the function "makeflipbook" in this file to produce a multipage
# PDF that works as a flipbook, and the function "makeanim" to convert
# the multipage PDF to an animated gif.
#
# I usually call just "makeboth" to produce the flipbook in PDF first,
# and then the animated git. For example:
#
# mkanim1.sh makeboth anim.gif flipbook.pdf 001.pdf 002.pdf
#
#
# The internals
# =============
# When we run mkanim1.sh like above it defines some variables and shell
# functions - see the code below - and then runs this:
#
# eval "makeboth anim.gif flipbook.pdf 001.pdf 002.pdf"
#
# We can make mkanim1.sh run more verbosely, or make it do a dry run,
# by using parameter assignments. For example:
#
# mkanim1.sh ECHO=echo makeboth anim.gif flipbook.pdf 001.pdf 002.pdf
#
# "ECHO=echo" echoes some commands instead of running them;
# "ECHO=echo_and_run" echoes these commands and then runs them.
# See the test block at the end of this file for the details.
# For an example that works on real PDFs and gifs, see:
#
# (find-angg "MAXIMA/topdf1.mac" "quick-demo")
#
#
# Etc
# ===
# See:
# (find-bashnode "Environment" "parameter assignments")
# (find-bashnode "Shell Parameter Expansion" "${@:7}")
# (find-bashnode "Shell Parameter Expansion" "${PARAMETER:+WORD}")
# (find-git-intro "1. Preparation")
# (find-git-intro "1. Preparation" "wget" "GIT/eevgitlib1.sh")
# (find-git-intro "2. A first test")
# (find-git-intro "2. A first test" "/tmp/eevgitlib1.sh")
# (find-es "imagemagick" "pdf-to-animated-gif")
# (find-es "ps" "qpdf")
# (find-es "ps" "qpdf-merge")
# (find-es "ps" "glue-pages")
# «.variables» (to "variables")
# «.functions» (to "functions")
# «.eval» (to "eval")
# «.tests» (to "tests")
# «variables» (to ".variables")
ECHO=""
DELAY=50
DENSITY=200
VERBOSE=""
IGOPTIONS="height=5cm"
GEOMETRY="a5paper,landscape"
# «functions» (to ".functions")
echo_and_run () { echo $*; $*; }
cdr () { echo ${@:2}; }
add_1zs () { for i in $*; do echo $i 1-z; done; }
makeboth () { $ECHO makeflipbook $(cdr $*); $ECHO makeanim $1 $2; }
makeflipbook () { $ECHO qpdf --empty --pages $(add_1zs $(cdr $*)) -- $1; }
makeanim () {
$ECHO convert -alpha deactivate ${VERBOSE:+-verbose} \
-delay $DELAY -loop 0 -density $DENSITY $2 $1
}
includegraphics0 () { echo "\\includegraphics[$IGOPTIONS]{$1}"; }
includegraphics1 () { echo "\\newline"; echo "\$$(includegraphics0 $1)\$"; }
includegraphics () { for i in $*; do includegraphics1 $i; done; }
includegraphics_fulltex () {
echo "\\documentclass[oneside]{article}"
echo "\\usepackage{graphicx}"
echo "\\usepackage[$GEOMETRY]{geometry}"
echo "\\begin{document}"
includegraphics $*
echo "\\end{document}"
}
# «eval» (to ".eval")
eval "$*"
# «tests» (to ".tests")
: <<'%%%%%'
* (eepitch-bash)
* (eepitch-kill)
* (eepitch-bash)
. ./mkanim1.sh
cdr a b c d
add_1zs b c d
ECHO=echo makeflipbook flipbook.pdf 001.pdf 002.pdf
ECHO=echo makeanim anim.gif flipbook.pdf
ECHO=echo VERBOSE=1 makeanim anim.gif flipbook.pdf
ECHO=echo DENSITY=100 makeanim anim.gif flipbook.pdf
ECHO=echo DENSITY=100 makeboth anim.gif flipbook.pdf 001.pdf 002.pdf
includegraphics0 001.pdf
includegraphics1 001.pdf
includegraphics 001.pdf 002.pdf
includegraphics_fulltex 001.pdf 002.pdf
%%%%%
# Local Variables:
# coding: utf-8-unix
# End: