laporan-generator 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/laporan-generator/SKILL.md +132 -0
- package/.agents/skills/laporan-generator/agents/openai.yaml +3 -0
- package/.agents/skills/laporan-generator/references/campus-guide.md +120 -0
- package/.agents/skills/laporan-generator/references/metadata-schema.md +76 -0
- package/.agents/skills/laporan-generator/references/preset-schema.md +79 -0
- package/.agents/skills/laporan-generator/references/syntax-cheatsheet.md +122 -0
- package/.agents/skills/laporan-generator/references/template-guide.md +100 -0
- package/.agents/skills/laporan-generator/references/troubleshooting.md +105 -0
- package/.agents/skills/laporan-generator/resources/Makefile +90 -0
- package/.agents/skills/laporan-generator/resources/apa.csl +2273 -0
- package/.agents/skills/laporan-generator/resources/build-docx.sh +122 -0
- package/.agents/skills/laporan-generator/resources/build.sh +102 -0
- package/.agents/skills/laporan-generator/resources/chapters/bab1-pendahuluan.md +60 -0
- package/.agents/skills/laporan-generator/resources/chapters/bab2-tinjauan-pustaka.md +83 -0
- package/.agents/skills/laporan-generator/resources/chapters/bab3-metodologi.md +116 -0
- package/.agents/skills/laporan-generator/resources/chapters/bab4-hasil-dan-pembahasan.md +93 -0
- package/.agents/skills/laporan-generator/resources/chapters/bab5-penutup.md +27 -0
- package/.agents/skills/laporan-generator/resources/cover.md +50 -0
- package/.agents/skills/laporan-generator/resources/docx.lua +416 -0
- package/.agents/skills/laporan-generator/resources/laporan +464 -0
- package/.agents/skills/laporan-generator/resources/laporan.ps1 +552 -0
- package/.agents/skills/laporan-generator/resources/logo.jpg +0 -0
- package/.agents/skills/laporan-generator/resources/metadata.yml +35 -0
- package/.agents/skills/laporan-generator/resources/presets/itb-ta.yml +27 -0
- package/.agents/skills/laporan-generator/resources/presets/its-skripsi.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/skripsi-4433.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/standard.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/ugm-skripsi.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/ui-skripsi.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/unpad-skripsi.yml +27 -0
- package/.agents/skills/laporan-generator/resources/reference.docx +0 -0
- package/.agents/skills/laporan-generator/resources/references.bib +115 -0
- package/.agents/skills/laporan-generator/resources/scripts/bundle.py +75 -0
- package/.agents/skills/laporan-generator/resources/scripts/docx-pagenum.py +192 -0
- package/.agents/skills/laporan-generator/resources/scripts/finalize-docx.py +291 -0
- package/.agents/skills/laporan-generator/resources/scripts/make-reference-docx.py +670 -0
- package/.agents/skills/laporan-generator/resources/scripts/report-doctor.py +211 -0
- package/.agents/skills/laporan-generator/resources/scripts/report-stats.py +149 -0
- package/.agents/skills/laporan-generator/resources/scripts/scan-preset.py +311 -0
- package/.agents/skills/laporan-generator/resources/scripts/setup-deps.ps1 +152 -0
- package/.agents/skills/laporan-generator/resources/scripts/setup-deps.sh +113 -0
- package/.agents/skills/laporan-generator/resources/scripts/test_scripts.py +128 -0
- package/.agents/skills/laporan-generator/resources/scripts/validate-preset.py +166 -0
- package/.agents/skills/laporan-generator/resources/template.typ +394 -0
- package/.agents/skills/laporan-generator/scripts/build.sh +78 -0
- package/.agents/skills/laporan-generator/scripts/bundle.py +75 -0
- package/.agents/skills/laporan-generator/scripts/docx-pagenum.py +192 -0
- package/.agents/skills/laporan-generator/scripts/finalize-docx.py +152 -0
- package/.agents/skills/laporan-generator/scripts/laporan +447 -0
- package/.agents/skills/laporan-generator/scripts/laporan.ps1 +529 -0
- package/.agents/skills/laporan-generator/scripts/make-reference-docx.py +630 -0
- package/.agents/skills/laporan-generator/scripts/report-doctor.py +211 -0
- package/.agents/skills/laporan-generator/scripts/report-stats.py +149 -0
- package/.agents/skills/laporan-generator/scripts/scan-preset.py +311 -0
- package/.agents/skills/laporan-generator/scripts/setup-deps.ps1 +152 -0
- package/.agents/skills/laporan-generator/scripts/setup-deps.sh +113 -0
- package/.agents/skills/laporan-generator/scripts/test_scripts.py +103 -0
- package/.agents/skills/laporan-generator/scripts/validate-preset.py +166 -0
- package/.agents/workflows/laporan-generator.md +8 -0
- package/LICENSE +21 -0
- package/Makefile +90 -0
- package/README.md +389 -0
- package/apa.csl +2273 -0
- package/bin/laporan-generator.js +71 -0
- package/build-docx.sh +122 -0
- package/build.sh +102 -0
- package/chapters/bab1-pendahuluan.md +60 -0
- package/chapters/bab2-tinjauan-pustaka.md +83 -0
- package/chapters/bab3-metodologi.md +116 -0
- package/chapters/bab4-hasil-dan-pembahasan.md +93 -0
- package/chapters/bab5-penutup.md +27 -0
- package/cover.md +50 -0
- package/docs/campus-guide.md +120 -0
- package/docs/metadata-schema.md +76 -0
- package/docs/preset-schema.md +79 -0
- package/docs/syntax-cheatsheet.md +122 -0
- package/docs/template-guide.md +100 -0
- package/docs/troubleshooting.md +105 -0
- package/docx.lua +416 -0
- package/laporan +464 -0
- package/laporan.ps1 +552 -0
- package/lib/init.js +118 -0
- package/lib/setup.js +33 -0
- package/lib/sync-hosts.js +194 -0
- package/lib/uninstall.js +123 -0
- package/logo.jpg +0 -0
- package/metadata.yml +35 -0
- package/package.json +65 -0
- package/presets/itb-ta.yml +27 -0
- package/presets/its-skripsi.yml +26 -0
- package/presets/skripsi-4433.yml +26 -0
- package/presets/standard.yml +26 -0
- package/presets/ugm-skripsi.yml +26 -0
- package/presets/ui-skripsi.yml +26 -0
- package/presets/unpad-skripsi.yml +27 -0
- package/reference.docx +0 -0
- package/references.bib +115 -0
- package/scripts/bundle.py +75 -0
- package/scripts/docx-pagenum.py +192 -0
- package/scripts/finalize-docx.py +291 -0
- package/scripts/make-reference-docx.py +670 -0
- package/scripts/report-doctor.py +211 -0
- package/scripts/report-stats.py +149 -0
- package/scripts/scan-preset.py +311 -0
- package/scripts/setup-deps.ps1 +152 -0
- package/scripts/setup-deps.sh +113 -0
- package/scripts/test_scripts.py +128 -0
- package/scripts/validate-preset.py +166 -0
- package/template.typ +394 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Panduan Penanganan Masalah (Troubleshooting)
|
|
2
|
+
|
|
3
|
+
Dokumen ini berisi daftar masalah umum, kode kesalahan, dan solusi langkah-demi-langkah saat menjalankan **Laporan Generator**.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. ImageMagick Security Policy Error
|
|
8
|
+
|
|
9
|
+
### Gejala Error:
|
|
10
|
+
```text
|
|
11
|
+
convert-im6.q16: attempt to perform an operation not allowed by the security policy 'PDF'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### Penyebab:
|
|
15
|
+
Kebijakan keamanan default ImageMagick pada beberapa distribusi Linux (seperti Ubuntu/Debian) membatasi pemrosesan berkas PDF/PNG untuk mencegah kerentanan keamanan.
|
|
16
|
+
|
|
17
|
+
### Solusi:
|
|
18
|
+
1. Buka file kebijakan ImageMagick dengan hak akses sudo:
|
|
19
|
+
```bash
|
|
20
|
+
sudo nano /etc/ImageMagick-6/policy.xml
|
|
21
|
+
# atau untuk ImageMagick 7:
|
|
22
|
+
sudo nano /etc/ImageMagick-7/policy.xml
|
|
23
|
+
```
|
|
24
|
+
2. Cari baris berikut:
|
|
25
|
+
```xml
|
|
26
|
+
<policy domain="coder" rights="none" pattern="PDF" />
|
|
27
|
+
```
|
|
28
|
+
3. Ubah `rights="none"` menjadi `rights="read|write"`:
|
|
29
|
+
```xml
|
|
30
|
+
<policy domain="coder" rights="read|write" pattern="PDF" />
|
|
31
|
+
```
|
|
32
|
+
4. Simpan file (`Ctrl+O`, `Enter`) lalu keluar (`Ctrl+X`).
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. Font Tidak Ditemukan (Missing Font)
|
|
37
|
+
|
|
38
|
+
### Gejala Error:
|
|
39
|
+
```text
|
|
40
|
+
warning: font 'Nimbus Serif' not found, falling back to default
|
|
41
|
+
warning: failed to resolve font 'Times New Roman'
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Penyebab:
|
|
45
|
+
Font yang disebutkan di dalam `template.typ` tidak tersedia. Typst hanya memakai font yang dibundel di binary-nya (termasuk Libertinus Serif dan DejaVu Sans Mono) plus font yang terinstall di sistem.
|
|
46
|
+
|
|
47
|
+
### Solusi:
|
|
48
|
+
1. Gunakan font bawaan Typst: `Libertinus Serif`, `DejaVu Sans Mono`, atau `New Computer Modern`.
|
|
49
|
+
2. Jika ingin font sistem lain, pastikan font tersebut sudah terinstall di OS/container.
|
|
50
|
+
3. Cek daftar font yang tersedia:
|
|
51
|
+
```bash
|
|
52
|
+
typst fonts
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. Syntax Error Raw Typst di cover.md
|
|
58
|
+
|
|
59
|
+
### Gejala Error:
|
|
60
|
+
```text
|
|
61
|
+
error: expected `)`, found `]`
|
|
62
|
+
┌─ cover.md:5:1
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Penyebab:
|
|
66
|
+
Blok raw Typst di dalam `cover.md` (diapit ``` ```typst ```) memiliki kesalahan sintaks. Contoh yang sering terjadi: `block(align: center)` (tidak valid di Typst, gunakan `align(center)[block(...)]`) atau `ns.first()` (dihapus sejak Typst 0.13, gunakan `ns.at(0)`).
|
|
67
|
+
|
|
68
|
+
### Solusi:
|
|
69
|
+
Periksa pesan error Typst yang menyebutkan posisi baris, lalu perbaiki blok raw di `cover.md` atau konstruksi template di `template.typ`.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 4. Citasi "Undefined Reference"
|
|
74
|
+
|
|
75
|
+
### Gejala Error:
|
|
76
|
+
```text
|
|
77
|
+
[WARNING] Citeproc: citation 'he2016deep' not found
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Penyebab:
|
|
81
|
+
Di dalam Markdown, sintaks sitasi tidak dikenali atau citekey tidak ada di `references.bib`.
|
|
82
|
+
|
|
83
|
+
### Solusi:
|
|
84
|
+
Gunakan sintaks sitasi Pandoc `[@citekey]` atau `@citekey` di file Markdown:
|
|
85
|
+
- **Salah**: `Menurut \cite{he2016deep}...`
|
|
86
|
+
- **Benar**: `Menurut [@he2016deep]...`
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 5. Permission Denied pada Laporan.pdf (Docker Volume)
|
|
91
|
+
|
|
92
|
+
### Gejala Error:
|
|
93
|
+
```text
|
|
94
|
+
cannot create Laporan.pdf: Permission denied
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Penyebab:
|
|
98
|
+
Container Docker dijalankan sebagai user `root` sehingga menghalangi user lokal untuk mengubah atau menghapus file output.
|
|
99
|
+
|
|
100
|
+
### Solusi:
|
|
101
|
+
Gunakan perintah `docker compose` yang sudah dikonfigurasi dengan variabel `UID/GID` lokal:
|
|
102
|
+
```bash
|
|
103
|
+
docker compose run --rm laporan-generator
|
|
104
|
+
```
|
|
105
|
+
*(File `docker-compose.yml` pada project ini secara otomatis memetakan `user: "${UID:-1000}:${GID:-1000}"`)*.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
.PHONY: build clean lint-deps watch docx html crossref test docker-build init view reference-docx
|
|
2
|
+
|
|
3
|
+
build:
|
|
4
|
+
./build.sh
|
|
5
|
+
|
|
6
|
+
init:
|
|
7
|
+
@git config core.hooksPath .githooks
|
|
8
|
+
@echo "[OK] Git pre-commit hook berhasil diaktifkan!"
|
|
9
|
+
|
|
10
|
+
view:
|
|
11
|
+
@if [ -f Laporan.pdf ]; then \
|
|
12
|
+
command -v xdg-open >/dev/null 2>&1 && xdg-open Laporan.pdf || open Laporan.pdf || echo "Laporan.pdf ada di: $(shell pwd)/Laporan.pdf"; \
|
|
13
|
+
else \
|
|
14
|
+
echo "ERROR: Laporan.pdf belum dibuat. Jalankan 'make build' terlebih dahulu."; \
|
|
15
|
+
exit 1; \
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
clean:
|
|
19
|
+
rm -f Laporan.pdf Laporan.docx Laporan.html
|
|
20
|
+
rm -rf tmp/
|
|
21
|
+
|
|
22
|
+
lint-deps:
|
|
23
|
+
@echo "Checking dependencies..."
|
|
24
|
+
@command -v pandoc >/dev/null 2>&1 || { echo "ERROR: pandoc not found"; exit 1; }
|
|
25
|
+
@command -v typst >/dev/null 2>&1 || { echo "ERROR: typst not found"; exit 1; }
|
|
26
|
+
@command -v magick >/dev/null 2>&1 || command -v convert >/dev/null 2>&1 || { echo "ERROR: ImageMagick (magick/convert) not found"; exit 1; }
|
|
27
|
+
@echo "All dependencies OK."
|
|
28
|
+
|
|
29
|
+
watch:
|
|
30
|
+
@command -v inotifywait >/dev/null 2>&1 || { echo "ERROR: inotifywait not found. Install inotify-tools."; exit 1; }
|
|
31
|
+
@echo "Watching for changes... (Ctrl+C to stop)"
|
|
32
|
+
@while true; do \
|
|
33
|
+
inotifywait -r -e modify -e create -e delete . \
|
|
34
|
+
--exclude '(Laporan\.pdf|tmp/|\.git/|\.pdf)' 2>/dev/null; \
|
|
35
|
+
./build.sh; \
|
|
36
|
+
done
|
|
37
|
+
|
|
38
|
+
docx:
|
|
39
|
+
./build-docx.sh
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
reference-docx:
|
|
43
|
+
@command -v pandoc >/dev/null 2>&1 || { echo "ERROR: pandoc not found"; exit 1; }
|
|
44
|
+
@command -v python3 >/dev/null 2>&1 || { echo "ERROR: python3 not found"; exit 1; }
|
|
45
|
+
@mkdir -p tmp
|
|
46
|
+
pandoc --print-default-data-file reference.docx > tmp/ref-default.docx
|
|
47
|
+
python3 scripts/make-reference-docx.py tmp/ref-default.docx reference.docx
|
|
48
|
+
@rm -f tmp/ref-default.docx
|
|
49
|
+
|
|
50
|
+
html:
|
|
51
|
+
@if [ ! -d chapters ]; then \
|
|
52
|
+
echo "ERROR: Direktori chapters/ tidak ditemukan."; \
|
|
53
|
+
exit 1; \
|
|
54
|
+
fi; \
|
|
55
|
+
PRESET=$$(grep -E '^[[:space:]]*(preset|margin_preset):' metadata.yml 2>/dev/null | head -n 1 | cut -d: -f2- | tr -d '\"'\''\r\n '); \
|
|
56
|
+
PRESET_FILE=""; \
|
|
57
|
+
if [ -n "$$PRESET" ] && [ -f "presets/$${PRESET}.yml" ]; then \
|
|
58
|
+
PRESET_FILE="--metadata-file=presets/$${PRESET}.yml"; \
|
|
59
|
+
elif [ -f "presets/standard.yml" ]; then \
|
|
60
|
+
PRESET_FILE="--metadata-file=presets/standard.yml"; \
|
|
61
|
+
fi; \
|
|
62
|
+
pandoc chapters/bab*.md \
|
|
63
|
+
$$PRESET_FILE \
|
|
64
|
+
--metadata-file=metadata.yml \
|
|
65
|
+
--citeproc --bibliography=references.bib \
|
|
66
|
+
--csl=apa.csl \
|
|
67
|
+
--metadata=reference-section-title="DAFTAR PUSTAKA" \
|
|
68
|
+
--top-level-division=chapter \
|
|
69
|
+
--standalone --toc \
|
|
70
|
+
-o Laporan.html 2>&1
|
|
71
|
+
|
|
72
|
+
crossref:
|
|
73
|
+
@command -v pandoc-crossref >/dev/null 2>&1 || { \
|
|
74
|
+
echo "ERROR: pandoc-crossref not found."; \
|
|
75
|
+
echo "Install: https://github.com/lierdakil/pandoc-crossref"; \
|
|
76
|
+
exit 1; \
|
|
77
|
+
}
|
|
78
|
+
CITEPROC_OPTS="--filter pandoc-crossref" ./build.sh
|
|
79
|
+
|
|
80
|
+
test:
|
|
81
|
+
./test.sh
|
|
82
|
+
|
|
83
|
+
docker-build:
|
|
84
|
+
docker compose build
|
|
85
|
+
|
|
86
|
+
docker-run:
|
|
87
|
+
docker compose run --rm laporan-generator
|
|
88
|
+
|
|
89
|
+
docker-watch:
|
|
90
|
+
docker compose run --rm watch
|