Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
77 lines
2.0 KiB
Bash
Executable File
77 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build the complete book as a single PDF (ElegantBook design, teal/cyan theme).
|
|
# Requirements: pandoc, xelatex, ElegantBook class, rsvg-convert (librsvg),
|
|
# fonts: Songti SC / Heiti SC (ctex), Menlo, Arial Unicode MS
|
|
# Usage: cd book && bash build_pdf.sh
|
|
# Note: chapter/section numbers come from the document class; source headings
|
|
# carry no manual numbers (see git history for the de-numbering pass).
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
OUT="深入理解-AI-Agent-李博杰-v2.0.pdf"
|
|
CHAPTERS=(
|
|
introduction.md
|
|
chapter1.md
|
|
chapter2.md
|
|
chapter3.md
|
|
chapter4.md
|
|
chapter5.md
|
|
chapter6.md
|
|
chapter7.md
|
|
chapter8.md
|
|
chapter9.md
|
|
chapter10.md
|
|
afterword.md
|
|
)
|
|
|
|
# Verify all chapters exist
|
|
for ch in "${CHAPTERS[@]}"; do
|
|
if [ ! -f "$ch" ]; then
|
|
echo "Error: $ch not found" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "Building PDF from ${#CHAPTERS[@]} files..."
|
|
|
|
pandoc "${CHAPTERS[@]}" \
|
|
-o "$OUT" \
|
|
--from markdown+lists_without_preceding_blankline \
|
|
--pdf-engine=xelatex \
|
|
--lua-filter=crossref.lua \
|
|
--lua-filter=experiment_box.lua \
|
|
--toc \
|
|
--toc-depth=3 \
|
|
--number-sections \
|
|
-V documentclass=elegantbook \
|
|
-V classoption=lang=cn \
|
|
-V classoption=nofont \
|
|
-V classoption=cyan \
|
|
-V classoption=device=normal \
|
|
-V author="李博杰" \
|
|
--metadata title-meta="深入理解 AI Agent:设计原理与工程实践" \
|
|
--metadata author-meta="李博杰" \
|
|
-H preamble.tex \
|
|
--include-before-body=cover.tex \
|
|
--highlight-style=kate \
|
|
--columns=80 \
|
|
2>&1
|
|
|
|
if [ -f "$OUT" ]; then
|
|
SIZE=$(du -h "$OUT" | cut -f1)
|
|
PAGES=$(python3 -c "
|
|
import subprocess, re
|
|
r = subprocess.run(['pdfinfo', '$OUT'], capture_output=True, text=True)
|
|
m = re.search(r'Pages:\s+(\d+)', r.stdout)
|
|
print(m.group(1) if m else '?')
|
|
" 2>/dev/null || echo "?")
|
|
echo ""
|
|
echo "Done: $OUT ($SIZE, $PAGES pages)"
|
|
else
|
|
echo "Error: PDF generation failed" >&2
|
|
exit 1
|
|
fi
|