ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
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
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
This commit is contained in:
Executable
+123
@@ -0,0 +1,123 @@
|
||||
#!/bin/bash
|
||||
# Build the Vietnamese translation as a single PDF.
|
||||
# Requirements: pandoc, xelatex, ElegantBook class, rsvg-convert/librsvg,
|
||||
# and fonts that support Vietnamese + CJK fallback.
|
||||
# Usage: cd book-vi && bash build_pdf.sh
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Homebrew and MacTeX often are not visible inside non-login shells.
|
||||
export PATH="/opt/homebrew/bin:/usr/local/bin:/Library/TeX/texbin:$PATH"
|
||||
|
||||
for cmd in pandoc xelatex rsvg-convert python3; do
|
||||
if ! command -v "$cmd" >/dev/null 2>&1; then
|
||||
echo "Error: $cmd not found in PATH." >&2
|
||||
if [ "$cmd" = "xelatex" ]; then
|
||||
echo "If MacTeX is installed, run: export PATH=\"/Library/TeX/texbin:\\$PATH\"" >&2
|
||||
echo "Then check: /Library/TeX/texbin/xelatex --version" >&2
|
||||
elif [ "$cmd" = "rsvg-convert" ]; then
|
||||
echo "Install it with: brew install librsvg" >&2
|
||||
elif [ "$cmd" = "pandoc" ]; then
|
||||
echo "Install it with: brew install pandoc" >&2
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
OUT="AI-Agents-in-Depth-Bojie-Li-v2.0-vi.pdf"
|
||||
CHAPTERS=(
|
||||
introduction.vi.md
|
||||
glossary.vi.md
|
||||
chapter1.vi.md
|
||||
chapter2.vi.md
|
||||
chapter3.vi.md
|
||||
chapter4.vi.md
|
||||
chapter5.vi.md
|
||||
chapter6.vi.md
|
||||
chapter7.vi.md
|
||||
chapter8.vi.md
|
||||
chapter9.vi.md
|
||||
chapter10.vi.md
|
||||
afterword.vi.md
|
||||
)
|
||||
|
||||
for ch in "${CHAPTERS[@]}"; do
|
||||
if [ ! -f "$ch" ]; then
|
||||
echo "Error: $ch not found. Run the translation step first." >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Checking Vietnamese SVG layout..."
|
||||
python3 fix_svg_text_layout.py --check
|
||||
|
||||
echo "Building Vietnamese PDF from ${#CHAPTERS[@]} files..."
|
||||
echo "Note: after the initial Pandoc warnings, XeLaTeX may be quiet for several minutes."
|
||||
echo "Full build log: build_pdf_vi.log"
|
||||
|
||||
LOG="build_pdf_vi.log"
|
||||
: > "$LOG"
|
||||
|
||||
pandoc "${CHAPTERS[@]}" \
|
||||
-o "$OUT" \
|
||||
--from markdown+lists_without_preceding_blankline \
|
||||
--pdf-engine=xelatex \
|
||||
--pdf-engine-opt=-interaction=nonstopmode \
|
||||
--pdf-engine-opt=-halt-on-error \
|
||||
--pdf-engine-opt=-file-line-error \
|
||||
--lua-filter=crossref.lua \
|
||||
--lua-filter=experiment_box.lua \
|
||||
--toc \
|
||||
--toc-depth=3 \
|
||||
--number-sections \
|
||||
-V documentclass=elegantbook \
|
||||
-V classoption=lang=cn \
|
||||
-V classoption=fontset=fandol \
|
||||
-V classoption=cyan \
|
||||
-V classoption=device=normal \
|
||||
-V author="Lý Bác Kiệt" \
|
||||
--metadata title-meta="Hiểu sâu về AI Agent: Nguyên lý thiết kế và thực hành kỹ thuật" \
|
||||
--metadata author-meta="Lý Bác Kiệt" \
|
||||
-H preamble.tex \
|
||||
--include-before-body=cover.tex \
|
||||
--highlight-style=kate \
|
||||
--columns=80 \
|
||||
> "$LOG" 2>&1 &
|
||||
|
||||
PANDOC_PID=$!
|
||||
START_TIME=$(date +%s)
|
||||
while kill -0 "$PANDOC_PID" >/dev/null 2>&1; do
|
||||
sleep 30
|
||||
if ! kill -0 "$PANDOC_PID" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
NOW=$(date +%s)
|
||||
ELAPSED=$((NOW - START_TIME))
|
||||
echo "Still building... ${ELAPSED}s elapsed. Last log lines:"
|
||||
tail -5 "$LOG" || true
|
||||
echo "---"
|
||||
done
|
||||
|
||||
if ! wait "$PANDOC_PID"; then
|
||||
echo "PDF build failed. Last 80 log lines:" >&2
|
||||
tail -80 "$LOG" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cat "$LOG"
|
||||
|
||||
|
||||
if [ -f "$OUT" ]; then
|
||||
SIZE=$(du -h "$OUT" | cut -f1)
|
||||
PAGES=$(pdfinfo "$OUT" 2>/dev/null | awk '/^Pages:/ {print $2; exit}')
|
||||
PAGES=${PAGES:-?}
|
||||
echo ""
|
||||
echo "Done: $OUT ($SIZE, $PAGES pages)"
|
||||
else
|
||||
echo "Error: PDF generation failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user