75 lines
2.0 KiB
Bash
75 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# LaTeX Docker Builder Entrypoint
|
|
# Unterstützt Befehle:
|
|
# build [datei.tex] (Standard: baut seminararbeit.tex oder main.tex)
|
|
# clean (Führt latexmk -C aus)
|
|
# watch [datei.tex] (Kontinuierlicher Rebuild mit latexmk -pvc)
|
|
# Beliebiger Befehl (z.B. latexmk -pdf ...)
|
|
|
|
resolve_target() {
|
|
# 1. Wenn explizit als Argument übergeben
|
|
if [ -n "$1" ]; then
|
|
echo "$1"
|
|
return
|
|
fi
|
|
|
|
# 2. Bekannte typische Hauptdateinamen prüfen
|
|
for name in seminararbeit.tex main.tex thesis.tex bachelorarbeit.tex masterarbeit.tex arbeit.tex document.tex index.tex; do
|
|
if [ -f "$name" ]; then
|
|
echo "$name"
|
|
return
|
|
fi
|
|
done
|
|
|
|
# 3. Automatische Suche nach einer .tex-Datei mit \documentclass im Verzeichnis
|
|
candidates=$(grep -l "\\\\documentclass" *.tex 2>/dev/null || true)
|
|
count=$(echo "$candidates" | grep -v '^$' | wc -l)
|
|
if [ "$count" -eq 1 ]; then
|
|
echo "$candidates"
|
|
return
|
|
fi
|
|
|
|
# Fallback: latexmk entscheidet selbst anhand von .latexmkrc oder allen tex-Dateien
|
|
echo ""
|
|
}
|
|
|
|
COMMAND="${1:-build}"
|
|
|
|
case "$COMMAND" in
|
|
build)
|
|
shift || true
|
|
TARGET=$(resolve_target "$1")
|
|
echo "==> Starte LaTeX Build..."
|
|
if [ -n "$TARGET" ]; then
|
|
echo "==> Kompiliere: $TARGET"
|
|
exec latexmk -pdf "$TARGET"
|
|
else
|
|
echo "==> Keine Hauptdatei angegeben, führe latexmk -pdf aus..."
|
|
exec latexmk -pdf
|
|
fi
|
|
;;
|
|
|
|
clean)
|
|
shift || true
|
|
echo "==> Bereinige Ausgabedateien (latexmk -C)..."
|
|
exec latexmk -C "$@"
|
|
;;
|
|
|
|
watch)
|
|
shift || true
|
|
TARGET=$(resolve_target "$1")
|
|
echo "==> Starte kontinuierlichen Watch-Modus (latexmk -pvc -view=none)..."
|
|
if [ -n "$TARGET" ]; then
|
|
exec latexmk -pvc -view=none -e '$sleep_time=1;' -pdf "$TARGET"
|
|
else
|
|
exec latexmk -pvc -view=none -e '$sleep_time=1;' -pdf
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
exec "$@"
|
|
;;
|
|
esac
|