2
0
Fork 0
mirror of https://github.com/Vonng/ddia.git synced 2026-06-21 00:47:05 +08:00
ddia/bin/pdf
2026-03-28 10:06:38 +08:00

108 lines
2.5 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e
# Check for required dependencies
check_dependencies() {
local missing_deps=()
if ! command -v pandoc &> /dev/null; then
missing_deps+=("pandoc")
fi
if ! command -v xelatex &> /dev/null; then
# Try lualatex as fallback
if ! command -v lualatex &> /dev/null; then
missing_deps+=("xelatex or lualatex (LaTeX engine)")
fi
fi
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Error: Missing required dependencies:"
for dep in "${missing_deps[@]}"; do
echo " - $dep"
done
echo ""
echo "Installation:"
echo " macOS: brew install pandoc"
echo " macOS: brew install --cask mactex"
echo ""
echo " Linux: apt install pandoc texlive-xetex"
exit 1
fi
}
check_dependencies
# Detect available PDF engine
if command -v xelatex &> /dev/null; then
PDF_ENGINE="xelatex"
elif command -v lualatex &> /dev/null; then
PDF_ENGINE="lualatex"
else
echo "Error: No suitable PDF engine found"
exit 1
fi
SCRIPT_DIR=$(dirname "$0")
INPUT_DIR=$(cd "$(dirname "$SCRIPT_DIR")" && pwd)
OUTPUT_DIR="$INPUT_DIR/output"
TEMP_DIR="$OUTPUT_DIR/temp"
# Create output directory if it doesn't exist
mkdir -p "$OUTPUT_DIR"
mkdir -p "$TEMP_DIR"
# Preprocess Markdown files to convert Hugo shortcodes
echo "Preprocessing Markdown files..."
python3 "${SCRIPT_DIR}/preprocess-epub.py" "${INPUT_DIR}/content/zh" "$TEMP_DIR"
convert_to_pdf() {
# Convert all Markdown files into a single PDF book
OUTPUT_BOOK="$OUTPUT_DIR/ddia.pdf"
rm -f "$OUTPUT_BOOK"
echo "Converting all Markdown files into $OUTPUT_BOOK..."
local meta_file=${INPUT_DIR}/metadata.yaml
local header_file=${SCRIPT_DIR}/header.tex
# Use xelatex for Chinese support with custom header
pandoc -o "$OUTPUT_BOOK" \
--metadata-file="$meta_file" \
-H "$header_file" \
--toc \
--toc-depth=2 \
--top-level-division=chapter \
--file-scope=true \
--pdf-engine="$PDF_ENGINE" \
-V geometry:margin=1in \
-V linestretch=1.5 \
"${TEMP_DIR}"/_index.md \
"${TEMP_DIR}"/preface.md \
"${TEMP_DIR}"/part-i.md \
"${TEMP_DIR}"/ch1.md \
"${TEMP_DIR}"/ch2.md \
"${TEMP_DIR}"/ch3.md \
"${TEMP_DIR}"/ch4.md \
"${TEMP_DIR}"/part-ii.md \
"${TEMP_DIR}"/ch5.md \
"${TEMP_DIR}"/ch6.md \
"${TEMP_DIR}"/ch7.md \
"${TEMP_DIR}"/ch8.md \
"${TEMP_DIR}"/ch9.md \
"${TEMP_DIR}"/part-iii.md \
"${TEMP_DIR}"/ch10.md \
"${TEMP_DIR}"/ch11.md \
"${TEMP_DIR}"/ch12.md \
"${TEMP_DIR}"/ch13.md \
"${TEMP_DIR}"/ch14.md \
"${TEMP_DIR}"/colophon.md \
"${TEMP_DIR}"/glossary.md
echo "PDF book created at $OUTPUT_BOOK."
}
convert_to_pdf
# Clean up temporary files
rm -rf "$TEMP_DIR"