#!/bin/bash # -*- coding: utf-8 -*- # Timestamp: 2026-02-10 # File: scripts/shell/export_arxiv.sh # Purpose: Package manuscript as arXiv-ready tarball # Usage: export_arxiv.sh [--output-dir DIR] set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' GRAY='\033[0;90m' NC='\033[0m' OUTPUT_DIR="${PROJECT_ROOT}/01_manuscript/export" # Parse arguments while [[ $# -gt 0 ]]; do case "$1" in -h | --help) echo "Usage: $(basename "$0") [--output-dir DIR]" echo "" echo "Package the compiled manuscript as an arXiv-ready tarball." echo "" echo "Prerequisites:" echo " Run 'make manuscript-compile' first to generate the flattened" echo " manuscript.tex and .bbl file." echo "" echo "Options:" echo " --output-dir DIR Export directory (default: 01_manuscript/export/)" echo " -h, --help Show this help" echo "" echo "Output:" echo " /manuscript.tar.gz arXiv-ready tarball" echo "" echo "The tarball contains:" echo " manuscript.tex Flattened source with rewritten paths" echo " manuscript.bbl Pre-compiled bibliography" echo " bibliography.bib Source bibliography (fallback)" echo " figures/ Figure JPGs" echo " wordcounts/ Word count files" echo "" echo "Environment:" echo " SCITEX_WRITER_EXPORT_DIR Override default output directory" exit 0 ;; --output-dir) OUTPUT_DIR="$2" shift 2 ;; *) echo -e "${RED}Unknown option: $1${NC}" >&2 echo "Use --help for usage." >&2 exit 1 ;; esac done # Allow env var override OUTPUT_DIR="${SCITEX_WRITER_EXPORT_DIR:-$OUTPUT_DIR}" # ============================================================================ # Validation # ============================================================================ echo -e "${YELLOW}=== SciTeX Writer: arXiv Export ===${NC}" echo "" MANUSCRIPT_TEX="${PROJECT_ROOT}/01_manuscript/manuscript.tex" MANUSCRIPT_DIR="${PROJECT_ROOT}/01_manuscript" FIG_DIR="${PROJECT_ROOT}/01_manuscript/contents/figures/caption_and_media/jpg_for_compilation" WORDCOUNT_DIR="${PROJECT_ROOT}/01_manuscript/contents/wordcounts" BIB_FILE="${PROJECT_ROOT}/00_shared/bib_files/bibliography.bib" # Check flattened tex exists if [ ! -f "$MANUSCRIPT_TEX" ]; then echo -e "${RED}Error: $MANUSCRIPT_TEX not found.${NC}" >&2 echo "Run 'make manuscript-compile' first." >&2 exit 1 fi # Find .bbl file (could be in logs/ or manuscript dir) BBL_FILE="" for candidate in \ "${MANUSCRIPT_DIR}/logs/manuscript.bbl" \ "${MANUSCRIPT_DIR}/manuscript.bbl" \ "${MANUSCRIPT_DIR}/logs/"*.bbl; do if [ -f "$candidate" ]; then BBL_FILE="$candidate" break fi done if [ -z "$BBL_FILE" ]; then echo -e "${YELLOW}Warning: No .bbl file found. Bibliography may not render on arXiv.${NC}" echo "Ensure 'make manuscript-compile' ran bibtex successfully." fi # ============================================================================ # Export # ============================================================================ # Clean and create export directory rm -rf "$OUTPUT_DIR" mkdir -p "$OUTPUT_DIR/figures" "$OUTPUT_DIR/wordcounts" echo -e "${GRAY} Export directory: $OUTPUT_DIR${NC}" # 1. Copy and transform manuscript.tex cp "$MANUSCRIPT_TEX" "$OUTPUT_DIR/manuscript.tex" TEX="$OUTPUT_DIR/manuscript.tex" # Rewrite figure paths: ./01_manuscript/contents/figures/caption_and_media/jpg_for_compilation/ -> figures/ sed -i 's|./01_manuscript/contents/figures/caption_and_media/jpg_for_compilation/|figures/|g' "$TEX" # Rewrite wordcount paths: ./01_manuscript/contents/wordcounts/ -> wordcounts/ sed -i 's|./01_manuscript/contents/wordcounts/|wordcounts/|g' "$TEX" # Fix bibliography path: 01_manuscript/contents/bibliography -> bibliography sed -i 's|\\bibliography{01_manuscript/contents/bibliography}|\\bibliography{bibliography}|g' "$TEX" # Comment out supplementary link (fails without supplementary .aux) sed -i 's|^\\link\[supple-\]|% [arXiv export] \\link[supple-]|g' "$TEX" # Remove bashful package (may fail on arXiv - runs shell commands) if grep -q 'bashful' "$TEX"; then sed -i 's|\\usepackage\(\[.*\]\)\{0,1\}{.*bashful.*}|% [arXiv export] bashful removed (shell commands not supported)|g' "$TEX" echo -e "${YELLOW} Note: bashful package removed (not supported on arXiv)${NC}" fi echo -e "${GREEN} [OK] manuscript.tex (paths rewritten)${NC}" # 2. Copy figure JPGs fig_count=0 if [ -d "$FIG_DIR" ]; then for jpg in "$FIG_DIR"/*.jpg; do [ -f "$jpg" ] || continue cp "$jpg" "$OUTPUT_DIR/figures/" fig_count=$((fig_count + 1)) done fi echo -e "${GREEN} [OK] figures/ ($fig_count files)${NC}" # 3. Copy wordcount files wc_count=0 if [ -d "$WORDCOUNT_DIR" ]; then for wc in "$WORDCOUNT_DIR"/*.txt; do [ -f "$wc" ] || continue cp "$wc" "$OUTPUT_DIR/wordcounts/" wc_count=$((wc_count + 1)) done fi echo -e "${GREEN} [OK] wordcounts/ ($wc_count files)${NC}" # 4. Copy .bbl file if [ -n "$BBL_FILE" ]; then cp "$BBL_FILE" "$OUTPUT_DIR/manuscript.bbl" echo -e "${GREEN} [OK] manuscript.bbl${NC}" fi # 5. Copy bibliography.bib (fallback) if [ -f "$BIB_FILE" ]; then cp "$BIB_FILE" "$OUTPUT_DIR/bibliography.bib" echo -e "${GREEN} [OK] bibliography.bib${NC}" fi # ============================================================================ # Create tarball # ============================================================================ TARBALL="$OUTPUT_DIR/manuscript.tar.gz" # Build file list for tarball tar_files=("manuscript.tex") [ -f "$OUTPUT_DIR/manuscript.bbl" ] && tar_files+=("manuscript.bbl") [ -f "$OUTPUT_DIR/bibliography.bib" ] && tar_files+=("bibliography.bib") [ -d "$OUTPUT_DIR/figures" ] && tar_files+=("figures/") [ -d "$OUTPUT_DIR/wordcounts" ] && tar_files+=("wordcounts/") # Create tarball from inside export dir so paths are relative (cd "$OUTPUT_DIR" && tar czf manuscript.tar.gz "${tar_files[@]}") echo "" echo -e "${GREEN}=== Export Complete ===${NC}" echo "" echo -e " Tarball: ${GREEN}$TARBALL${NC}" local_size=$(du -h "$TARBALL" | cut -f1) echo -e " Size: $local_size" echo "" # List contents echo -e "${GRAY} Contents:${NC}" tar tzf "$TARBALL" | sort | while read -r f; do echo -e " ${GRAY}$f${NC}" done echo "" echo "Upload this tarball to https://arxiv.org/submit" ###% EOF