Loading...
No commits yet
Not committed History
Blame
compile_content.sh • 4.4 KB
#!/bin/bash
# -*- coding: utf-8 -*-
# Timestamp: 2026-02-08
# File: scripts/shell/compile_content.sh

################################################################################
# Content/preview LaTeX compilation
# Compiles a .tex file to PDF using latexmk (no bibliography processing)
################################################################################

set -e
set -o pipefail

# Defaults
TEX_FILE=""
OUTPUT_DIR=""
JOB_NAME="content"
COLOR_MODE="light"
PREVIEW_DIR=""
TIMEOUT=60
KEEP_AUX=false
QUIET=false

# Colors
GRAY='\033[0;90m'
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'

log_info() { [ "$QUIET" = true ] || echo -e "${GRAY}INFO: $1${NC}"; }
log_success() { echo -e "${GREEN}SUCC: $1${NC}"; }
log_error() { echo -e "${RED}ERRO: $1${NC}" >&2; }

show_usage() {
    cat <<EOF
Usage: compile_content.sh --tex-file PATH --output-dir PATH [OPTIONS]

Compile a LaTeX .tex file to PDF (content/preview mode, no bibliography).

REQUIRED:
    --tex-file PATH       Input .tex file to compile
    --output-dir PATH     Directory for output PDF

OPTIONS:
    --job-name NAME       latexmk job name (default: content)
    --color-mode MODE     light|dark (default: light)
    --preview-dir PATH    Copy PDF to this directory after compilation
    --timeout SECS        Compilation timeout (default: 60)
    --keep-aux            Keep auxiliary files (.aux, .log, etc.)
    -q, --quiet           Suppress output
    -h, --help            Show this help

EXAMPLES:
    compile_content.sh --tex-file /tmp/preview.tex --output-dir /tmp/out
    compile_content.sh --tex-file /tmp/preview.tex --output-dir /tmp/out --color-mode dark
    compile_content.sh --tex-file /tmp/preview.tex --output-dir /tmp/out --preview-dir ./project/.preview
EOF
}

# Parse arguments
while [ $# -gt 0 ]; do
    case $1 in
    --tex-file | --tex_file)
        TEX_FILE="$2"
        shift 2
        ;;
    --tex-file=* | --tex_file=*)
        TEX_FILE="${1#*=}"
        shift
        ;;
    --output-dir | --output_dir)
        OUTPUT_DIR="$2"
        shift 2
        ;;
    --output-dir=* | --output_dir=*)
        OUTPUT_DIR="${1#*=}"
        shift
        ;;
    --job-name | --job_name)
        JOB_NAME="$2"
        shift 2
        ;;
    --job-name=* | --job_name=*)
        JOB_NAME="${1#*=}"
        shift
        ;;
    --color-mode | --color_mode)
        COLOR_MODE="$2"
        shift 2
        ;;
    --color-mode=* | --color_mode=*)
        COLOR_MODE="${1#*=}"
        shift
        ;;
    --preview-dir | --preview_dir)
        PREVIEW_DIR="$2"
        shift 2
        ;;
    --preview-dir=* | --preview_dir=*)
        PREVIEW_DIR="${1#*=}"
        shift
        ;;
    --timeout)
        TIMEOUT="$2"
        shift 2
        ;;
    --timeout=*)
        TIMEOUT="${1#*=}"
        shift
        ;;
    --keep-aux | --keep_aux)
        KEEP_AUX=true
        shift
        ;;
    -q | --quiet)
        QUIET=true
        shift
        ;;
    -h | --help)
        show_usage
        exit 0
        ;;
    *)
        log_error "Unknown argument: $1"
        show_usage
        exit 1
        ;;
    esac
done

# Validate required arguments
if [ -z "$TEX_FILE" ]; then
    log_error "Missing required argument: --tex-file"
    exit 1
fi

if [ -z "$OUTPUT_DIR" ]; then
    log_error "Missing required argument: --output-dir"
    exit 1
fi

if [ ! -f "$TEX_FILE" ]; then
    log_error "TeX file not found: $TEX_FILE"
    exit 1
fi

# Create output directory
mkdir -p "$OUTPUT_DIR"

log_info "Compiling content: $JOB_NAME (color_mode=$COLOR_MODE)"

# Run latexmk (no bibliography processing for content/preview)
timeout "$TIMEOUT" latexmk \
    -pdf \
    -interaction=nonstopmode \
    -halt-on-error \
    -bibtex- \
    -jobname="$JOB_NAME" \
    -output-directory="$OUTPUT_DIR" \
    "$TEX_FILE"

COMPILE_EXIT=$?

if [ $COMPILE_EXIT -ne 0 ]; then
    log_error "latexmk failed with exit code $COMPILE_EXIT"
    exit $COMPILE_EXIT
fi

PDF_FILE="$OUTPUT_DIR/$JOB_NAME.pdf"

if [ ! -f "$PDF_FILE" ]; then
    log_error "PDF not generated: $PDF_FILE"
    exit 1
fi

log_success "PDF generated: $PDF_FILE"

# Copy to preview directory if specified
if [ -n "$PREVIEW_DIR" ]; then
    mkdir -p "$PREVIEW_DIR"
    cp "$PDF_FILE" "$PREVIEW_DIR/"
    log_info "Copied to preview: $PREVIEW_DIR/$JOB_NAME.pdf"
fi

# Cleanup auxiliary files
if [ "$KEEP_AUX" = false ]; then
    for ext in aux log fls fdb_latexmk synctex.gz out bbl blg toc lof lot; do
        rm -f "$OUTPUT_DIR/$JOB_NAME.$ext"
    done
    log_info "Cleaned auxiliary files"
fi

exit 0

# EOF