-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.sh
More file actions
108 lines (93 loc) · 3.11 KB
/
build.sh
File metadata and controls
108 lines (93 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/bin/bash
# LaTeX 编译脚本(支持章节拆分、样式与内容分离)
# 用法: ./build.sh [文档名称]
# 示例:
# ./build.sh # 编译所有文档
# ./build.sh test_plan # 只编译测试大纲
# ./build.sh test_detail # 只编译测试细则
echo "======================================"
echo " LaTeX 文档编译脚本"
echo "======================================"
# 优先使用较新的 TeX Live(避免 ctex/expl3 版本过旧导致编译中断)
XELATEX="xelatex"
if [ -x "/usr/local/texlive/2025/bin/x86_64-linux/xelatex" ]; then
XELATEX="/usr/local/texlive/2025/bin/x86_64-linux/xelatex"
fi
# 创建输出目录
mkdir -p output/log
mkdir -p output/template
# 源文件目录
SOURCE_DIR="src/doc2tex-template"
OUTPUT_DIR="output"
LOG_DIR="output/log"
BUILD_DIR="/tmp/latex-test-build"
mkdir -p "$BUILD_DIR"
# 确定要编译的文档
if [ -z "$1" ]; then
# 编译所有文档(使用下划线命名)
DOCS=("test_plan" "test_detail" "test_report")
echo ""
echo "📄 编译所有文档..."
else
# 编译指定文档
DOCS=("$1")
echo ""
echo "📄 编译文档: $1"
fi
echo ""
echo "📁 源文件目录: $SOURCE_DIR/"
echo "📁 输出目录: $OUTPUT_DIR/"
echo "📋 日志目录: $LOG_DIR/"
echo ""
# 编译每个文档
SUCCESS_COUNT=0
FAIL_COUNT=0
for doc in "${DOCS[@]}"; do
MAIN_FILE="$SOURCE_DIR/${doc}/main.tex"
if [ ! -f "$MAIN_FILE" ]; then
echo "⚠️ 文件不存在: $MAIN_FILE"
((FAIL_COUNT++))
continue
fi
echo "正在编译 $doc..."
rm -f "output/${doc}.pdf" "output/${doc}_fresh.pdf" "output/template/${doc}.pdf" 2>/dev/null || true
# 进入文档目录编译(解决\input路径问题)
JOBNAME="${doc}_build"
DOC_BUILD_DIR="${BUILD_DIR}/${JOBNAME}"
rm -rf "$DOC_BUILD_DIR" 2>/dev/null || true
mkdir -p "$DOC_BUILD_DIR"
(cd "$SOURCE_DIR/${doc}" && TEXINPUTS=".//:..//:" "$XELATEX" -interaction=nonstopmode -halt-on-error -jobname="${JOBNAME}" -output-directory="${DOC_BUILD_DIR}" ./main.tex </dev/null 2>&1 | tee "/tmp/compile_${doc}.log")
EXIT_CODE=${PIPESTATUS[0]}
if [ -f "${DOC_BUILD_DIR}/${JOBNAME}.pdf" ]; then
cp -f "${DOC_BUILD_DIR}/${JOBNAME}.pdf" "output/template/${doc}.pdf" 2>/dev/null || true
cp -f "${DOC_BUILD_DIR}/${JOBNAME}.log" "output/log/${doc}.log" 2>/dev/null || true
fi
if [ $EXIT_CODE -eq 0 ]; then
echo "✅ $doc 编译成功"
((SUCCESS_COUNT++))
else
echo "❌ $doc 编译失败"
((FAIL_COUNT++))
fi
done
echo ""
echo "======================================"
echo " 编译完成"
echo "======================================"
echo ""
echo "✅ 成功: $SUCCESS_COUNT 个"
echo "❌ 失败: $FAIL_COUNT 个"
echo ""
echo "📄 PDF 文件:"
for doc in "${DOCS[@]}"; do
if [ -f "$OUTPUT_DIR/template/${doc}.pdf" ]; then
ls -lh "$OUTPUT_DIR/template/${doc}.pdf" 2>/dev/null | awk '{print " " $9 " (" $5 ")"}'
fi
done
echo ""
echo "📋 日志文件: $LOG_DIR/"
if [ $FAIL_COUNT -gt 0 ]; then
echo ""
echo "❌ 部分文档编译失败,请查看日志文件"
exit 1
fi