#!/bin/bash set -e # Bricht bei echten Fehlern sofort ab # Sicherer Ersatz für 'which' TLMGR=$(command -v tlmgr || true) TEXHASH=$(command -v texhash || true) # Falls tlmgr gar nicht existiert, sofort abbrechen if [ -z "$TLMGR" ]; then echo "Fehler: tlmgr wurde auf diesem System nicht gefunden!" >&2 exit 1 fi echo "=== Starte optimierte LaTeX-Konfiguration ===" # 1. Optionale Updates echo "Aktualisiere tlmgr und alle installierten Pakete..." $TLMGR update --self --all # 2. Nur deinstallieren, falls überhaupt vorhanden (Fehlertolerant bei set -e) echo "Überprüfe Altlasten..." if $TLMGR info texliveonfly 2>/dev/null | grep -q "installed:[[:space:]]*Yes"; then echo "Deinstalliere veraltetes texliveonfly..." $TLMGR remove texliveonfly else echo " -> texliveonfly ist nicht installiert (Überspringe Deinstallation)." fi # 3. ALLE Pakete gebündelt in EINEM Rutsch installieren echo "Installiere alle benötigten LaTeX-Pakete parallel/gebündelt..." $TLMGR install \ scheme-basic \ scheme-infraonly \ scheme-minimal \ collection-fontsrecommended \ collection-langgerman \ latexmk \ lastpage \ siunitx \ pgf \ datetime2 \ datetime2-english \ datetime2-german \ currfile \ filehook \ xstring \ enumitem \ fmtcount \ steinmetz \ pict2e \ pgfplots \ minted \ upquote \ lineno \ newunicodechar \ marginnote \ pdfpages \ cleveref \ pdflscape \ booktabs \ vmargin \ newtx \ xpatch \ fontaxes \ cancel \ microtype \ background \ everypage \ koma-script \ csquotes \ setspace \ biblatex \ biblatex-ieee \ ccicons \ ncctools \ xcharter \ titlesec \ fontspec \ parskip \ newpx \ trimspaces \ mathtools \ unicode-math \ stix2-otf \ cm-unicode \ concmath-otf \ fontmfizz \ fontawesome5 \ luatexbase \ circuitikz \ tcolorbox \ tikzfill \ pdfcol \ listings \ imakeidx \ ean13isbn \ ean \ ocr-b \ wrapfig \ subfigure \ sidecap \ ragged2e \ xltabular \ ltablex \ caption \ needspace # 4. Datenbank-Refresh if [ -n "$TEXHASH" ]; then echo "Aktualisiere LaTeX-Dateidatenbank..." $TEXHASH fi # 5. System-Abhängigkeiten prüfen und installieren (Biber & Ghostscript) echo "Überprüfe Linux-Systemkomponenten..." APT_PACKAGES="" INSTALLED_PACKAGES="" # Ermittle den verfügbaren Paketmanager PKG_MANAGER="unknown" if command -v apt-get >/dev/null 2>&1; then PKG_MANAGER="apt"; fi if command -v pacman >/dev/null 2>&1; then PKG_MANAGER="pacman"; fi # Weiche je nach Distro / Paketmanager case "$PKG_MANAGER" in "apt") echo " -> Debian-basiertes System (apt) erkannt. Prüfe Paketabhängigkeiten..." # Biber-Prüfung if ! command -v biber >/dev/null 2>&1; then echo " -> biber fehlt und wird vorgemerkt." APT_PACKAGES="$APT_PACKAGES biber" else # Gefangen mit || true / Klammern, um Fehler bei Auslese unter set -e zu blockieren BIBER_VER=$((biber --version 2>/dev/null || echo "Version unbekannt") | head -n 1) echo " -> biber ist bereits installiert ($BIBER_VER)." INSTALLED_PACKAGES="$INSTALLED_PACKAGES biber" fi # Ghostscript-Prüfung if ! command -v gs >/dev/null 2>&1; then echo " -> ghostscript (gs) fehlt und wird vorgemerkt." APT_PACKAGES="$APT_PACKAGES ghostscript" else GS_VER=$(gs --version 2>/dev/null | head -n 1) echo " -> ghostscript (gs) ist bereits installiert ($GS_VER)." INSTALLED_PACKAGES="$INSTALLED_PACKAGES ghostscript" fi # Falls Pakete fehlen, gebündelt installieren if [ -n "$APT_PACKAGES" ]; then echo "Installiere fehlende Systemkomponenten:$APT_PACKAGES..." sudo apt-get update && sudo apt-get install -y $APT_PACKAGES else CLEAN_LIST=$(echo "$INSTALLED_PACKAGES" | sed 's/^[[:space:]]*//; s/[[:space:]]/, /g') echo " -> Alle notwendigen Systemkomponenten ($CLEAN_LIST) sind bereits installiert!" fi ;; "pacman") echo " -> Arch Linux (pacman) erkannt. Debian-Paketverwaltung wird übersprungen." echo " -> Stelle sicher, dass 'biber' und 'ghostscript' auf Ihrem Arch-System installiert sind." ;; *) echo " -> Unbekanntes System. Keine automatische Paketprüfung möglich. Fahre fort..." ;; esac echo "" echo "=== Speicherplatz-Optimierung ===" read -p "Möchtest du alle alten tlmgr-Paketbackups unwiderruflich löschen? (j/N): " response if [[ "$response" =~ ^[jJ][aA]?$ || "$response" = "j" ]]; then echo "Lösche alte Backups..." $TLMGR backup --clean=0 --all else echo "Backups wurden beibehalten." fi echo "=== Fertig! ==="