summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/pgfplots/pgf2pdf.sh
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/scripts/pgfplots/pgf2pdf.sh')
-rwxr-xr-xMaster/texmf-dist/scripts/pgfplots/pgf2pdf.sh282
1 files changed, 282 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/pgfplots/pgf2pdf.sh b/Master/texmf-dist/scripts/pgfplots/pgf2pdf.sh
new file mode 100755
index 00000000000..027a6157b77
--- /dev/null
+++ b/Master/texmf-dist/scripts/pgfplots/pgf2pdf.sh
@@ -0,0 +1,282 @@
+#!/bin/sh
+
+TEX_FILE=""
+TEX_LOG_FILE=""
+
+TEX_DEFINES=""
+
+OLD_DIR=`pwd`
+
+DRIVER="pdftex"
+
+ALSO_EPS_OUTPUT=0
+WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET=0
+VERBOSE_LEVEL=0
+
+function dumpHelp() {
+ echo -e \
+ "`basename $0` [OPTIONS] [--texdefs <defsfile> | --mainfile <latexmainfile>.tex ] [plot1.pgf plot2.pgf .... plotn.pgf]\n"\
+ "converts each plot*.pgf to plot*.pdf.\n"\
+ "This is done by running \n"\
+ " latex --jobname plot1 latexmainfile\n"\
+ "for each single plot. See the pgfmanual section \"Externalizing graphics\".\n"\
+ "Options:\n"\
+ "--eps\n"\
+ " will also produce eps output files.\n"\
+ "--driver D\n"\
+ " will use either \"dvipdfm\", \"dvips\" or \"pdflatex\"\n"\
+ " please note that only pdflatex works without additional\n"\
+ " work.\n"\
+ "--mainfile FILE\n"\
+ " A tex-file which has been configured for externalized graphics.\n"\
+ " Two conditions must be met to perform the conversion of\n"\
+ " \"plot.pgf\" -> \"plot.pdf\":\n"\
+ " 1. FILE needs the command\n"\
+ " \pgfrealjobname{FILE}\n"\
+ " (see the pgf manual for details)\n"\
+ " 2. It needs to include \"plot.pgf\" somewhere (using \input{plot.pgf})\n"\
+ "\n"\
+ "--warnonly\n"\
+ " Use this flag if the argument of --mainfile does not contain\n"\
+ " \input{TARGET.pgf},\n"\
+ " i.e. if (2.) is not fulfilled. In this case, the conversion for this\n"\
+ " input file will be skipped.\n"\
+ "\n"\
+ "--texdefs FILE\n"\
+ " Generates a temporary tex-file\n"\
+ " \documentclass{article}\n"\
+ " \input{FILE}\n"\
+ " \begin{document}\n"\
+ " \input{plot1.pgf}\n"\
+ " \end{document}\n"\
+ " and converts this one to pdf.\n"\
+ " If FILE is '-', the input step is omitted.\n"
+ "-v\n"\
+ " each -v option increases the verbosity.\n"\
+ ""
+ exit 0;
+}
+
+
+LONGOPTS="mainfile:,eps,driver:,texdefs:,warnonly"
+SHORTOPTS="f:t:v"
+ARGS=`getopt -l "$LONGOPTS" "$SHORTOPTS" "$@"`
+if [ $? -ne 0 ]; then
+ echo "`basename $0`: Could not process command line arguments. Use the '--help' option for documentation."
+ exit 1
+fi
+
+eval set -- "$ARGS"
+while [ $# -gt 0 ]; do
+ ARG=$1
+ # echo "PROCESSING OPTION '$ARG' (next = $@)"
+ case "$ARG" in
+ --texdefs|-t) shift; TEX_DEFINES="$1"; shift;;
+ --driver) shift; DRIVER="$1"; shift;;
+ --mainfile|-f) shift; TEX_FILE="$1"; TEX_LOG_FILE="${1%%.tex}.log"; shift;;
+ --eps) shift; ALSO_EPS_OUTPUT=1;;
+ --warnonly) shift; WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET=1;;
+ -v) shift; VERBOSE_LEVEL=$((VERBOSE_LEVEL+1));;
+ --) shift; break;;
+ *) break;
+ esac
+done
+if [ -n "${TEX_DEFINES}" ]; then
+ if [ "${TEX_DEFINES:0:1}" != "/" ]; then
+ TEX_DEFINES=`pwd`/${TEX_DEFINES}
+ fi
+fi
+
+
+if [ $# -ne 0 ]; then
+ PGF_FILES=("$@")
+elif [ -n "${TEX_LOG_FILE}" ]; then
+ # search for lines with
+ # (XXXX.pgf
+ PGF_FILES=(`sed -n '{s/.*(\([a-zA-Z0-9._-+^~]\+\.pgf\).*/\1/g;T ende;p};: ende' < $TEX_LOG_FILE`)
+ #PGF_FILES=(./errplot_L2.pgf)
+else
+ echo "No input files." 1>&2
+ exit 1
+fi
+
+for A in "${PGF_FILES[@]}"; do
+ if [ ! -f "$A" ]; then
+ echo "$A not found: no such file" 1>&2
+ exit 1
+ fi
+
+ CONTINUE_ON_ERROR=0
+
+ TARGET_FILE=$(sed -n '{s/.*\\beginpgfgraphicnamed{\(.*\)}.*/\1/g;T ende;p};: ende' < "$A")
+ if [ $? -ne 0 -o -z "$TARGET_FILE" ]; then
+ echo "There is no valid \\beginpgfgraphicnamed{TARGET}...\\endpgfgraphicnamed command in $A. Can't be exported to pdf. Please see the PGF manual for details." 1>&2
+ exit 1
+ fi
+ echo "processing \"$A\"" 1>&2
+
+ CMD="latex"
+ case $DRIVER in
+ pdftex|pdflatex)
+ CMD="pdflatex"
+ ;;
+ esac
+
+ if [ -z "${TEX_DEFINES}" ]; then
+ # LaTeX cannot write into a \jobname in another directory.
+ # But the TEX_FILE and $A may not necessarily be in the same directory!
+ #
+ # So, we have to build a work-around which simulates a \jobname in the directory of TEX_FILE
+ # which does not fool \beginpgfgraphicnamed
+
+ # modify the input file A:
+ ORIGINAL_FILE="$A.orig"
+ mv "$A" "$ORIGINAL_FILE" || exit 1
+ cat - "$ORIGINAL_FILE" >"$A" <<-EOF
+ \let\tmpXXXXXZEUGoldjobname=\jobname
+ \def\jobname{${TARGET_FILE}}%
+ \message{PGF2PDF: TEX HAS ENTERED THE TARGET FILE...}%
+ EOF
+ cat >> "$A" <<-EOF
+ \let\jobname=\tmpXXXXXZEUGoldjobname
+ EOF
+
+ cd `dirname "${TEX_FILE}"`
+
+ # generate a temp \jobname in the current directory:
+ TMP_JOB_FILE=`mktemp ./tmppgf2pdfXXXXXX`
+ if [ $? -ne 0 ]; then exit 1; fi
+ rm -f "$TMP_JOB_FILE"
+
+ $CMD --interaction nonstopmode --jobname "$TMP_JOB_FILE" "${TEX_FILE}" 1>/dev/null
+ CODE=$?
+
+ INTERM_EXTENSION="dvi"
+ case $DRIVER in
+ pdftex|pdflatex)
+ INTERM_EXTENSION="pdf"
+ ;;
+ dvipdfm)
+ INTERM_EXTENSION="dvi"
+ ;;
+ dvips)
+ INTERM_EXTENSION="dvi"
+ ;;
+ esac
+ if [ ! -s "$TMP_JOB_FILE.$INTERM_EXTENSION" ]; then
+ if [ $VERBOSE_LEVEL -ge 1 ]; then
+ if [ $WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET -eq 1 ]; then
+ echo -n "WARNING: ";
+ else
+ echo -n "ERROR: ";
+ fi
+ echo -e "running\n"\
+ " '$CMD --jobname $TMP_JOB_FILE $TEX_FILE'\n"\
+ "resulted in a zero-size file \"$TMP_JOB_FILE.$INTERM_EXTENSION\"!\n"\
+ "Please check\n"\
+ "- if $TEX_FILE contains\n"\
+ " \pgfrealjobname{`basename ${TEX_FILE%%.tex}`}\n"\
+ "- if $TEX_FILE contains\n"\
+ " \input{$A}\n"\
+ "\n"\
+ "You may take a look at\n\t$TARGET_FILE.log\n for more information.\n"\
+ "Maybe `basename $0` --texdefs is more appropriate for this application?\n"\
+ "It doesn't need \input{}...\n"\
+ 1>&2
+ fi
+
+ CODE=1
+ if [ $WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET -eq 1 ]; then
+ CONTINUE_ON_ERROR=1
+ fi
+ rm -f $TMP_JOB_FILE.{$INTERM_EXTENSION,pdf}
+ fi
+
+
+ # FIXME: this here may clash if A and TARGET_FILE have inconsistent paths!
+ mv "$ORIGINAL_FILE" "$A" || exit 1
+ for QQ in $TMP_JOB_FILE.*; do
+ if [ "$TARGET_FILE.${QQ##*.}" != "$A" ]; then
+ mv "$QQ" "$TARGET_FILE.${QQ##*.}" || exit 1
+ fi
+ done
+
+ cd "$OLD_DIR"
+ else
+ # Die Idee hier ist wie folgt:
+ # - Erstelle ein fast leeres Tex-File
+ # - darin steht NUR
+ # \input $TEX_DEFINES
+ # und
+ # \input $A
+ # - das TeX-file wird mit pgflatex uebersetzt
+ # - die ausgabe wird nach $TARGET_FILE geschrieben
+ # - fertig.
+ #
+ # BUGS:
+ # - TARGET_FILE != A wird nicht funktionieren (nur die endungen natuerlich)
+ DRIVER="pdftex"
+ cd `dirname "$A"`
+ BASE=`basename $TARGET_FILE`
+ TMP_TEX_FILE=`mktemp tmp_${BASE}_XXXXXX`
+ mv "$TMP_TEX_FILE" "${TMP_TEX_FILE}.tex"
+ TMP_TEX_FILE="$TMP_TEX_FILE.tex"
+ rm -f "${BASE}.pdf"
+
+ cat >"$TMP_TEX_FILE" <<-EOF
+ \documentclass{report}
+
+ \input{${TEX_DEFINES}}
+
+ %\def\pgfsysdriver{pgfsys-dvipdfm.def}
+ %\def\pgfsysdriver{pgfsys-pdftex.def}
+ \usepackage{tikz}
+ \pgfrealjobname{${TMP_TEX_FILE%%.tex}}
+ \begin{document}
+ \let\oldjobname=\jobname%
+ % make sure that PGF recognises that jobname==target file name
+ % even if --jobname has a different path.
+ \def\jobname{${TARGET_FILE}}%
+ \input{`basename $A`}%
+ \let\jobname=\oldjobname
+ \end{document}
+ EOF
+ $CMD --interaction nonstopmode --jobname "$BASE" "${TMP_TEX_FILE}" 1>/dev/null
+ CODE=$?
+ if [ $CODE -eq 0 ]; then
+ rm -f "$TMP_TEX_FILE"
+ fi
+ cd $OLD_DIR
+ fi
+
+ if [ $CODE -ne 0 ]; then
+ rm -f "${TARGET_FILE}.pdf"
+ if [ $CONTINUE_ON_ERROR -eq 1 ]; then
+ echo "WARNING: $A SKIPPED [use -v for messages]." 1>&2
+ CODE=0
+ continue
+ else
+ echo -e "FAILED: could not convert\n\t$A\n->\t$TARGET_FILE.pdf" 1>&2;
+ exit 1;
+ fi
+ fi
+ CMD=""
+ case $DRIVER in
+ dvipdfm)
+ dvipdfm -o ${TARGET_FILE}.pdf "${TARGET_FILE}.dvi" || exit 1
+ pdfcrop "${TARGET_FILE}.pdf" "${TARGET_FILE}.pdf" || exit 1
+ ;;
+ dvips)
+ dvipdfm -o ${TARGET_FILE}.ps "${TARGET_FILE}.dvi" || exit 1
+ ;;
+ esac
+
+ if [ $ALSO_EPS_OUTPUT -eq 1 ]; then
+ pdftops -f 1 -l 1 -eps "${TARGET_FILE}.pdf" "${TARGET_FILE}.eps"
+ if [ $? -ne 0 ]; then
+ echo "Conversion pdf -> eps FAILED!" 1>&2
+ exit 1
+ fi
+ fi
+done
+cd $OLD_DIR