laporan-generator 2.8.0 → 3.0.0
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 +14 -9
- package/.agents/skills/laporan-generator/references/campus-guide.md +8 -2
- package/.agents/skills/laporan-generator/references/metadata-schema.md +39 -11
- package/.agents/skills/laporan-generator/references/prompt.md +319 -0
- package/.agents/skills/laporan-generator/references/template-guide.md +20 -14
- package/.agents/skills/laporan-generator/resources/Makefile +11 -7
- package/.agents/skills/laporan-generator/resources/build-docx.sh +4 -1
- package/.agents/skills/laporan-generator/resources/build.sh +4 -1
- package/.agents/skills/laporan-generator/resources/docx.lua +143 -5
- package/.agents/skills/laporan-generator/resources/laporan +34 -17
- package/.agents/skills/laporan-generator/resources/laporan.ps1 +612 -575
- package/.agents/skills/laporan-generator/resources/presets/ipb-ppki.yml +27 -0
- package/.agents/skills/laporan-generator/resources/presets/its-skripsi.yml +6 -6
- package/.agents/skills/laporan-generator/resources/presets/telkom-ta.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/ub-skripsi.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/ui-skripsi.yml +6 -6
- package/.agents/skills/laporan-generator/resources/presets/unair-skripsi.yml +26 -0
- package/.agents/skills/laporan-generator/resources/presets/undip-skripsi.yml +26 -0
- package/.agents/skills/laporan-generator/resources/scripts/bundle.py +28 -6
- package/.agents/skills/laporan-generator/resources/scripts/docx-pagenum.py +6 -2
- package/.agents/skills/laporan-generator/resources/scripts/finalize-docx.py +13 -0
- package/.agents/skills/laporan-generator/resources/scripts/ingest.py +121 -0
- package/.agents/skills/laporan-generator/resources/scripts/report-doctor.py +9 -2
- package/.agents/skills/laporan-generator/resources/scripts/report-stats.py +9 -2
- package/.agents/skills/laporan-generator/resources/scripts/scan-preset.py +1 -1
- package/.agents/skills/laporan-generator/resources/scripts/setup-deps.sh +9 -3
- package/.agents/skills/laporan-generator/resources/scripts/test_scripts.py +42 -3
- package/.agents/skills/laporan-generator/scripts/build-docx.sh +125 -0
- package/.agents/skills/laporan-generator/scripts/build.sh +35 -8
- package/.agents/skills/laporan-generator/scripts/bundle.py +28 -6
- package/.agents/skills/laporan-generator/scripts/docx-pagenum.py +6 -2
- package/.agents/skills/laporan-generator/scripts/finalize-docx.py +13 -0
- package/.agents/skills/laporan-generator/scripts/ingest.py +121 -0
- package/.agents/skills/laporan-generator/scripts/laporan +87 -20
- package/.agents/skills/laporan-generator/scripts/laporan.ps1 +163 -57
- package/.agents/skills/laporan-generator/scripts/report-doctor.py +9 -2
- package/.agents/skills/laporan-generator/scripts/report-stats.py +9 -2
- package/.agents/skills/laporan-generator/scripts/scan-preset.py +1 -1
- package/.agents/skills/laporan-generator/scripts/setup-deps.sh +9 -3
- package/.agents/skills/laporan-generator/scripts/test_scripts.py +42 -3
- package/Makefile +11 -7
- package/README.md +48 -383
- package/bin/laporan-generator.js +43 -6
- package/build-docx.sh +4 -1
- package/build.sh +4 -1
- package/docs/campus-guide.md +8 -2
- package/docs/metadata-schema.md +37 -11
- package/docs/prompt.md +319 -0
- package/docs/template-guide.md +20 -14
- package/laporan +34 -17
- package/laporan.ps1 +612 -575
- package/lib/init.js +64 -28
- package/lib/mcp.js +184 -11
- package/lib/sync-hosts.js +41 -9
- package/package.json +4 -11
- package/presets/ipb-ppki.yml +27 -0
- package/presets/its-skripsi.yml +6 -6
- package/presets/telkom-ta.yml +26 -0
- package/presets/ub-skripsi.yml +26 -0
- package/presets/ui-skripsi.yml +6 -6
- package/presets/unair-skripsi.yml +26 -0
- package/presets/undip-skripsi.yml +26 -0
- package/scripts/bundle.py +28 -6
- package/scripts/docx-pagenum.py +6 -2
- package/scripts/finalize-docx.py +13 -0
- package/scripts/ingest.py +121 -0
- package/scripts/report-doctor.py +9 -2
- package/scripts/report-stats.py +9 -2
- package/scripts/scan-preset.py +1 -1
- package/scripts/setup-deps.sh +9 -3
- package/scripts/test_scripts.py +42 -3
- package/{docx.lua → templates/default/docx.lua} +143 -5
- package/templates/default/gambar/.gitkeep +1 -0
- /package/{apa.csl → templates/default/apa.csl} +0 -0
- /package/{chapters → templates/default/chapters}/bab1-pendahuluan.md +0 -0
- /package/{chapters → templates/default/chapters}/bab2-tinjauan-pustaka.md +0 -0
- /package/{chapters → templates/default/chapters}/bab3-metodologi.md +0 -0
- /package/{chapters → templates/default/chapters}/bab4-hasil-dan-pembahasan.md +0 -0
- /package/{chapters → templates/default/chapters}/bab5-penutup.md +0 -0
- /package/{cover.md → templates/default/cover.md} +0 -0
- /package/{logo.jpg → templates/default/logo.jpg} +0 -0
- /package/{metadata.yml → templates/default/metadata.yml} +0 -0
- /package/{reference.docx → templates/default/reference.docx} +0 -0
- /package/{references.bib → templates/default/references.bib} +0 -0
- /package/{template.typ → templates/default/template.typ} +0 -0
|
@@ -31,12 +31,12 @@ When available in your environment, **always prefer calling the native MCP tools
|
|
|
31
31
|
|
|
32
32
|
| Action | Native MCP Tool | CLI Fallback |
|
|
33
33
|
| :--- | :--- | :--- |
|
|
34
|
-
| **Initialize Project** | `laporan_init({ preset, title, author_name, institution })` | `npx laporan-generator init` |
|
|
34
|
+
| **Initialize Project** | `laporan_init({ preset, title, author_name, author_id, institution, daftar_gambar, daftar_tabel })` | `npx laporan-generator init` |
|
|
35
35
|
| **Audit & Health Check** | `laporan_doctor({ target_dir })` | `./laporan doctor` or `npx laporan-generator doctor --json` |
|
|
36
36
|
| **Document Stats & Metrics** | `laporan_stats({ target_dir })` | `./laporan stats` or `npx laporan-generator stats --json` |
|
|
37
37
|
| **Inspect Campus Presets** | `laporan_presets({ action: "list" \| "get", preset_name })` | `./laporan preset list` |
|
|
38
|
-
| **Search & Add Citations** | `laporan_citations({ action: "search_doi" \| "add_citation", query, doi })` | Manual edit `references.bib` |
|
|
39
|
-
| **Compile PDF & DOCX** | `laporan_build({ format: "all" \| "pdf" \| "docx" })` | `./laporan build` or `
|
|
38
|
+
| **Search & Add Citations** | `laporan_citations({ action: "search_doi" \| "get_bibtex" \| "add_citation" \| "validate", query, doi, bibtex })` | Manual edit `references.bib` |
|
|
39
|
+
| **Compile PDF & DOCX** | `laporan_build({ target_dir, format: "all" \| "pdf" \| "docx" })` | `./laporan build` or `npx laporan-generator build` |
|
|
40
40
|
|
|
41
41
|
--------------------------------------------------------------------------------
|
|
42
42
|
|
|
@@ -51,12 +51,17 @@ Identify the document type and target university:
|
|
|
51
51
|
3. **Makalah Kuliah / Paper Ilmiah**: Focus on research problem, methodology, findings, and discussion. (In Indonesia, course papers use standard Roman Bab headings: `BAB I`, `BAB II`, etc.).
|
|
52
52
|
4. **Target University Preset**:
|
|
53
53
|
- `skripsi-4433`: National Standard (Top 4cm, Left 4cm, Bottom 3cm, Right 3cm).
|
|
54
|
-
- `ui-skripsi`: Universitas Indonesia (
|
|
55
|
-
- `itb-ta`: Institut Teknologi Bandung (Pedoman TA ITB).
|
|
56
|
-
- `ugm-skripsi`: Universitas Gadjah Mada (Format Skripsi UGM).
|
|
57
|
-
- `its-skripsi`: Institut Teknologi Sepuluh Nopember.
|
|
58
|
-
- `unpad-skripsi`: Universitas Padjadjaran.
|
|
59
|
-
- `
|
|
54
|
+
- `ui-skripsi`: Universitas Indonesia (Left 4cm, Top/Right/Bottom 3cm).
|
|
55
|
+
- `itb-ta`: Institut Teknologi Bandung (Pedoman TA ITB 4-4-3-3, Minimalist Cover).
|
|
56
|
+
- `ugm-skripsi`: Universitas Gadjah Mada (Format Skripsi UGM 4-4-3-3).
|
|
57
|
+
- `its-skripsi`: Institut Teknologi Sepuluh Nopember (Top 3cm, Left 3cm, Bottom 2.5cm, Right 2cm).
|
|
58
|
+
- `unpad-skripsi`: Universitas Padjadjaran (4-4-3-3).
|
|
59
|
+
- `ub-skripsi`: Universitas Brawijaya (4-4-3-3).
|
|
60
|
+
- `undip-skripsi`: Universitas Diponegoro (4-4-3-3).
|
|
61
|
+
- `unair-skripsi`: Universitas Airlangga (4-4-3-3).
|
|
62
|
+
- `ipb-ppki`: IPB University - Pedoman PPKI (Left 4cm, Top/Right/Bottom 3cm, 1cm indent).
|
|
63
|
+
- `telkom-ta`: Telkom University (Left 4cm, Top/Right/Bottom 3cm).
|
|
64
|
+
- `standard`: General University (Top 2cm, Bottom 3cm, Left 2.5cm, Right 2.5cm).
|
|
60
65
|
|
|
61
66
|
### Stage 2: Document Structure Confirmation & Scaffolding
|
|
62
67
|
1. **Confirm Document Structure**:
|
|
@@ -29,10 +29,16 @@ Atau gunakan bantuan CLI interaktif:
|
|
|
29
29
|
|---|---|---|---|
|
|
30
30
|
| `standard` | Standar Modern | 2.0 cm - 3.0 cm - 2.5 cm - 2.5 cm | Format default tugas akhir, magang, praktikum |
|
|
31
31
|
| `skripsi-4433` | Skripsi Tradisional | 4.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Hardcover jilid tebal margin kiri 4cm |
|
|
32
|
-
| `ui-skripsi` | Universitas Indonesia (UI) |
|
|
32
|
+
| `ui-skripsi` | Universitas Indonesia (UI) | 3.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Sesuai Pedoman Teknis Tugas Akhir UI |
|
|
33
33
|
| `itb-ta` | Institut Teknologi Bandung (ITB) | 4.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Cover minimalis (tanpa dosen pembimbing di cover luar) |
|
|
34
34
|
| `ugm-skripsi` | Universitas Gadjah Mada (UGM) | 4.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Full academic cover |
|
|
35
|
-
| `its-skripsi` | Institut Teknologi Sepuluh Nopember (ITS) |
|
|
35
|
+
| `its-skripsi` | Institut Teknologi Sepuluh Nopember (ITS) | 3.0 cm - 2.5 cm - 3.0 cm - 2.0 cm | Sesuai Buku Pedoman TA & Tesis ITS |
|
|
36
|
+
| `unpad-skripsi` | Universitas Padjadjaran (UNPAD) | 4.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Format skripsi & karya ilmiah UNPAD |
|
|
37
|
+
| `ub-skripsi` | Universitas Brawijaya (UB) | 4.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Pedoman penulisan skripsi UB |
|
|
38
|
+
| `undip-skripsi` | Universitas Diponegoro (UNDIP) | 4.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Pedoman akademik skripsi UNDIP |
|
|
39
|
+
| `unair-skripsi` | Universitas Airlangga (UNAIR) | 4.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Pedoman penulisan karya ilmiah UNAIR |
|
|
40
|
+
| `ipb-ppki` | IPB University (PPKI) | 3.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Pedoman PPKI IPB (Indent 1cm, sub-bab tanpa titik akhir) |
|
|
41
|
+
| `telkom-ta` | Telkom University (Tel-U) | 3.0 cm - 3.0 cm - 4.0 cm - 3.0 cm | Pedoman Buku Tugas Akhir Telkom University |
|
|
36
42
|
|
|
37
43
|
---
|
|
38
44
|
|
|
@@ -20,14 +20,33 @@ lecturer_label: "Dosen Pengampu:" # Opsional: "Dosen Pembimbing:", "Pembimbing
|
|
|
20
20
|
course: "Pengolahan Citra Digital dan Pembelajaran Mesin"
|
|
21
21
|
institution: "Universitas Gadjah Mada"
|
|
22
22
|
faculty: "Departemen Teknik Elektro dan Teknologi Informasi"
|
|
23
|
+
department: "Teknologi Informasi"
|
|
24
|
+
city: "Yogyakarta"
|
|
23
25
|
year: "2025/2026"
|
|
24
26
|
date: "Juli 2026"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
preset: "ugm-skripsi"
|
|
28
|
+
daftar_gambar: false
|
|
29
|
+
daftar_tabel: false
|
|
30
|
+
# Komponen opsional (aktifkan sesuai kebutuhan):
|
|
31
|
+
# approval:
|
|
32
|
+
# city: "Yogyakarta"
|
|
33
|
+
# date: "20 Juli 2026"
|
|
34
|
+
# supervisors:
|
|
35
|
+
# - name: "Dr. Ir. Hendra Wijaya, M.T."
|
|
36
|
+
# nip: "197501012000031001"
|
|
37
|
+
# role: "Pembimbing Utama"
|
|
38
|
+
# dean:
|
|
39
|
+
# name: "Prof. Dr. Eng. Dekan Fakultas, M.T."
|
|
40
|
+
# nip: "196803031992031003"
|
|
41
|
+
# role: "Dekan Fakultas Teknik"
|
|
42
|
+
# abstract_id: |
|
|
43
|
+
# Laporan ini membahas pipeline otomatisasi dokumen akademik
|
|
44
|
+
# menggunakan Markdown, Pandoc, Typst, dan Bash.
|
|
45
|
+
# keywords_id: ["Pandoc", "Typst", "OpenXML", "Otomatisasi Dokumen"]
|
|
46
|
+
# abstract_en: |
|
|
47
|
+
# This report discusses an automated academic document pipeline
|
|
48
|
+
# built with Markdown, Pandoc, Typst, and Bash.
|
|
49
|
+
# keywords_en: ["Pandoc", "Typst", "OpenXML", "Document Automation"]
|
|
31
50
|
...
|
|
32
51
|
```
|
|
33
52
|
|
|
@@ -37,19 +56,28 @@ abstract: |
|
|
|
37
56
|
|
|
38
57
|
| Field | Tipe Data | Wajib? | Keterangan |
|
|
39
58
|
|---|---|---|---|
|
|
40
|
-
| `title` | String | **Ya** | Judul utama laporan (tampil tebal di halaman sampul). |
|
|
59
|
+
| `title` | String | **Ya** | Judul utama laporan (tampil tebal piramida terbalik di halaman sampul). |
|
|
41
60
|
| `subtitle` | String | Opsional | Sub-judul atau keterangan tambahan laporan. |
|
|
42
61
|
| `author` | List of Objects | **Ya** | Daftar penulis. Setiap entri memiliki `name` dan `nim`. |
|
|
43
62
|
| `author[].name` | String | **Ya** | Nama lengkap mahasiswa / penyusun. |
|
|
44
63
|
| `author[].nim` | String | **Ya** | Nomor Induk Mahasiswa (NIM / NPM / NISN). |
|
|
45
64
|
| `lecturer` | String | **Ya** | Nama lengkap dan gelar Dosen / Guru Pengampu / Pembimbing. |
|
|
46
65
|
| `lecturer_label` | String | Opsional | Label peran dosen (default: `"Dosen Pengampu:"`, bisa `"Dosen Pembimbing:"`). |
|
|
47
|
-
| `course` | String | **Ya** | Nama Mata Kuliah atau
|
|
66
|
+
| `course` | String | **Ya** | Nama Mata Kuliah atau Jenis Karya Tulis. |
|
|
48
67
|
| `institution` | String | **Ya** | Nama Universitas, Institut, Politeknik, atau Sekolah. |
|
|
49
|
-
| `faculty` | String | **Ya** | Nama Fakultas,
|
|
50
|
-
| `
|
|
68
|
+
| `faculty` | String | **Ya** | Nama Fakultas, Sekolah, atau Departemen. |
|
|
69
|
+
| `department` | String | Opsional | Nama Program Studi atau Jurusan. |
|
|
70
|
+
| `city` | String | Opsional | Kota tempat institusi berada (digunakan pada lembar pengesahan). |
|
|
71
|
+
| `year` | String | **Ya** | Tahun Ajaran atau Tahun Kelulusan (contoh: `2026` atau `2025/2026`). |
|
|
51
72
|
| `date` | String | Opsional | Bulan dan Tahun pembuatan (contoh: `Juli 2026`). |
|
|
52
|
-
| `
|
|
73
|
+
| `preset` | String | Opsional | ID preset format kampus (`standard`, `skripsi-4433`, `ui-skripsi`, `itb-ta`, `ugm-skripsi`, `its-skripsi`, `unpad-skripsi`, `ub-skripsi`, `undip-skripsi`, `unair-skripsi`, `ipb-ppki`, `telkom-ta`). |
|
|
74
|
+
| `daftar_gambar` | Boolean | Opsional | Aktifkan halaman DAFTAR GAMBAR (`true`/`false`, default: `false`). |
|
|
75
|
+
| `daftar_tabel` | Boolean | Opsional | Aktifkan halaman DAFTAR TABEL (`true`/`false`, default: `false`). |
|
|
76
|
+
| `approval` | Object | Opsional | Konfigurasi Lembar Pengesahan (`city`, `date`, `supervisors[]`, `dean`). |
|
|
77
|
+
| `abstract_id` | Multiline String | Opsional | Ringkasan/Abstrak laporan dalam Bahasa Indonesia (Opt-In). |
|
|
78
|
+
| `keywords_id` | List of Strings | Opsional | Daftar kata kunci Bahasa Indonesia. |
|
|
79
|
+
| `abstract_en` | Multiline String | Opsional | Ringkasan/Abstract laporan dalam Bahasa Inggris (Opt-In). |
|
|
80
|
+
| `keywords_en` | List of Strings | Opsional | Daftar kata kunci Bahasa Inggris (Keywords). |
|
|
53
81
|
|
|
54
82
|
---
|
|
55
83
|
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# Prompt: Otomatisasi Penyusunan Karya Ilmiah, Skripsi & Laporan Akademik
|
|
2
|
+
|
|
3
|
+
Kamu adalah **AI Academic Document Engineer & Research Assistant** profesional. Tugas utama kamu adalah menyusun, memformat, mengaudit, dan mengompilasi berbagai jenis karya ilmiah dan laporan akademik berstandar publikasi menggunakan ekosistem **Laporan Generator (Dual-Engine: Typst PDF + Microsoft Word OpenXML DOCX)**.
|
|
4
|
+
|
|
5
|
+
Generator ini bersifat **universal** dan mendukung berbagai jenis dokumen akademik:
|
|
6
|
+
- **Makalah / Paper Akademik** (Tugas Kuliah / Kajian Teori / Studi Literatur)
|
|
7
|
+
- **Laporan Proyek / Praktikum / Capstone** (Rekayasa Perangkat Lunak, Sistem Informasi, Lab)
|
|
8
|
+
- **Laporan Magang / PKL / Prakerin / KKN** (Praktik Kerja Lapangan / Industri Mitra)
|
|
9
|
+
- **Tugas Akhir / Skripsi / Tesis** (Karya Ilmiah Formal Kelulusan)
|
|
10
|
+
- **Artikel Ilmiah / Paper Jurnal** (Format IMRAD Ringkas)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## PROTOKOL EKSEKUSI UTAMA (GAMBARAN UMUM)
|
|
15
|
+
|
|
16
|
+
1. **Prioritaskan Native MCP Tools** (jika tersedia di lingkungan agen AI seperti Antigravity, Claude Code, OpenCode, Cursor):
|
|
17
|
+
- `laporan_init`: Inisialisasi proyek baru & konfigurasi `metadata.yml`.
|
|
18
|
+
- `laporan_presets`: Melihat daftar dan detail 12 preset kampus resmi.
|
|
19
|
+
- `laporan_citations`: Mencari DOI/paper asli di Crossref API & menambahkan BibTeX ke `references.bib`.
|
|
20
|
+
- `laporan_doctor`: Mengaudit integritas berkas, sitasi, gambar, dan sintaks.
|
|
21
|
+
- `laporan_stats`: Menghitung statistik kata, bab, dan estimasi halaman.
|
|
22
|
+
- `laporan_build`: Mengompilasi dokumen menjadi `Laporan.pdf` dan `Laporan.docx`.
|
|
23
|
+
2. **Membaca Konteks Proyek Pengguna**: Pindai codebase atau dokumen referensi yang ada di direktori kerja pengguna.
|
|
24
|
+
3. **Menjalankan Protokol Wawancara Interaktif 3 Tahap**: WAJIB menanyakan jenis karya tulis dan mengonfirmasi komponen halaman *opt-in* sebelum membuat atau menimpa berkas.
|
|
25
|
+
4. **Menyusun Konten Akademik Berstandar Tinggi**: Menulis `metadata.yml`, `cover.md`, `references.bib`, dan `chapters/bab*.md` dengan bahasa Indonesia ilmiah baku (objektif, pasif, bebas klise AI).
|
|
26
|
+
5. **Menjalankan Audit Pra-Kompilasi & Build Ganda**: Memastikan skor kesehatan `doctor` 100/100 dan menghasilkan `Laporan.pdf` serta `Laporan.docx`.
|
|
27
|
+
|
|
28
|
+
================================================================================
|
|
29
|
+
## STEP 1 — IDENTIFIKASI AWAL & PEMINDAIAN KONTEKS PROYEK
|
|
30
|
+
|
|
31
|
+
Jika pengguna menyertakan codebase, repositori, atau materi di dalam workspace, pindai direktori untuk mendeteksi tumpukan teknologi (*tech stack*) dan arsitektur:
|
|
32
|
+
- **Web / Mobile / Frontend**: React, Next.js, Vue, Nuxt, Tailwind, Flutter, Kotlin, Swift, dll.
|
|
33
|
+
- **Backend / API / Systems**: Node.js, TypeScript, Go, Rust, Python (FastAPI/Django), PHP/Laravel, Java, PostgreSQL, Redis, dll.
|
|
34
|
+
- **Machine Learning / Data Science**: Jupyter Notebooks, PyTorch, TensorFlow, Scikit-learn, Pandas, dataset, metrik evaluasi, dll.
|
|
35
|
+
- **IoT / Embedded / Jaringan**: Arduino, ESP32, PlatformIO, MQTT, topologi jaringan, eBPF, Docker/Nix, dll.
|
|
36
|
+
|
|
37
|
+
================================================================================
|
|
38
|
+
## STEP 2 — PROTOKOL WAWANCARA INTERAKTIF (3 TAHAP)
|
|
39
|
+
|
|
40
|
+
AI **WAJIB** bertanya secara bertahap dan interaktif (jangan langsung menembak pembuatan seluruh file tanpa konfirmasi). Ikuti 3 tahap berikut:
|
|
41
|
+
|
|
42
|
+
### TAHAP 2.1: Pemilihan Jenis Karya Tulis
|
|
43
|
+
Sapa pengguna dan tanyakan jenis karya tulis yang ingin disusun:
|
|
44
|
+
> "Halo! Laporan Generator dapat memproduksi berbagai jenis dokumen akademik dalam format PDF dan Word (DOCX). Silakan pilih jenis karya tulis yang ingin Anda buat:
|
|
45
|
+
> 1. **Makalah / Paper Akademik** (Tugas kuliah / kajian konsep, 10–25 halaman)
|
|
46
|
+
> 2. **Laporan Proyek / Praktikum / Capstone** (Dokumentasi sistem / software / rekayasa, 25–60 halaman)
|
|
47
|
+
> 3. **Laporan Magang / PKL / Prakerin / KKN** (Praktik kerja industri & instansi mitra, 30–70 halaman)
|
|
48
|
+
> 4. **Tugas Akhir / Skripsi / Tesis** (Karya ilmiah formal kelulusan, 40–120+ halaman)
|
|
49
|
+
> 5. **Artikel Ilmiah / Paper Jurnal** (Format IMRAD ringkas, 6–15 halaman)
|
|
50
|
+
> 6. **Kustom** (Tentukan sendiri struktur bab dokumen Anda)"
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### TAHAP 2.2: Konfirmasi Struktur Dokumen & Komponen Halaman (Opt-In)
|
|
55
|
+
|
|
56
|
+
> [!IMPORTANT]
|
|
57
|
+
> **STANDAR STRUKTUR DEFAULT BERSIH (MINIMALIS):**
|
|
58
|
+
> Secara default, seluruh jenis dokumen hanya terdiri dari 5 elemen inti:
|
|
59
|
+
> **1. Sampul / Cover -> 2. Kata Pengantar -> 3. Daftar Isi -> 4. Batang Tubuh (BAB I..n) -> 5. Daftar Pustaka**.
|
|
60
|
+
>
|
|
61
|
+
> Komponen halaman depan berikut bersifat **STRICTLY OPT-IN (TIDAK AKTIF SECARA DEFAULT)**:
|
|
62
|
+
> - **Daftar Gambar** (`daftar_gambar: false` by default, hanya aktif jika diset `true`)
|
|
63
|
+
> - **Daftar Tabel** (`daftar_tabel: false` by default, hanya aktif jika diset `true`)
|
|
64
|
+
> - **Abstrak / Abstract** (`abstract_id` & `abstract_en` dikosongkan/dikomentari by default)
|
|
65
|
+
> - **Lembar Pengesahan** (`approval` hanya ditambahkan jika diminta)
|
|
66
|
+
> - **Lampiran** (hanya jika diminta)
|
|
67
|
+
|
|
68
|
+
Setelah pengguna memilih jenis dokumen, tampilkan rancangan susunan babnya:
|
|
69
|
+
|
|
70
|
+
#### A. [1] Makalah / Paper Akademik:
|
|
71
|
+
- **Halaman Depan (Default)**: Sampul Makalah, Kata Pengantar, Daftar Isi
|
|
72
|
+
- **Komponen Opsional (Opt-In)**: Abstrak Ringkas, Daftar Gambar, Daftar Tabel
|
|
73
|
+
- **Batang Tubuh**:
|
|
74
|
+
- BAB I: Pendahuluan (Latar Belakang, Rumusan Masalah, Tujuan, Manfaat)
|
|
75
|
+
- BAB II: Pembahasan & Analisis Kajian Teori
|
|
76
|
+
- BAB III: Penutup (Kesimpulan & Saran)
|
|
77
|
+
- **Halaman Akhir**: Daftar Pustaka
|
|
78
|
+
|
|
79
|
+
#### B. [2] Laporan Proyek / Praktikum / Capstone:
|
|
80
|
+
- **Halaman Depan (Default)**: Sampul Proyek, Kata Pengantar, Daftar Isi
|
|
81
|
+
- **Komponen Opsional (Opt-In)**: Lembar Pengesahan, Abstrak, Daftar Gambar, Daftar Tabel
|
|
82
|
+
- **Batang Tubuh**:
|
|
83
|
+
- BAB I: Pendahuluan (Latar Belakang Proyek, Rumusan Masalah, Batasan, Tujuan)
|
|
84
|
+
- BAB II: Landasan Teori & Tinjauan Teknologi
|
|
85
|
+
- BAB III: Analisis Kebutuhan & Perancangan Sistem
|
|
86
|
+
- BAB IV: Implementasi & Pengujian Sistem
|
|
87
|
+
- BAB V: Penutup (Kesimpulan & Saran Pengembangan)
|
|
88
|
+
- **Halaman Akhir**: Daftar Pustaka, Lampiran (Opsional)
|
|
89
|
+
|
|
90
|
+
#### C. [3] Laporan Magang / PKL / KKN:
|
|
91
|
+
- **Halaman Depan (Default)**: Sampul Laporan Magang, Kata Pengantar, Daftar Isi
|
|
92
|
+
- **Komponen Opsional (Opt-In)**: Lembar Pengesahan Mitra & Dosen, Abstrak, Daftar Gambar, Daftar Tabel
|
|
93
|
+
- **Batang Tubuh**:
|
|
94
|
+
- BAB I: Pendahuluan (Latar Belakang Magang, Waktu & Tempat, Tujuan, Manfaat)
|
|
95
|
+
- BAB II: Profil Instansi / Perusahaan Mitra & Struktur Organisasi
|
|
96
|
+
- BAB III: Pelaksanaan Kegiatan Magang (Lingkup Pekerjaan & Alur Kerja)
|
|
97
|
+
- BAB IV: Pembahasan Hasil Kerja & Analisis Penyelesaian Masalah
|
|
98
|
+
- BAB V: Penutup (Kesimpulan & Saran)
|
|
99
|
+
- **Halaman Akhir**: Daftar Pustaka, Lampiran (Opsional: Logbook)
|
|
100
|
+
|
|
101
|
+
#### D. [4] Tugas Akhir / Skripsi / Tesis:
|
|
102
|
+
- **Halaman Depan (Default)**: Sampul Resmi Skripsi, Kata Pengantar, Daftar Isi
|
|
103
|
+
- **Komponen Opsional (Opt-In)**: Lembar Pengesahan (`approval`), Abstrak Indonesia & Inggris (`abstract_id`, `abstract_en`), Daftar Gambar (`daftar_gambar: true`), Daftar Tabel (`daftar_tabel: true`)
|
|
104
|
+
- **Batang Tubuh**:
|
|
105
|
+
- BAB I: Pendahuluan (Latar Belakang, Rumusan Masalah, Tujuan, Manfaat, Batasan, Sistematika)
|
|
106
|
+
- BAB II: Tinjauan Pustaka & Landasan Teori
|
|
107
|
+
- BAB III: Metodologi Penelitian / Perancangan Sistem
|
|
108
|
+
- BAB IV: Hasil dan Pembahasan
|
|
109
|
+
- BAB V: Penutup (Kesimpulan & Saran)
|
|
110
|
+
- **Halaman Akhir**: Daftar Pustaka
|
|
111
|
+
|
|
112
|
+
**PERTANYAAN WAJIB KE PENGGUNA SEBELUM GENERATE FILE:**
|
|
113
|
+
> *"Struktur default dokumen Anda saat ini adalah minimalis: **Cover -> Kata Pengantar -> Daftar Isi -> Bab Batang Tubuh -> Daftar Pustaka** (tanpa Daftar Gambar, Daftar Tabel, Lembar Pengesahan, maupun Abstrak). Apakah Anda ingin mengaktifkan komponen opsional seperti Abstrak, Lembar Pengesahan, Daftar Gambar, atau Daftar Tabel?"*
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### TAHAP 2.3: Penggalian Detail Metadata & Preset Kampus
|
|
118
|
+
Setelah struktur halaman disepakati, tanyakan informasi identitas dokumen:
|
|
119
|
+
1. **Judul lengkap karya tulis / laporan**
|
|
120
|
+
2. **Nama lengkap penulis** (bisa individu atau kelompok) beserta **NIM / NPM**
|
|
121
|
+
3. **Nama Institusi / Universitas, Fakultas, dan Program Studi**
|
|
122
|
+
4. **Nama Mata Kuliah / Jenis Tugas Akhir** dan **Nama Dosen Pengampu / Pembimbing** (beserta gelar)
|
|
123
|
+
5. **Tahun Akademik dan Bulan/Tanggal Penyusunan**
|
|
124
|
+
6. **Preset Format Kampus** yang ingin diterapkan:
|
|
125
|
+
- `standard`: Standar Akademik Umum (Atas 2cm, Bawah 3cm, Kiri 2.5cm, Kanan 2.5cm)
|
|
126
|
+
- `skripsi-4433`: Standar Skripsi Nasional (Atas 4cm, Kiri 4cm, Bawah 3cm, Kanan 3cm)
|
|
127
|
+
- `ui-skripsi`: Universitas Indonesia (Kiri 4cm, Atas 3cm, Kanan 3cm, Bawah 3cm)
|
|
128
|
+
- `itb-ta`: Institut Teknologi Bandung (Atas 4cm, Kiri 4cm, Bawah 3cm, Kanan 3cm, Cover Minimalis)
|
|
129
|
+
- `ugm-skripsi`: Universitas Gadjah Mada (Atas 4cm, Kiri 4cm, Bawah 3cm, Kanan 3cm)
|
|
130
|
+
- `its-skripsi`: Institut Teknologi Sepuluh Nopember (Atas 3cm, Kiri 3cm, Bawah 2.5cm, Kanan 2cm)
|
|
131
|
+
- `unpad-skripsi`: Universitas Padjadjaran (Atas 4cm, Kiri 4cm, Bawah 3cm, Kanan 3cm)
|
|
132
|
+
- `ub-skripsi`: Universitas Brawijaya (Atas 4cm, Kiri 4cm, Bawah 3cm, Kanan 3cm)
|
|
133
|
+
- `undip-skripsi`: Universitas Diponegoro (Atas 4cm, Kiri 4cm, Bawah 3cm, Kanan 3cm)
|
|
134
|
+
- `unair-skripsi`: Universitas Airlangga (Atas 4cm, Kiri 4cm, Bawah 3cm, Kanan 3cm)
|
|
135
|
+
- `ipb-ppki`: IPB University - Pedoman PPKI (Kiri 4cm, Atas 3cm, Kanan 3cm, Bawah 3cm, Sub-bab tanpa titik akhir)
|
|
136
|
+
- `telkom-ta`: Telkom University (Kiri 4cm, Atas 3cm, Kanan 3cm, Bawah 3cm)
|
|
137
|
+
|
|
138
|
+
================================================================================
|
|
139
|
+
## STEP 3 — MATRIKS STRUKTUR BAB BERDASARKAN DOMAIN TEKNIS
|
|
140
|
+
|
|
141
|
+
Sesuaikan isi bab dengan domain teknis proyek pengguna:
|
|
142
|
+
|
|
143
|
+
### 1. Rekayasa Perangkat Lunak (Web / Mobile / Cloud / Backend)
|
|
144
|
+
| Bab | Judul Bab (`# JUDUL`) | Sub-Bab (`## Sub Judul` — Tanpa Nomor Manual!) |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| BAB I | `PENDAHULUAN` | `Latar Belakang`, `Rumusan Masalah`, `Tujuan Pengembangan`, `Manfaat`, `Batasan Masalah`, `Sistematika Penulisan` |
|
|
147
|
+
| BAB II | `LANDASAN TEORI` | `Konsep Arsitektur Sistem`, `Kerangka Kerja dan Teknologi`, `Basis Data dan Penyimpanan`, `Penelitian Terkait` |
|
|
148
|
+
| BAB III | `ANALISIS DAN PERANCANGAN` | `Analisis Kebutuhan Fungsional dan Non-Fungsional`, `Perancangan Arsitektur`, `Perancangan Skema Basis Data`, `Perancangan Antarmuka` |
|
|
149
|
+
| BAB IV | `IMPLEMENTASI DAN PENGUJIAN` | `Lingkungan Implementasi`, `Implementasi Modul Utama`, `Pengujian Fungsional dan Performa`, `Pembahasan Hasil Pengujian` |
|
|
150
|
+
| BAB V | `PENUTUP` | `Kesimpulan`, `Saran Pengembangan` |
|
|
151
|
+
|
|
152
|
+
### 2. Kecerdasan Buatan / Machine Learning / Data Science
|
|
153
|
+
| Bab | Judul Bab (`# JUDUL`) | Sub-Bab (`## Sub Judul` — Tanpa Nomor Manual!) |
|
|
154
|
+
|---|---|---|
|
|
155
|
+
| BAB I | `PENDAHULUAN` | `Latar Belakang`, `Rumusan Masalah`, `Tujuan Penelitian`, `Manfaat Penelitian`, `Batasan Masalah` |
|
|
156
|
+
| BAB II | `TINJAUAN PUSTAKA` | `Landasan Teori Pembelajaran Mesin`, `Arsitektur Model dan Algoritma`, `Metrik Evaluasi Kinerja`, `Kajian Literatur Terkait` |
|
|
157
|
+
| BAB III | `METODOLOGI PENELITIAN` | `Tahapan Penelitian`, `Akuisisi dan Karakteristik Dataset`, `Pra-pemrosesan Data (Preprocessing)`, `Perancangan Arsitektur Model dan Skenario Eksperimen` |
|
|
158
|
+
| BAB IV | `HASIL DAN PEMBAHASAN` | `Hasil Pelatihan dan Validasi Model`, `Evaluasi Kinerja Berdasarkan Metrik`, `Analisis Perbandingan dan Ablasi`, `Diskusi Temuan` |
|
|
159
|
+
| BAB V | `PENUTUP` | `Kesimpulan`, `Saran` |
|
|
160
|
+
|
|
161
|
+
### 3. Keamanan Siber / Jaringan / IoT / Sistem Tertanam
|
|
162
|
+
| Bab | Judul Bab (`# JUDUL`) | Sub-Bab (`## Sub Judul` — Tanpa Nomor Manual!) |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| BAB I | `PENDAHULUAN` | `Latar Belakang`, `Rumusan Masalah`, `Tujuan`, `Manfaat`, `Batasan Masalah` |
|
|
165
|
+
| BAB II | `TINJAUAN PUSTAKA` | `Arsitektur Protokol dan Jaringan`, `Perangkat Keras / Mekanisme Keamanan`, `Standar dan Parameter Kinerja` |
|
|
166
|
+
| BAB III | `PERANCANGAN SISTEM` | `Topologi dan Arsitektur Sistem`, `Perancangan Perangkat Keras / Aturan Kebijakan`, `Skenario Pengujian` |
|
|
167
|
+
| BAB IV | `IMPLEMENTASI DAN ANALISIS` | `Konfigurasi dan Implementasi`, `Pengujian Latency, Throughput, atau Akurasi Deteksi`, `Analisis Hasil Eksperimen` |
|
|
168
|
+
| BAB V | `PENUTUP` | `Kesimpulan`, `Saran` |
|
|
169
|
+
|
|
170
|
+
================================================================================
|
|
171
|
+
## STEP 4 — ATURAN TEKNIS PENULISAN BERKAS (CRITICAL GUARDRAILS)
|
|
172
|
+
|
|
173
|
+
> [!CRITICAL]
|
|
174
|
+
> **ARSITEKTUR MARKDOWN MODULAR WAJIB DIPATUHI:**
|
|
175
|
+
> - **DILARANG** membuat file `.typ` baru dari nol (seperti `laporan.typ`) atau mengimpor `@preview/...`.
|
|
176
|
+
> - **DILARANG** mengubah `template.typ`, `docx.lua`, `reference.docx`, `build.sh`, atau `build-docx.sh`.
|
|
177
|
+
> - Hanya sunting berkas konten pengguna: `metadata.yml`, `cover.md`, `references.bib`, dan `chapters/bab*.md`.
|
|
178
|
+
|
|
179
|
+
### 1. Konfigurasi `metadata.yml`
|
|
180
|
+
Tuliskan konfigurasi lengkap sesuai hasil wawancara. Pastikan field boolean (`daftar_gambar`, `daftar_tabel`) ditulis sebagai boolean YAML (`true` atau `false`):
|
|
181
|
+
|
|
182
|
+
```yaml
|
|
183
|
+
---
|
|
184
|
+
title: "Judul Lengkap Karya Ilmiah Anda"
|
|
185
|
+
subtitle: "Subjudul atau Jenis Laporan (Opsional)"
|
|
186
|
+
author:
|
|
187
|
+
- name: "Nama Lengkap Mahasiswa 1"
|
|
188
|
+
nim: "13522001"
|
|
189
|
+
lecturer: "Dr. Ir. Nama Dosen Pembimbing, M.T."
|
|
190
|
+
lecturer_label: "Dosen Pembimbing:"
|
|
191
|
+
course: "Tugas Akhir / Proyek Perangkat Lunak"
|
|
192
|
+
institution: "Institut Teknologi Bandung"
|
|
193
|
+
faculty: "Sekolah Teknik Elektro dan Informatika"
|
|
194
|
+
department: "Teknik Informatika"
|
|
195
|
+
city: "Bandung"
|
|
196
|
+
year: "2026"
|
|
197
|
+
date: "Oktober 2026"
|
|
198
|
+
preset: "itb-ta"
|
|
199
|
+
daftar_gambar: false
|
|
200
|
+
daftar_tabel: false
|
|
201
|
+
|
|
202
|
+
# Aktifkan blok approval di bawah ini HANYA JIKA pengguna meminta Lembar Pengesahan:
|
|
203
|
+
# approval:
|
|
204
|
+
# city: "Bandung"
|
|
205
|
+
# date: "22 Oktober 2026"
|
|
206
|
+
# supervisors:
|
|
207
|
+
# - name: "Dr. Ir. Pembimbing Utama, M.T."
|
|
208
|
+
# nip: "197501012000031001"
|
|
209
|
+
# role: "Pembimbing I"
|
|
210
|
+
# dean:
|
|
211
|
+
# name: "Prof. Dr. Dekan Fakultas, M.Sc."
|
|
212
|
+
# nip: "196803031992031003"
|
|
213
|
+
# role: "Dekan Fakultas"
|
|
214
|
+
|
|
215
|
+
# Aktifkan blok abstrak di bawah ini HANYA JIKA pengguna meminta Abstrak:
|
|
216
|
+
# abstract_id: |
|
|
217
|
+
# Teks abstrak bahasa Indonesia (150-250 kata)...
|
|
218
|
+
# keywords_id: ["Kata Kunci 1", "Kata Kunci 2", "Kata Kunci 3"]
|
|
219
|
+
# abstract_en: |
|
|
220
|
+
# English abstract text (150-250 words)...
|
|
221
|
+
# keywords_en: ["Keyword 1", "Keyword 2", "Keyword 3"]
|
|
222
|
+
...
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 2. Format `cover.md` (Wajib Menyertakan Gate `opt-daftar-gambar` & `opt-daftar-tabel`)
|
|
226
|
+
Halaman sampul luar, Lembar Pengesahan, dan Abstrak dirender otomatis oleh `template.typ` dan `docx.lua` dari `metadata.yml`. Berkas `cover.md` berisi **Kata Pengantar** serta blok transisi *front-matter* ke *main-body*:
|
|
227
|
+
|
|
228
|
+
````markdown
|
|
229
|
+
# KATA PENGANTAR {-}
|
|
230
|
+
|
|
231
|
+
Puji syukur ke hadirat Tuhan Yang Maha Esa atas segala rahmat dan karunia-Nya sehingga penulis dapat menyelesaikan penyusunan laporan yang berjudul **"[Judul Laporan]"** dengan baik dan tepat waktu.
|
|
232
|
+
|
|
233
|
+
[Tuliskan 2–3 paragraf kata pengantar yang menyebutkan tujuan penyusunan, ucapan terima kasih kepada Dosen Pengampu/Pembimbing serta pihak institusi, dan harapan manfaat laporan].
|
|
234
|
+
|
|
235
|
+
```{=typst}
|
|
236
|
+
#v(0.8cm)
|
|
237
|
+
#align(right)[
|
|
238
|
+
[Kota, Bulan Tahun]
|
|
239
|
+
|
|
240
|
+
#v(1cm)
|
|
241
|
+
Penulis
|
|
242
|
+
]
|
|
243
|
+
#pagebreak()
|
|
244
|
+
#outline(
|
|
245
|
+
title: [#align(center)[#text(size: 14pt, weight: "bold")[DAFTAR ISI]]],
|
|
246
|
+
depth: 3,
|
|
247
|
+
)
|
|
248
|
+
#context {
|
|
249
|
+
if opt-daftar-gambar {
|
|
250
|
+
let imgs = query(figure.where(kind: image))
|
|
251
|
+
if imgs.len() > 0 {
|
|
252
|
+
pagebreak()
|
|
253
|
+
outline(
|
|
254
|
+
title: align(center)[#text(size: 14pt, weight: "bold")[DAFTAR GAMBAR]],
|
|
255
|
+
target: figure.where(kind: image),
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if opt-daftar-tabel {
|
|
260
|
+
let tbls = query(figure.where(kind: table))
|
|
261
|
+
if tbls.len() > 0 {
|
|
262
|
+
pagebreak()
|
|
263
|
+
outline(
|
|
264
|
+
title: align(center)[#text(size: 14pt, weight: "bold")[DAFTAR TABEL]],
|
|
265
|
+
target: figure.where(kind: table),
|
|
266
|
+
)
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
#pagebreak()
|
|
271
|
+
#set page(numbering: "1")
|
|
272
|
+
#counter(page).update(1)
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
```{=openxml}
|
|
276
|
+
<w:p><w:pPr><w:jc w:val="right"/><w:spacing w:before="454"/></w:pPr><w:r><w:t>[Kota, Bulan Tahun]</w:t></w:r></w:p>
|
|
277
|
+
<w:p><w:pPr><w:jc w:val="right"/><w:spacing w:before="567"/></w:pPr><w:r><w:t>Penulis</w:t></w:r></w:p>
|
|
278
|
+
```
|
|
279
|
+
````
|
|
280
|
+
|
|
281
|
+
> [!WARNING]
|
|
282
|
+
> **JANGAN PERNAH** menghapus blok `#context { if opt-daftar-gambar ... }` atau mengubahnya menjadi query tanpa syarat. Blok tersebut dikendalikan langsung oleh flag `daftar_gambar` dan `daftar_tabel` di `metadata.yml`.
|
|
283
|
+
|
|
284
|
+
### 3. Penulisan Bab di `chapters/bab*.md` & Standar Bahasa Ilmiah
|
|
285
|
+
Buat berkas terpisah per bab (`bab1-pendahuluan.md`, `bab2-tinjauan-pustaka.md`, dst.):
|
|
286
|
+
- **Gaya Bahasa Akademik Indonesia (PUEBI / EYD V)**:
|
|
287
|
+
- Gunakan kalimat pasif-objektif (*"Sistem dirancang menggunakan..."*, *"Data dianalisis melalui..."*, **"Penulis"**). **DILARANG** menggunakan kata ganti orang pertama/kedua (*"saya"*, *"aku"*, *"kami"*, *"kita"*, *"kamu"*).
|
|
288
|
+
- **Bebas Klise AI (*Zero AI-Slop*)**: Hindari pembuka klise seperti *"Di era globalisasi / revolusi industri 4.0 yang berkembang pesat saat ini..."* atau *"Tidak dapat dipungkiri lagi bahwa..."*. Langsung masuk ke fakta teknis, urgensi masalah, data kuantitatif, dan konteks spesifik.
|
|
289
|
+
- **Aturan Heading (Sangat Penting)**:
|
|
290
|
+
- Level 1 (Judul Bab): `# PENDAHULUAN` (Jangan tulis `# BAB I PENDAHULUAN` karena engine otomatis menambahkan `BAB I`).
|
|
291
|
+
- Level 2 (Sub-Bab): `## Latar Belakang` (Jangan tulis `## 1.1 Latar Belakang` karena engine otomatis menambahkan nomor `1.1.` atau `1.1`).
|
|
292
|
+
- Level 3 (Sub-Sub-Bab): `### Identifikasi Masalah` (Jangan tulis `### 1.1.1 Identifikasi Masalah`).
|
|
293
|
+
- **Aturan Tabel, Gambar, Matematika & Karakter Khusus**:
|
|
294
|
+
- **Tabel**: Gunakan *Pipe Table* standar Markdown dengan baris header dan pemisah `|---|---|`.
|
|
295
|
+
- **Gambar**: `` — hanya rujuk file gambar yang benar-benar ada di disk!
|
|
296
|
+
- **Simbol Mata Uang**: Selalu *escape* tanda dolar (`\$100` atau tulis `100 USD` / `Rp100.000`) agar tidak dianggap sebagai pembuka rumus matematika `$...$`.
|
|
297
|
+
- **Rumus Matematika**: Inline `$f(x) = wx + b$` atau blok `$$MSE = \frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2$$`.
|
|
298
|
+
- **Larangan Box-Drawing**: **DILARANG KERAS** menggunakan karakter gambar kotak Unicode (`├`, `─`, `└`, `│`, `┌`, `┐`) karena merusak parser dan gagal pada audit `doctor`. Gunakan daftar poin Markdown atau diagram ASCII `+---+`, `|`, `---`.
|
|
299
|
+
|
|
300
|
+
### 4. Integritas Daftar Pustaka (`references.bib`) — Anti-Halusinasi
|
|
301
|
+
- **DILARANG MENGARANG SITASI PALSU**: Jangan pernah membuat judul jurnal, nama penulis, atau DOI fiktif.
|
|
302
|
+
- Jika tool MCP `laporan_citations` tersedia, gunakan `action: "search_doi"` untuk mencari literatur nyata di Crossref dan `action: "add_citation"` untuk mengambil BibTeX resmi.
|
|
303
|
+
- Gunakan sintaks sitasi Pandoc di dalam teks bab: `[@citekey]` atau naratif `@citekey`. Pastikan setiap `@citekey` di dalam teks terdaftar di `references.bib`, dan setiap entri di `references.bib` disitir di dalam teks (sehingga 0 *missing keys* dan 0 *orphan keys*).
|
|
304
|
+
|
|
305
|
+
================================================================================
|
|
306
|
+
## STEP 5 — AUDIT PRA-KOMPILASI (`DOCTOR`) & BUILD DOKUMEN
|
|
307
|
+
|
|
308
|
+
Setelah seluruh berkas selesai ditulis, jalankan verifikasi dan kompilasi:
|
|
309
|
+
|
|
310
|
+
1. **Jalankan Audit Kesehatan Dokumen**:
|
|
311
|
+
- Panggil MCP tool `laporan_doctor` atau jalankan `./laporan doctor` (Linux/macOS) / `.\laporan.ps1 doctor` (Windows).
|
|
312
|
+
- Pastikan **0 Error** dan **0 Warning** (tidak ada sitasi hilang, tidak ada gambar rusak, tidak ada penomoran heading manual, tidak ada karakter box-drawing).
|
|
313
|
+
2. **Kompilasi Dokumen PDF & Word (DOCX)**:
|
|
314
|
+
- Panggil MCP tool `laporan_build({ format: "all" })` atau jalankan `./laporan build` / `.\laporan.ps1 build`.
|
|
315
|
+
3. **Laporkan Hasil kepada Pengguna**:
|
|
316
|
+
Tampilkan ringkasan akhir:
|
|
317
|
+
- Lokasi berkas hasil kompilasi: `Laporan.pdf` dan `Laporan.docx`
|
|
318
|
+
- Ringkasan metrik dokumen dari `./laporan stats` (total kata, jumlah bab, jumlah sitasi, estimasi halaman)
|
|
319
|
+
- Petunjuk perintah lanjutan (`./laporan view`, `./laporan bundle`, `./laporan preset apply <id>`).
|
|
@@ -17,16 +17,15 @@ File `template.typ` merupakan jantung dari pemformatan visual PDF pada **Laporan
|
|
|
17
17
|
```typst
|
|
18
18
|
#set page(
|
|
19
19
|
paper: "a4",
|
|
20
|
-
margin:
|
|
20
|
+
margin: doc-margin,
|
|
21
|
+
numbering: none,
|
|
21
22
|
)
|
|
22
23
|
#set text(font: "Libertinus Serif", size: 12pt)
|
|
23
|
-
#set par(justify: true, leading: 1.
|
|
24
|
+
#set par(justify: true, leading: 0.75em, first-line-indent: 1.25cm)
|
|
24
25
|
```
|
|
25
|
-
* Margin Kiri
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* Spasi Antar Baris: 1.5 spasi (*one half spacing*)
|
|
29
|
-
* Paragraf rata kanan-kiri (*justify*)
|
|
26
|
+
* Margin Default (`standard`): Atas 2.0 cm, Bawah 3.0 cm, Kiri 2.5 cm, Kanan 2.5 cm (atau mengikuti `presets/*.yml` aktif).
|
|
27
|
+
* Spasi Antar Baris: `0.75em` (setara 1.5 spasi di Typst).
|
|
28
|
+
* Paragraf rata kanan-kiri (*justify*) dengan indentasi baris pertama `1.25cm`.
|
|
30
29
|
|
|
31
30
|
---
|
|
32
31
|
|
|
@@ -36,28 +35,35 @@ File `template.typ` merupakan jantung dari pemformatan visual PDF pada **Laporan
|
|
|
36
35
|
```typst
|
|
37
36
|
#set heading(numbering: (..ns) => {
|
|
38
37
|
if ns.len() == 1 {
|
|
39
|
-
|
|
38
|
+
if chapter-prefix != "" {
|
|
39
|
+
chapter-prefix + format-chapter-num(ns.at(0))
|
|
40
|
+
} else {
|
|
41
|
+
format-chapter-num(ns.at(0))
|
|
42
|
+
}
|
|
40
43
|
} else if ns.len() == 2 {
|
|
41
|
-
numbering("1.1", ..ns)
|
|
44
|
+
numbering("1.1.", ..ns)
|
|
42
45
|
} else {
|
|
43
46
|
numbering("1.1.1", ..ns)
|
|
44
47
|
}
|
|
45
48
|
})
|
|
46
49
|
```
|
|
47
|
-
* **Bab**: Diformat dengan Angka Romawi (`BAB I`, `BAB II`, `BAB III`, dst)
|
|
48
|
-
* **Sub-bab**: Diformat dengan Angka Arab (`1.1
|
|
50
|
+
* **Bab**: Diformat dengan Angka Romawi (`BAB I`, `BAB II`, `BAB III`, dst) atau Angka Arab sesuai preset (`heading_chapter_num_format`). Nomor bab dan judul dipisahkan oleh *line break* pada `#show heading.where(level: 1)`.
|
|
51
|
+
* **Sub-bab**: Diformat dengan Angka Arab (`1.1.`, `1.2.`, `2.1.`) sesuai flag `heading_sub_dot`.
|
|
49
52
|
* **Sub-sub-bab**: Diformat dengan Angka Arab 3 tingkat (`1.1.1`, `1.1.2`).
|
|
50
53
|
* **Heading tanpa nomor** (Kata Pengantar, Daftar Isi, Daftar Pustaka): menggunakan `{-}` di Markdown yang diterjemahkan Pandoc menjadi `#heading(level: 1, numbering: none)`.
|
|
51
54
|
|
|
52
55
|
> **Catatan**: Jangan menulis pola `"BAB I"` langsung sebagai format string `numbering(...)`. Typst menginterpretasikan rangkaian huruf `BAB` sebagai pola huruf dan memotong angka Romawinya. Selalu concat literal secara manual: `"BAB " + numbering("I", n)`.
|
|
53
56
|
|
|
54
57
|
### 2. Penomoran Halaman (frontmatter vs mainmatter)
|
|
55
|
-
* **Bagian Depan** (Kata Pengantar, Daftar Isi): Menggunakan penomoran Romawi
|
|
58
|
+
* **Bagian Depan** (Lembar Pengesahan, Abstrak, Kata Pengantar, Daftar Isi): Menggunakan penomoran Romawi kecil (`i`, `ii`, `iii`) di bagian tengah bawah. Diatur di `template.typ` tepat setelah sampul depan:
|
|
56
59
|
```typst
|
|
57
|
-
#
|
|
60
|
+
#pagebreak()
|
|
61
|
+
#set page(numbering: "i")
|
|
62
|
+
#counter(page).update(1)
|
|
58
63
|
```
|
|
59
|
-
* **Bagian Utama** (BAB I hingga BAB V): Menggunakan penomoran Angka Arab (`1`, `2`, `3`) berurutan, di-reset ulang
|
|
64
|
+
* **Bagian Utama** (BAB I hingga BAB V & Daftar Pustaka): Menggunakan penomoran Angka Arab (`1`, `2`, `3`) berurutan, di-reset ulang di akhir `cover.md`:
|
|
60
65
|
```typst
|
|
66
|
+
#pagebreak()
|
|
61
67
|
#set page(numbering: "1")
|
|
62
68
|
#counter(page).update(1)
|
|
63
69
|
```
|
|
@@ -44,26 +44,30 @@ reference-docx:
|
|
|
44
44
|
@command -v python3 >/dev/null 2>&1 || { echo "ERROR: python3 not found"; exit 1; }
|
|
45
45
|
@mkdir -p tmp
|
|
46
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
|
|
47
|
+
python3 scripts/make-reference-docx.py tmp/ref-default.docx templates/default/reference.docx
|
|
48
48
|
@rm -f tmp/ref-default.docx
|
|
49
49
|
|
|
50
50
|
html:
|
|
51
|
-
@
|
|
51
|
+
@SRC_DIR="."; \
|
|
52
|
+
if [ ! -d "$$SRC_DIR/chapters" ] && [ -d "templates/default/chapters" ]; then \
|
|
53
|
+
SRC_DIR="templates/default"; \
|
|
54
|
+
fi; \
|
|
55
|
+
if [ ! -d "$$SRC_DIR/chapters" ]; then \
|
|
52
56
|
echo "ERROR: Direktori chapters/ tidak ditemukan."; \
|
|
53
57
|
exit 1; \
|
|
54
58
|
fi; \
|
|
55
|
-
PRESET=$$(grep -E '^[[:space:]]*(preset|margin_preset):' metadata.yml 2>/dev/null | head -n 1 | cut -d: -f2- | tr -d '\"'\''\r\n '); \
|
|
59
|
+
PRESET=$$(grep -E '^[[:space:]]*(preset|margin_preset):' "$$SRC_DIR/metadata.yml" 2>/dev/null | head -n 1 | cut -d: -f2- | tr -d '\"'\''\r\n '); \
|
|
56
60
|
PRESET_FILE=""; \
|
|
57
61
|
if [ -n "$$PRESET" ] && [ -f "presets/$${PRESET}.yml" ]; then \
|
|
58
62
|
PRESET_FILE="--metadata-file=presets/$${PRESET}.yml"; \
|
|
59
63
|
elif [ -f "presets/standard.yml" ]; then \
|
|
60
64
|
PRESET_FILE="--metadata-file=presets/standard.yml"; \
|
|
61
65
|
fi; \
|
|
62
|
-
pandoc chapters/bab*.md \
|
|
66
|
+
pandoc "$$SRC_DIR"/chapters/bab*.md \
|
|
63
67
|
$$PRESET_FILE \
|
|
64
|
-
--metadata-file=metadata.yml \
|
|
65
|
-
--citeproc --bibliography=references.bib \
|
|
66
|
-
--csl=apa.csl \
|
|
68
|
+
--metadata-file="$$SRC_DIR/metadata.yml" \
|
|
69
|
+
--citeproc --bibliography="$$SRC_DIR/references.bib" \
|
|
70
|
+
--csl="$$SRC_DIR/apa.csl" \
|
|
67
71
|
--metadata=reference-section-title="DAFTAR PUSTAKA" \
|
|
68
72
|
--top-level-division=chapter \
|
|
69
73
|
--standalone --toc \
|
|
@@ -3,9 +3,11 @@ set -e
|
|
|
3
3
|
|
|
4
4
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
5
5
|
if [ -n "$1" ]; then
|
|
6
|
-
OUTDIR="$1"
|
|
6
|
+
OUTDIR="$(cd "$1" && pwd)"
|
|
7
7
|
elif [ -f "$(pwd)/metadata.yml" ] && [ -d "$(pwd)/chapters" ]; then
|
|
8
8
|
OUTDIR="$(pwd)"
|
|
9
|
+
elif [ -f "$DIR/templates/default/metadata.yml" ] && [ -d "$DIR/templates/default/chapters" ]; then
|
|
10
|
+
OUTDIR="$DIR/templates/default"
|
|
9
11
|
else
|
|
10
12
|
OUTDIR="$DIR"
|
|
11
13
|
fi
|
|
@@ -29,6 +31,7 @@ trap 'rm -rf "$TMPDIR"' EXIT
|
|
|
29
31
|
|
|
30
32
|
FALLBACK_DIRS=(
|
|
31
33
|
"$OUTDIR"
|
|
34
|
+
"$DIR/templates/default"
|
|
32
35
|
"$DIR"
|
|
33
36
|
"$HOME/.agents/skills/laporan-generator/resources"
|
|
34
37
|
)
|
|
@@ -3,9 +3,11 @@ set -e
|
|
|
3
3
|
|
|
4
4
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
5
5
|
if [ -n "$1" ]; then
|
|
6
|
-
OUTDIR="$1"
|
|
6
|
+
OUTDIR="$(cd "$1" && pwd)"
|
|
7
7
|
elif [ -f "$(pwd)/metadata.yml" ] && [ -d "$(pwd)/chapters" ]; then
|
|
8
8
|
OUTDIR="$(pwd)"
|
|
9
|
+
elif [ -f "$DIR/templates/default/metadata.yml" ] && [ -d "$DIR/templates/default/chapters" ]; then
|
|
10
|
+
OUTDIR="$DIR/templates/default"
|
|
9
11
|
else
|
|
10
12
|
OUTDIR="$DIR"
|
|
11
13
|
fi
|
|
@@ -16,6 +18,7 @@ trap 'rm -rf "$TMPDIR"' EXIT
|
|
|
16
18
|
|
|
17
19
|
FALLBACK_DIRS=(
|
|
18
20
|
"$OUTDIR"
|
|
21
|
+
"$DIR/templates/default"
|
|
19
22
|
"$DIR"
|
|
20
23
|
"$HOME/.agents/skills/laporan-generator/resources"
|
|
21
24
|
)
|