# -*- coding: utf-8 -*-
"""
Script to generate the complete, professional Thai-translated PDF of
Anan_Government_Research_Manuscript.pdf.pdf using ReportLab.
"""
import os
import sys
import pythainlp
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.pdfgen import canvas
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle, PageBreak, KeepTogether, HRFlowable
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

# Register Fonts
pdfmetrics.registerFont(TTFont('Tahoma', 'C:/Windows/Fonts/tahoma.ttf'))
pdfmetrics.registerFont(TTFont('Tahoma-Bold', 'C:/Windows/Fonts/tahomabd.ttf'))

def thai(text):
    """Inserts zero-width space after tokens for correct word-wrapping in ReportLab."""
    if not text:
        return ""
    # Process only lines or paragraphs
    lines = text.split("\n")
    processed_lines = []
    for line in lines:
        if not line.strip():
            processed_lines.append("")
            continue
        words = pythainlp.word_tokenize(line, keep_whitespace=True)
        processed_lines.append('\u200b'.join(words))
    return "\n".join(processed_lines)

class NumberedCanvas(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        super(NumberedCanvas, self).__init__(*args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for state in self._saved_page_states:
            self.__dict__.update(state)
            self.draw_page_decorations(num_pages)
            super(NumberedCanvas, self).showPage()
        super(NumberedCanvas, self).save()

    def draw_page_decorations(self, page_count):
        self.saveState()
        self.setFont("Tahoma", 8)
        self.setFillColor(colors.HexColor("#333333"))

        # Running Header
        self.drawString(54, 800, "ชุดเอกสารทบทวนทางวิทยาศาสตร์ ศวสช. SWSN-SCI/ORP-2035-04-R3 (ฉบับแปลภาษาไทย)")
        self.setStrokeColor(colors.HexColor("#0f3c5c"))
        self.setLineWidth(0.8)
        self.line(54, 792, 541, 792)

        # Running Footer
        self.setStrokeColor(colors.HexColor("#cccccc"))
        self.setLineWidth(0.5)
        self.line(54, 50, 541, 50)
        self.drawString(54, 38, "เอกสารควบคุมทางวิทยาศาสตร์  สำเนาสำหรับการพิจารณาภายใน")
        page_str = f"หน้า {self._pageNumber} จาก {page_count}"
        self.drawRightString(541, 38, page_str)

        self.restoreState()

def build_pdf():
    pdf_filename = "Anan_Government_Research_Manuscript_THAI.pdf"
    doc = SimpleDocTemplate(
        pdf_filename,
        pagesize=A4,
        leftMargin=54,
        rightMargin=54,
        topMargin=60,
        bottomMargin=60
    )

    styles = getSampleStyleSheet()

    title_style = ParagraphStyle(
        'DocTitle',
        fontName='Tahoma-Bold',
        fontSize=15,
        leading=21,
        textColor=colors.HexColor('#0b2545'),
        alignment=1, # Center
        spaceAfter=10
    )

    subtitle_style = ParagraphStyle(
        'DocSubtitle',
        fontName='Tahoma-Bold',
        fontSize=11,
        leading=16,
        textColor=colors.HexColor('#134074'),
        alignment=1,
        spaceAfter=14
    )

    author_style = ParagraphStyle(
        'AuthorStyle',
        fontName='Tahoma-Bold',
        fontSize=9.5,
        leading=14,
        textColor=colors.HexColor('#1d2d44'),
        alignment=1,
        spaceAfter=3
    )

    affil_style = ParagraphStyle(
        'AffilStyle',
        fontName='Tahoma',
        fontSize=8,
        leading=12,
        textColor=colors.HexColor('#415a77'),
        alignment=1,
        spaceAfter=8
    )

    meta_style = ParagraphStyle(
        'MetaStyle',
        fontName='Tahoma',
        fontSize=8,
        leading=11.5,
        textColor=colors.HexColor('#222222'),
        spaceAfter=6
    )

    h1_style = ParagraphStyle(
        'Heading1',
        fontName='Tahoma-Bold',
        fontSize=11.5,
        leading=16,
        textColor=colors.HexColor('#0b2545'),
        spaceBefore=12,
        spaceAfter=6,
        keepWithNext=True
    )

    h2_style = ParagraphStyle(
        'Heading2',
        fontName='Tahoma-Bold',
        fontSize=10,
        leading=14,
        textColor=colors.HexColor('#134074'),
        spaceBefore=8,
        spaceAfter=4,
        keepWithNext=True
    )

    body_style = ParagraphStyle(
        'Body',
        fontName='Tahoma',
        fontSize=8.5,
        leading=13,
        textColor=colors.HexColor('#111111'),
        alignment=4, # Justified
        spaceAfter=6
    )

    abstract_style = ParagraphStyle(
        'Abstract',
        fontName='Tahoma',
        fontSize=8.2,
        leading=12.5,
        textColor=colors.HexColor('#1a1a1a'),
        alignment=4,
        leftIndent=15,
        rightIndent=15,
        spaceAfter=8
    )

    formula_style = ParagraphStyle(
        'Formula',
        fontName='Tahoma-Bold',
        fontSize=9,
        leading=13,
        textColor=colors.HexColor('#002855'),
        alignment=1, # Center
        spaceBefore=4,
        spaceAfter=6
    )

    caption_style = ParagraphStyle(
        'Caption',
        fontName='Tahoma',
        fontSize=7.8,
        leading=11,
        textColor=colors.HexColor('#444444'),
        alignment=1, # Center
        spaceBefore=4,
        spaceAfter=8
    )

    ref_style = ParagraphStyle(
        'RefStyle',
        fontName='Tahoma',
        fontSize=7.8,
        leading=11.5,
        textColor=colors.HexColor('#222222'),
        leftIndent=18,
        firstLineIndent=-18,
        spaceAfter=4
    )

    story = []

    # --- PAGE 1: Header, Emblem, Title, Authors, Abstract ---
    if os.path.exists('fig_page_1_0.png'):
        emblem = Image('fig_page_1_0.png', width=45, height=45)
        emblem.hAlign = 'CENTER'
        story.append(emblem)
        story.append(Spacer(1, 4))

    story.append(Paragraph(thai("ศูนย์อำนวยการบูรณาการวิทยาศาสตร์เพื่อเสถียรภาพระบบโลกและความต่อเนื่องแห่งชาติ (ศวสช.)"), ParagraphStyle('SWSNCenter', fontName='Tahoma-Bold', fontSize=9, leading=13, alignment=1, textColor=colors.HexColor('#0b2545'))))
    story.append(Paragraph(thai("National Center for Scientific Integration for Earth-System Stability and National Continuity (SWSN)"), ParagraphStyle('SWSNEn', fontName='Tahoma', fontSize=7.5, leading=11, alignment=1, textColor=colors.HexColor('#555555'))))
    story.append(Spacer(1, 8))

    story.append(Paragraph(thai("ความสอดคล้องตกค้างข้ามโดเมนและการควบคุมแบบย้อนกลับของวิถีควอนตัมที่มีการตรวจวัด"), title_style))
    story.append(Paragraph(thai("กรอบเชิงปรากฏการณ์วิทยาสำหรับการฟื้นฟูสภาวะเชิงสาเหตุในระดับมหภาค (Macroscopic Causal-State Restoration: MCSR)"), subtitle_style))
    story.append(Paragraph(thai("ต้นฉบับการทบทวนทางวิทยาศาสตร์ของรัฐบาล — ฉบับปรับปรุงที่ 3 (Revision 3)"), ParagraphStyle('Rev', fontName='Tahoma', fontSize=8.5, leading=12, alignment=1, textColor=colors.HexColor('#666666'))))
    story.append(Spacer(1, 6))

    story.append(Paragraph(thai("อนันต์ วงศ์กาฬ 1,2,* , เอมาลิน วงศ์กาฬ 1,2 , เตชสิทธิ์ เก่งขุนทด 1,3"), author_style))
    story.append(Paragraph(thai("1 หน่วยระบบซับซ้อนและฟิสิกส์เชิงคำนวณ, ศูนย์ ศวสช., ประเทศไทย<br/>2 กลุ่มวิจัยฟิสิกส์เชิงคำนวณ, มหาวิทยาลัยเทคโนโลยีสุรนารี, นครราชสีมา, ประเทศไทย<br/>3 หน่วยคณิตศาสตร์ประยุกต์และระบบควบคุม, ศูนย์ ศวสช., ประเทศไทย<br/>* นักวิจัยหลักผู้ประสานงาน: ดร. อนันต์ วงศ์กาฬ (Principal Scientist)"), affil_style))

    # Meta Table
    meta_data = [
        [Paragraph(thai("<b>วันที่ยื่น:</b> 17 สิงหาคม 2578 (2035)"), meta_style),
         Paragraph(thai("<b>รหัสเอกสาร:</b> SWSN-SCI/ORP-2035-04-R3"), meta_style)],
        [Paragraph(thai("<b>แหล่งทุน:</b> กองทุนวิจัยความต่อเนื่องแห่งชาติ; ร่วมสนับสนุนโดย กลุ่ม CreativeLabTH"), meta_style),
         Paragraph(thai("<b>สถานะ:</b> เอกสารทบทวนภายใน (ยื่นขอจัดสรรทรัพยากรระดับชาติเพื่อทดสอบสมมติฐาน)"), meta_style)]
    ]
    meta_table = Table(meta_data, colWidths=[240, 247])
    meta_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#f4f6f8')),
        ('BOX', (0,0), (-1,-1), 0.5, colors.HexColor('#d0d7de')),
        ('INNERGRID', (0,0), (-1,-1), 0.5, colors.HexColor('#e1e4e8')),
        ('TOPPADDING', (0,0), (-1,-1), 3),
        ('BOTTOMPADDING', (0,0), (-1,-1), 3),
        ('LEFTPADDING', (0,0), (-1,-1), 6),
        ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ]))
    story.append(meta_table)
    story.append(Spacer(1, 8))

    # Abstract Box
    abs_text = thai(
        "<b>บทคัดย่อ (Abstract) —</b> เราขอนำเสนอกรอบการทำงานสองระดับที่สามารถพิสูจน์ว่าเป็นเท็จได้ (falsifiable two-layer framework) "
        "โดยมีแรงผลักดันมาจากค่าคลาดเคลื่อนตกค้างของแบบจำลอง (model residuals) ที่คงอยู่อย่างต่อเนื่องในระบบตรวจวัดต่างชนิดกัน "
        "และจากความก้าวหน้าล่าสุดในการควบคุมลูกศรแห่งเวลาที่ปรากฏในระบบควอนตัมที่มีการตรวจวัด "
        "ขั้นแรก เราทดสอบว่าค่าคลาดเคลื่อนตกค้างมาตรฐานจากกลุ่มเซนเซอร์อิสระหลายชุด สามารถอธิบายได้ดีกว่าด้วยกระบวนการสัญญาณรบกวนอิสระ "
        "หรือด้วยตัวแปรแฝงร่วม (shared latent factor) ที่มีการตอบสนองเฉพาะแต่ละช่องสัญญาณ ในการทดสอบภาวะวิกฤตความสามารถในการทำซ้ำ (reproducibility stress test) "
        "ที่รายงานในที่นี้ องค์ประกอบหลักลำดับแรก (PC1) สามารถอธิบายความแปรปรวนมาตรฐานได้ถึง 60.1% และแบบจำลองตัวแปรแฝงเดี่ยวช่วยปรับปรุงดัชนีข้อมูลเบย์เซียน "
        "(Bayesian Information Criterion) ได้ถึง ΔBIC = 176.5 เมื่อเทียบกับสมมติฐานว่างแบบเกาส์เซียนแนวทแยง (diagonal Gaussian null) "
        "สถิติเหล่านี้ยังไม่ได้เป็นการสถาปนาปรากฏการณ์ใหม่ของกาลอวกาศ แต่ทำหน้าที่กำหนดเป้าหมายการตรวจจับที่คำอธิบายแบบดั้งเดิมจะต้องพยายามซึมซับและหักล้างให้ได้ก่อน "
        "ขั้นที่สอง ด้วยแรงบันดาลใจจากการควบคุมลูกศรแห่งเวลาในระดับวิถี (trajectory-level time-arrow control) ในระบบควอนตัมที่มีการตรวจวัด "
        "เราได้กำหนดสูตรการฟื้นฟูสภาวะเชิงสาเหตุในระดับมหภาค (Macroscopic Causal-State Restoration: MCSR) ให้เป็นปัญหาการควบคุมแบบย้อนกลับ (inverse-control problem) "
        "แทนที่จะเป็นการย้อนเวลาทางอุณหพลศาสตร์ตามตัวอักษร แบบจำลองสัญญาณรบกวนเฟสแบบมีเงื่อนไขแสดงให้เห็นว่า "
        "การเข้าถึงบันทึกการตรวจวัดที่ไม่สมบูรณ์สามารถยกระดับความเที่ยงตรงเฉลี่ยในการฟื้นฟูสภาวะ (state-restoration fidelity) จาก 0.550 (กรณีไร้การป้อนกลับ) "
        "ขึ้นเป็น 0.854 ที่ประสิทธิภาพบันทึกประสิทธิผล η = 0.85 จากนั้นเรานำเสนอสมมติฐานการซ้อนทับของเมตริกเชิงปรากฏการณ์วิทยา (phenomenological metric-overlap ansatz) "
        "และอนุพัทธ์การทดสอบเชิงสังเกตการณ์ที่เกี่ยวข้องกับความคลาดเคลื่อนตกค้างของนาฬิกา, ค่าความโน้มถ่วง, การเคลื่อนที่ของวงโคจร และคลื่นความโน้มถ่วง "
        "ท้ายที่สุด เราคำนวณปริมาณแหล่งกักเก็บพลังงานการหมุนของหลุมดำเคอร์ (Kerr black hole) ขนาด 10 M☉ ที่มีสปินไร้มิติ a* = 0.98 "
        "ซึ่งบรรจุพลังงานการหมุนในอุดมคติที่ดึงออกมาได้ประมาณ 4.0 × 10^47 จูล "
        "เราขอเน้นย้ำอย่างยิ่งว่ากลไกการเชื่อมต่อที่เสนอนี้ยังเป็นเพียงข้อสันนิษฐาน วัตถุประสงค์ของเอกสารนี้คือเพื่อสร้างเหตุผลสนับสนุนการทดลองระดับชาติในขอบเขตที่จำกัด "
        "ซึ่งมีความสามารถในการหักล้างหรือปฏิเสธสมมติฐานนี้ได้จริง"
    )
    abs_box = Table([[Paragraph(abs_text, abstract_style)]], colWidths=[487])
    abs_box.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#f8f9fa')),
        ('BOX', (0,0), (-1,-1), 1, colors.HexColor('#0f3c5c')),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    story.append(abs_box)
    story.append(Spacer(1, 4))

    kw_text = thai("<b>คำสำคัญ (Keywords):</b> การควบคุมควอนตัม (quantum control); ลูกศรแห่งเวลา (arrow of time); ปัญหาย้อนกลับ (inverse problem); ระบบซับซ้อน (complex systems); ส่วนตกค้างคลื่นความโน้มถ่วง (gravitational-wave residuals); หลุมดำเคอร์ (Kerr black hole); การฟื้นฟูสภาวะเชิงสาเหตุ (causal-state restoration); การพิสูจน์ว่าเป็นเท็จทางวิทยาศาสตร์ (scientific falsification)")
    story.append(Paragraph(kw_text, ParagraphStyle('KW', fontName='Tahoma', fontSize=7.5, leading=11, textColor=colors.HexColor('#333333'))))

    story.append(PageBreak())

    # --- PAGE 2: Section 1 & 2 ---
    story.append(Paragraph(thai("1 บทนำ (Introduction)"), h1_style))
    p1 = thai(
        "สมการในระดับจุลภาคสามารถมีความสมมาตรต่อการย้อนกลับของเวลา (time-reversal symmetries) ในขณะที่การสังเกตการณ์ในระดับมหภาคกลับแสดงให้เห็นลูกศรแห่งเวลาที่ชัดเจน "
        "ในระบบควอนตัมที่มีการตรวจวัด การส่งผลย้อนกลับของการตรวจวัด (measurement backaction) มีส่วนสร้างลูกศรในการปฏิบัติการที่สามารถวัดปริมาณได้จากวิถีการเคลื่อนที่ "
        "เมื่อไม่นานมานี้ (ค.ศ. 2026) García-Pintos, Liu และ Gorshkov ได้สร้างเครื่องมือการควบคุมฮามิลโทเนียนที่สามารถจำลองวิถีสุ่มที่มีการตรวจวัด "
        "และเมื่อใช้ร่วมกับการป้อนกลับ จะทำให้เกิดพลวัตที่สอดคล้องกับวิถีย้อนเวลามากกว่าวิถีไปข้างหน้า [1] "
        "ผลลัพธ์นี้ไม่ใช่สูตรสำเร็จในการย้อนเวลามนุษย์ ดาวเคราะห์ หรือเอนโทรปี แต่มีความสำคัญอย่างยิ่งด้วยเหตุผลอีกประการหนึ่ง: "
        "มันพิสูจน์ให้เห็นว่าทิศทางที่กำหนดให้กับวิถีที่มีการตรวจวัดสามารถถูกปรับเปลี่ยนรูปร่างได้ด้วยการควบคุม เมื่อเราทราบประวัติบันทึกการตรวจวัดและพลวัตที่เกี่ยวข้อง"
    )
    story.append(Paragraph(p1, body_style))

    p2 = thai(
        "โครงการตรวจวัดระดับชาติของเรากำลังเผชิญกับปัญหาย้อนกลับที่มีโครงสร้างแตกต่างกันออกไป ค่าคลาดเคลื่อนตกค้างยังคงปรากฏอยู่หลังจากแบบจำลองที่ได้รับการยอมรับ "
        "ถูกนำไปปรับพอดีแยกกันในระบบบอกเวลา, ระบบวัดความโน้มถ่วง, ระบบวงโคจร, สนามแม่เหล็กโลก และระบบพยากรณ์สิ่งแวดล้อม "
        "คำอธิบายแบบดั้งเดิมถือว่าค่าตกค้างเหล่านี้เกิดจากความคลาดเคลื่อนในการสอบเทียบ (calibration error), แรงผลักดันเฉพาะที่ที่ไม่ได้สร้างแบบจำลอง, "
        "ความไม่เข้ากันของแบบจำลอง และโครงสร้างพื้นฐานที่มีความไม่คงที่ คำอธิบายดังกล่าวยังคงเป็นสมมติฐานว่าง (null hypothesis) หลักของเอกสารฉบับนี้ "
        "เราตั้งคำถามในขอบเขตที่แคบลง: <i>มีการรบกวนแฝงร่วมกัน (common latent perturbation) ที่รอยเท้าทางสถิติของมันสามารถรอดพ้นกระบวนการประมวลผลข้อมูลขั้นต้นที่แยกเป็นอิสระต่อกันได้หรือไม่?</i> "
        "หากมี ภารกิจถัดไปไม่ใช่การประกาศค้นพบจักรวาลใหม่ แต่เป็นการออกแบบการสังเกตการณ์ที่สามารถหักล้างและพิสูจน์ว่าเป็นเท็จได้ทั้งต่อคำอธิบายแบบเดิมและคำอธิบายที่ไม่เป็นไปตามแบบแผน"
    )
    story.append(Paragraph(p2, body_style))

    p3 = thai(
        "สำหรับการดำเนินงานภายใน กลุ่มงานควบคุมแบบย้อนกลับนี้ใช้ชื่อรหัสว่า <b>ORPHEUS</b> "
        "ชื่อนี้ถูกเลือกขึ้นมาเพื่อเป็นข้อเตือนใจอย่างจงใจ: ในตำนานเทพปกรณัม ออร์เฟียสพยายามนำสิ่งที่สูญเสียไปแล้วกลับคืนมา "
        "แต่ภารกิจ MCSR มีเป้าหมายตรงกันข้าม: มันไม่ได้พยายามฟื้นคืนชีพคนตายหรือสร้างโลกในอดีตขึ้นมาใหม่ "
        "หากแบบจำลองนี้สามารถผ่านการทดสอบได้ เป้าหมายของมันคือการฟื้นฟูเงื่อนไขขอบเขตที่ระบบพลวัตสามารถเข้าถึงได้จริง เพื่อให้วิวัฒนาการไปข้างหน้าสามารถดำเนินต่อไปได้"
    )
    story.append(Paragraph(p3, body_style))

    story.append(Paragraph(thai("2 สถานะทางญาณวิทยาและขอบเขต (Epistemic status and scope)"), h1_style))
    story.append(Paragraph(thai("กรอบการทำงานนี้ประกอบด้วยข้อกล่าวอ้าง 3 ระดับที่แตกต่างกันอย่างสิ้นเชิง ซึ่งจะต้องไม่นำมาปะปนกัน:"), body_style))

    # Table 1: Claim Levels
    t1_data = [
        [Paragraph(thai("<b>ระดับ</b>"), ParagraphStyle('TH', fontName='Tahoma-Bold', fontSize=8, textColor=colors.white)),
         Paragraph(thai("<b>สถานะ</b>"), ParagraphStyle('TH', fontName='Tahoma-Bold', fontSize=8, textColor=colors.white)),
         Paragraph(thai("<b>การนำไปใช้ในเอกสารฉบับนี้</b>"), ParagraphStyle('TH', fontName='Tahoma-Bold', fontSize=8, textColor=colors.white))],
        [Paragraph(thai("<b>E0</b>"), ParagraphStyle('TB', fontName='Tahoma-Bold', fontSize=8)),
         Paragraph(thai("ฟิสิกส์มาตรฐานที่ได้รับการยอมรับแล้ว (Established physics)"), ParagraphStyle('TB', fontName='Tahoma', fontSize=8)),
         Paragraph(thai("พลวัตของระบบเปิด, วิถีควอนตัมแบบมีเงื่อนไข, ทฤษฎีสัมพัทธภาพทั่วไป, พลังงานการหมุนของหลุมดำเคอร์, การประมาณค่าพารามิเตอร์คลื่นความโน้มถ่วง"), ParagraphStyle('TB', fontName='Tahoma', fontSize=8))],
        [Paragraph(thai("<b>H1</b>"), ParagraphStyle('TB', fontName='Tahoma-Bold', fontSize=8)),
         Paragraph(thai("การคาดการณ์ขยายผลที่มีความเสี่ยงสูง (High-risk extrapolation)"), ParagraphStyle('TB', fontName='Tahoma', fontSize=8)),
         Paragraph(thai("การขยายแนวคิดการควบคุมแบบย้อนกลับจากระบบตรวจวัดขนาดเล็ก ไปสู่สถาปัตยกรรมการควบคุมทางวิศวกรรมแบบกระจายตัว"), ParagraphStyle('TB', fontName='Tahoma', fontSize=8))],
        [Paragraph(thai("<b>H2</b>"), ParagraphStyle('TB', fontName='Tahoma-Bold', fontSize=8, textColor=colors.HexColor('#b30000'))),
         Paragraph(thai("ข้อสันนิษฐานเชิงปรากฏการณ์วิทยา (Phenomenological conjecture)"), ParagraphStyle('TB', fontName='Tahoma-Bold', fontSize=8, textColor=colors.HexColor('#b30000'))),
         Paragraph(thai("การซ้อนทับของเมตริกระหว่างแขนง (Inter-branch metric overlap: IBMO), การระบุขอบเขตแบบไม่มีการวางทิศทาง (non-orientable boundary) และข้อบกพร่องขอบเขตเชิงสาเหตุที่ควบคุมได้"), ParagraphStyle('TB', fontName='Tahoma', fontSize=8))]
    ]
    t1 = Table(t1_data, colWidths=[40, 150, 297])
    t1.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#0f3c5c')),
        ('BOX', (0,0), (-1,-1), 1, colors.HexColor('#0f3c5c')),
        ('INNERGRID', (0,0), (-1,-1), 0.5, colors.HexColor('#d0d7de')),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
        ('RIGHTPADDING', (0,0), (-1,-1), 5),
    ]))
    story.append(t1)
    story.append(Paragraph(thai("<b>ตารางที่ 1:</b> ระดับของข้อกล่าวอ้าง ข้อกล่าวอ้างระดับ H2 ไม่ถือว่าเป็นฟิสิกส์ที่ได้รับการยอมรับ"), caption_style))

    p4 = thai(
        "ข้อกำหนดทางวิทยาศาสตร์ที่เป็นหัวใจสำคัญจึงเรียบง่ายอย่างยิ่ง: <b>ทุกข้อกล่าวอ้างในระดับ H2 จะต้องบอกเป็นนัยถึงการสังเกตการณ์ที่มีโอกาสล้มเหลวหรือถูกหักล้างได้จริง</b>"
    )
    story.append(Paragraph(p4, body_style))

    story.append(PageBreak())

    # --- PAGE 3: Section 3 & Fig 1, Fig 2 ---
    story.append(Paragraph(thai("3 ความสอดคล้องตกค้างข้ามโดเมน (Cross-domain residual coherence)"), h1_style))
    story.append(Paragraph(thai("3.1 การแทนค่าส่วนตกค้าง (Residual representation)"), h2_style))
    p5 = thai(
        "สำหรับช่องสัญญาณการตรวจวัด k ให้ y<sub>k</sub>(t) แทนปริมาณที่สังเกตได้ และ ŷ<sub>k</sub>(t | M<sub>k</sub>) แทนค่าการทำนายจากแบบจำลองโดเมนที่ได้รับการยอมรับ M<sub>k</sub> "
        "เรานิยามค่าคลาดเคลื่อนตกค้างมาตรฐานดังนี้:"
    )
    story.append(Paragraph(p5, body_style))

    eq1 = "r<sub>k</sub>(t) = [ y<sub>k</sub>(t) − ŷ<sub>k</sub>(t | M<sub>k</sub>) ] / σ̂<sub>k</sub>(t) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)"
    story.append(Paragraph(eq1, formula_style))

    p6 = thai(
        "แบบจำลองปัจจัยร่วมที่ใช้ในการทำงานคือ:"
    )
    story.append(Paragraph(p6, body_style))

    eq2 = "r<sub>k</sub>(t) = a<sub>k</sub> z(t − τ<sub>k</sub>) + ϵ<sub>k</sub>(t) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)"
    story.append(Paragraph(eq2, formula_style))

    p7 = thai(
        "โดยที่ z(t) คือกระบวนการแฝง (latent process), a<sub>k</sub> คือการตอบสนองของช่องสัญญาณ, τ<sub>k</sub> คือความล่าช้าเล็กน้อย และ ϵ<sub>k</sub> คือสัญญาณรบกวนเฉพาะช่องสัญญาณ "
        "สมการนี้ถูกตั้งขึ้นโดยละเว้นสาเหตุทางกายภาพไว้อย่างจงใจ"
    )
    story.append(Paragraph(p7, body_style))

    story.append(Paragraph(thai("3.2 การทดสอบภาวะวิกฤตความสามารถในการทำซ้ำ (Reproducibility stress test)"), h2_style))
    p8 = thai(
        "เพื่อตรวจสอบความถูกต้องของสายงานการวิเคราะห์ก่อนนำไปประมวลผลข้อมูลจำกัดสิทธิ์ซ้ำ เราได้สร้างชุดข้อมูลทดสอบภาวะวิกฤต 5 ช่องสัญญาณ ระยะเวลา 108 เดือน "
        "ซึ่งประกอบด้วยกระบวนการแฝงแบบถดถอยตนเอง (autoregressive latent process), ปรากฏการณ์ชั่วครู่กว้าง 3 จุด, ความล่าช้าเฉพาะช่องสัญญาณ และสัญญาณรบกวนเกาส์เซียนอิสระ "
        "โค้ดและค่า seed ที่แน่นอนได้รับการเก็บรักษาไว้ในภาคผนวกทางเทคนิค ภาพที่ 1 แสดงอนุกรมมาตรฐานดังกล่าว จุดประสงค์ของการทดลองนี้คือเพื่อยืนยันความสามารถในการทำซ้ำเชิงคำนวณ ไม่ใช่ข้อพิสูจน์เชิงประจักษ์"
    )
    story.append(Paragraph(p8, body_style))

    if os.path.exists('fig_page_3_0.png'):
        f1_img = Image('fig_page_3_0.png', width=360, height=210)
        f1_img.hAlign = 'CENTER'
        story.append(f1_img)
        story.append(Paragraph(thai("<b>ภาพที่ 1:</b> อนุกรมการทดสอบภาวะวิกฤตค่าคลาดเคลื่อนตกค้างข้ามโดเมนที่แปลงเป็นมาตรฐานแล้ว เส้นกราฟถูกเลื่อนในแนวตั้งเพื่อความชัดเจน เส้นประด้านล่างสุดคือการอ้างอิงแฝงที่ใช้เพื่อการตรวจสอบความถูกต้องเท่านั้น"), caption_style))

    p9 = thai(
        "การวิเคราะห์องค์ประกอบหลัก (PCA) ให้สัดส่วนความแปรปรวนที่อธิบายได้โดยองค์ประกอบแรกสูงถึง 0.6005 "
        "แบบจำลองเกาส์เซียนปัจจัยเดี่ยวให้ค่า BIC = 1379.4 เมื่อเปรียบเทียบกับ 1555.9 สำหรับสมมติฐานว่างแบบเกาส์เซียนแนวทแยง "
        "ซึ่งให้ค่า ΔBIC = 176.5 สนับสนุนความแปรปรวนร่วมที่มีร่วมกันในการทดสอบภาวะวิกฤตที่ควบคุมนี้ ภาพที่ 2 แสดงโครงสร้างสหสัมพันธ์ของส่วนตกค้าง"
    )
    story.append(Paragraph(p9, body_style))

    story.append(PageBreak())

    # --- PAGE 4: Fig 2 & Section 4 ---
    if os.path.exists('fig_page_4_0.png'):
        f2_img = Image('fig_page_4_0.png', width=260, height=225)
        f2_img.hAlign = 'CENTER'
        story.append(f2_img)
        story.append(Paragraph(thai("<b>ภาพที่ 2:</b> เมทริกซ์สหสัมพันธ์ของส่วนตกค้างในการทดสอบภาวะวิกฤตความสามารถในการทำซ้ำ ความแตกต่างของเครื่องหมายได้รับอนุญาตเนื่องจากเซนเซอร์ต่างชนิดอาจตอบสนองด้วยข้อตกลงหรือฟังก์ชันถ่ายโอนตรงกันข้าม"), caption_style))

    p10 = thai(
        "สำหรับข้อมูลการปฏิบัติงานจริงที่มีการจำกัดสิทธิ์ สายงานการวิเคราะห์ชุดเดียวกันนี้จะต้องถูกทดสอบท้าทายกับสาเหตุร่วมที่ทราบอยู่แล้ว: "
        "การอ้างอิงเวลาที่มีร่วมกัน, ช่วงเวลาการบำรุงรักษาที่ประสานกัน, แรงผลักดันจากสิ่งแวดล้อมร่วม, การรั่วไหลของการผสานรวมข้อมูล (data-assimilation leakage) "
        "และความผิดพร่องจากการประมวลผลขั้นต้น หากไม่สามารถขจัดผลกระทบเหล่านี้ออกไปได้ จะถือว่าเป็นการปฏิเสธความจำเป็นของข้อกล่าวอ้างระดับ H2"
    )
    story.append(Paragraph(p10, body_style))

    story.append(Paragraph(thai("4 แบบจำลองการซ้อนทับของเมตริกระหว่างแขนงเชิงปรากฏการณ์วิทยา (Phenomenological inter-branch metric-overlap model)"), h1_style))
    p11 = thai(
        "เราขอเสนอสมมติฐานเมตริก (metric ansatz) ดังนี้:"
    )
    story.append(Paragraph(p11, body_style))

    eq3 = "g<sup>eff</sup><sub>μν</sub>(x) = g<sup>(0)</sup><sub>μν</sub>(x) + ε χ(x) h<sup>(B)</sup><sub>μν</sub>(x) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)"
    story.append(Paragraph(eq3, formula_style))

    p12 = thai(
        "โดยที่ g<sup>(0)</sup><sub>μν</sub> คือเมตริกพื้นหลัง, h<sup>(B)</sup><sub>μν</sub> คือการรบกวนประสิทธิผลที่เกี่ยวข้องกับแขนงขอบเขตที่สอง, "
        "χ(x) คือกรอบการซ้อนทับแบบกระชับ (compact overlap envelope) และ ε คือพารามิเตอร์การเชื่อมต่อไร้มิติ "
        "เราไม่ได้อ้างว่า h<sup>(B)</sup><sub>μν</sub> สอดคล้องกับเอกภพคู่ขนานที่มีอยู่จริงทางกายภาพ "
        "แต่สมมติฐานนี้เป็นเพียงเครื่องมือทางบัญชีคำนวณสำหรับการอนุพัทธ์สัญญาณบ่งชี้ที่มีความสัมพันธ์กัน"
    )
    story.append(Paragraph(p12, body_style))

    p13 = thai(
        "ข้อกล่าวอ้าง H2 ในฉบับที่เข้มงวดที่สุด สันนิษฐานเพิ่มเติมว่าขอบเขตการซ้อนทับมีลักษณะ<b>ไม่สามารถวางทิศทางได้ (non-orientable)</b> "
        "ในการฝังตัวในมิติที่สูงกว่า แถบโมเบียส (Möbius strip) คือการเปรียบเทียบในสองมิติ: การเคลื่อนที่ตามเส้นทางที่ต่อเนื่องเฉพาะที่สามารถวนกลับมายังตำแหน่งเดิมโดยมีทิศทางกลับด้าน "
        "เราใช้สิ่งนี้เป็นเพียงอุปมาอุปไมยทางทอพอโลยีเท่านั้น แบบจำลองทางกายภาพจริงจะต้องระบุแมนิโฟลด์ที่ชัดเจน, เงื่อนไขเทนเซอร์ความเค้น-พลังงาน และโครงสร้างเชิงสาเหตุ ซึ่งอุปมานี้ไม่ได้จัดเตรียมไว้ให้"
    )
    story.append(Paragraph(p13, body_style))

    story.append(Paragraph(thai("4.1 สัญญาณบ่งชี้เชิงสังเกตการณ์ที่ทำนายไว้ (Predicted observational signatures)"), h2_style))
    p14 = thai(
        "สมมติฐานจะมีประโยชน์ก็ต่อเมื่อมันสามารถทำนายความไม่สอดคล้องที่วัดได้ เราจึงกำหนดสัญญาณบ่งชี้ที่ต้องตรวจวัดได้อย่างเป็นอิสระอย่างน้อย 3 ประการ:<br/>"
        "1. ส่วนตกค้างของเวลาที่สอดคล้องกัน (coherent timing residual) ซึ่งไม่สามารถกำจัดออกไปได้ด้วยการแก้ไขนาฬิกาอ้างอิงหรือการแพร่กระจายสัญญาณ;<br/>"
        "2. ส่วนตกค้างของค่าความโน้มถ่วงหรือวงโคจรที่มีความสัมพันธ์กัน โดยมีเครื่องหมายและโครงสร้างความล่าช้าตรงตามที่ทำนายไว้;<br/>"
        "3. ความผิดปกติของการแพร่กระจายทางดาราศาสตร์ฟิสิกส์ ซึ่งความต่างของเวลาจากเครื่องตรวจจับหนึ่งไปยังอีกเครื่องตรวจจับหนึ่งสอดคล้องกับบริเวณท้องฟ้าเดียวกัน แต่ไม่สอดคล้องกับรูปคลื่นต้นกำเนิดตามทฤษฎีสัมพัทธภาพทั่วไปที่ปรับพอดีดีที่สุด"
    )
    story.append(Paragraph(p14, body_style))

    story.append(PageBreak())

    # --- PAGE 5: Section 4 cont. & Section 5 ---
    p15 = thai(
        "สัญญาณคลื่นความโน้มถ่วงสามารถเข้ารหัสมวลของวัตถุกะทัดรัด, สปิน, ตำแหน่งบนท้องฟ้า และระยะทางเมื่อเปรียบเทียบกับแบบจำลองรูปคลื่น [7] "
        "ดังนั้นเราจึงเสนอการวิเคราะห์ส่วนตกค้างหลังจากการประมาณค่าพารามิเตอร์ตามมาตรฐาน แทนที่จะปฏิบัติต่อหลุมดำเสมือนเป็นประภาคารที่ส่งสัญญาณอย่างต่อเนื่อง "
        "ปรากฏการณ์วิทยาของเส้นทางที่ล่าช้าขั้นต่ำคือ:"
    )
    story.append(Paragraph(p15, body_style))

    eq4 = "h̃<sub>obs</sub>(f) = h̃<sub>GR</sub>(f) [ 1 + α W(f) e<sup>2πif Δt</sup> ] + ñ(f) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(4)"
    story.append(Paragraph(eq4, formula_style))

    p16 = thai(
        "โดยที่ α, Δt และ W(f) จะต้องถูกจำกัดขอบเขตด้วยข้อมูลเชิงประจักษ์ หากค่า α ไม่มีนัยสำคัญทางสถิติตลอดย่านความถี่ที่ทำนายไว้ จะถือว่าเป็นหลักฐานคัดค้านสมมติฐาน H2"
    )
    story.append(Paragraph(p16, body_style))

    story.append(Paragraph(thai("5 จากลูกศรแห่งเวลาเชิงควอนตัมสู่การควบคุมแบบย้อนกลับ (From a quantum arrow of time to inverse control)"), h1_style))
    p17 = thai(
        "สำหรับระบบควอนตัมเปิดแบบมาร์คอฟ (Markovian open quantum system) คำอธิบายมาตรฐานแบบลินด์บลัด (Lindblad description) คือ:"
    )
    story.append(Paragraph(p17, body_style))

    eq5 = "ρ̇ = − (i/ℏ) [H(t), ρ] + ∑<sub>j</sub> ( C<sub>j</sub> ρ C<sub>j</sub><sup>†</sup> − ½ {C<sub>j</sub><sup>†</sup> C<sub>j</sub>, ρ} ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(5)"
    story.append(Paragraph(eq5, formula_style))

    p18 = thai(
        "โดยที่ ρ คือตัวดำเนินการความหนาแน่น (density operator), H คือฮามิลโทเนียน และ C<sub>j</sub> คือตัวดำเนินการยุบตัว (collapse operators) "
        "ชุดเครื่องมือเชิงคำนวณเช่น QuTiP นำสมการเหล่านี้ไปใช้ในการจำลองระบบเปิด [5, 6]"
    )
    story.append(Paragraph(p18, body_style))

    p19 = thai(
        "ผลงานวิจัยปี 2026 ของ García-Pintos และคณะ เป็นผลงานในระดับวิถีและขึ้นอยู่กับเงื่อนไขการตรวจวัด [1] "
        "การคาดการณ์ขยายผลของเรายังคงรักษาข้อจำกัดเชิงแนวคิดดังกล่าวไว้ MCSR ถูกกำหนดให้เป็นวัตถุประสงค์ของการควบคุมแบบย้อนกลับ:"
    )
    story.append(Paragraph(p19, body_style))

    eq6 = "J[u] = 1 − F(ρ<sub>u</sub>(T), ρ<sub>target</sub>) + λ ∫<sub>0</sub><sup>T</sup> ‖u(t)‖<sup>2</sup> dt + μ R[u] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(6)"
    story.append(Paragraph(eq6, formula_style))

    p20 = thai(
        "โดยที่ F คือความเที่ยงตรงของสภาวะ (state fidelity), u(t) คือสนามควบคุม และ R ลงโทษการควบคุมที่ไม่ปลอดภัยหรือไม่ทนทาน "
        "นี่ไม่ใช่การย้อนกลับของการผลิตเอนโทรปีในระดับสากล แต่เป็นการค้นหาสภาวะที่เข้าถึงได้ภายใต้พลวัตที่มีข้อจำกัด"
    )
    story.append(Paragraph(p20, body_style))

    story.append(Paragraph(thai("5.1 แบบจำลองสัญญาณรบกวนเฟสแบบมีเงื่อนไข (Conditional phase-noise toy model)"), h2_style))
    p21 = thai(
        "เราได้ทดสอบกรณีที่เรียบง่ายและโปร่งใสที่สุด: คิวบิตเริ่มต้นในสภาวะ |+x⟩ สะสมเฟสแบบสุ่ม ϕ "
        "หากไม่สามารถเข้าถึงบันทึกสัญญาณรบกวน การเฉลี่ยแบบกลุ่มตัวอย่าง (ensemble averaging) จะทำให้สภาวะสูญเสียความสัมพันธ์ของเฟส (dephase) "
        "แต่หากมีการประมาณค่าเฟสแบบมีเงื่อนไข การป้อนกลับจะสามารถขจัดส่วนหนึ่งของการหมุนที่สะสมอยู่ออกไปได้ "
        "จากการทดสอบ 60,000 วิถี ความเที่ยงตรงเฉลี่ยที่ไม่ได้รับการควบคุมคือ 0.550 ที่ประสิทธิภาพบันทึกประสิทธิผล η = 0.85 และอัตราขยายการป้อนกลับเท่ากับหนึ่ง ความเที่ยงตรงเฉลี่ยจะเพิ่มขึ้นเป็น 0.854 "
        "การเข้าถึงบันทึกที่สมบูรณ์แบบในแบบจำลองนี้สามารถคืนสภาวะกลับมาได้อย่างแม่นยำ ภาพที่ 3 แสดงพื้นผิวอัตราขยาย-ประสิทธิภาพอย่างครบถ้วน"
    )
    story.append(Paragraph(p21, body_style))

    p22 = thai(
        "บทเรียนเชิงปฏิบัติการมีความเรียบง่ายแต่สำคัญยิ่ง: <b>ข้อมูลวิถีจะเปลี่ยนสิ่งที่เป็นไปได้ในการควบคุม</b> "
        "หากเกณฑ์วิธีฟื้นฟูระดับมหภาคมีอยู่จริง มันจะต้องรักษาประวัติการตรวจวัดที่สมบูรณ์เพียงพอ แทนที่จะอนุมานอดีตจากสภาวะสุดท้ายเพียงอย่างเดียว"
    )
    story.append(Paragraph(p22, body_style))

    story.append(PageBreak())

    # --- PAGE 6: Fig 3, Section 6, Section 7 ---
    if os.path.exists('fig_page_6_0.png'):
        f3_img = Image('fig_page_6_0.png', width=300, height=215)
        f3_img.hAlign = 'CENTER'
        story.append(f3_img)
        story.append(Paragraph(thai("<b>ภาพที่ 3:</b> ความเที่ยงตรงเฉลี่ยในการฟื้นฟูสภาวะในการทดสอบภาวะวิกฤตสัญญาณรบกวนเฟสแบบมีเงื่อนไข นี่คือแบบจำลองการควบคุมเพื่อเป็นตัวอย่างภาพประกอบ ไม่ใช่การทำซ้ำเอกสารอ้างอิง [1] และไม่ใช่หลักฐานการย้อนเวลาในระดับมหภาค"), caption_style))

    story.append(Paragraph(thai("6 เหตุผลที่ขอรับการสนับสนุนคอมพิวเตอร์ควอนตัม (Why a quantum computer is requested)"), h1_style))
    p23 = thai(
        "การจัดเก็บเวกเตอร์สภาวะแบบดั้งเดิมที่แน่นอนมีอัตราการเติบโตแบบ 2<sup>N</sup> ที่ความแม่นยำระดับ complex128 เวกเตอร์สภาวะเพียงอย่างเดียวต้องใช้พื้นที่ประมาณ 16 × 2<sup>N</sup> ไบต์: "
        "ประมาณ 18 PB สำหรับ N = 50 และ 18 EB สำหรับ N = 60 ก่อนที่จะรวมตัวดำเนินการ, วิถี, สภาวะการหาค่าที่เหมาะสมที่สุด และภาระการแก้ไขข้อผิดพลาด "
        "วิธีการเครือข่ายเทนเซอร์และแบบจำลองอันดับลดทอนสามารถลดต้นทุนได้อย่างมหาศาลเมื่อโครงสร้างเอื้ออำนวย ดังนั้นการจัดเก็บที่เพิ่มขึ้นแบบเอกซ์โพเนนเชียลเพียงอย่างเดียวจึงไม่ใช่ข้อพิสูจน์ว่าคอมพิวเตอร์ควอนตัมจะให้ข้อได้เปรียบ"
    )
    story.append(Paragraph(p23, body_style))

    p24 = thai(
        "คำขอรับการจัดสรรทรัพยากรของเรามีความเฉพาะเจาะจง: เราขอสิทธิ์เข้าถึงระบบควอนตัมระดับชาติภายใต้การควบคุม เพื่อทดสอบว่าปัญหาย่อยการควบคุมแบบย้อนกลับของ ORPHEUS "
        "สามารถเข้ารหัสเป็นการจำลองควอนตัมที่จัดการได้ หรือเป็นงานการหาค่าที่เหมาะสมแบบผสม (hybrid optimization) บนกลุ่มแบบจำลองที่จำกัดได้หรือไม่ "
        "เกณฑ์ความสำเร็จคือการลดลงของเวลาจริง (wall-clock) หรือความซับซ้อนของตัวอย่างเมื่อเทียบกับเส้นฐานแบบดั้งเดิมที่ดีที่สุด หากไม่ปรากฏข้อได้เปรียบ แขนงการคำนวณควอนตัมของโครงการจะต้องถูกยุติลงทันที"
    )
    story.append(Paragraph(p24, body_style))

    story.append(Paragraph(thai("7 แหล่งกักเก็บพลังงานทางดาราศาสตร์ฟิสิกส์ (Astrophysical energy reservoir)"), h1_style))
    p25 = thai(
        "หลุมดำเคอร์ที่กำลังหมุนบรรจุพลังงานการหมุนที่สามารถดึงออกมาได้ ความสัมพันธ์ของมวลที่ไม่สามารถลดทอนได้ (irreducible-mass relation) กำหนดไว้ว่า:"
    )
    story.append(Paragraph(p25, body_style))

    eq7 = "M<sub>irr</sub> / M = √[ ½ ( 1 + √(1 − a*<sup>2</sup>) ) ] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(7)"
    story.append(Paragraph(eq7, formula_style))

    eq8 = "E<sub>rot</sub> = ( M − M<sub>irr</sub> ) c<sup>2</sup> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(8)"
    story.append(Paragraph(eq8, formula_style))

    p26 = thai(
        "เมื่อ a* → 1 แหล่งกักเก็บพลังงานในอุดมคติจะเข้าใกล้ 29.3% ของ Mc<sup>2</sup> "
        "กระบวนการเพนโรส (Penrose process) และกลไกที่เกี่ยวข้องแสดงให้เห็นว่าการสกัดพลังงานจากหลุมดำที่กำลังหมุนได้รับอนุญาตตามหลักการของทฤษฎีสัมพัทธภาพทั่วไป "
        "แม้ว่าวิศวกรรมเชิงปฏิบัติในระดับดาราศาสตร์ฟิสิกส์จะยังไม่สามารถแก้ไขได้เลยก็ตาม [8, 9, 10]"
    )
    story.append(Paragraph(p26, body_style))

    story.append(PageBreak())

    # --- PAGE 7: Fig 4, Section 8, Section 9 ---
    p27 = thai(
        "สำหรับวัตถุเคอร์ขนาด 10 M☉ แหล่งกักเก็บในอุดมคติคือ 2.73 × 10<sup>47</sup> จูล ที่ a* = 0.90, "
        "4.03 × 10<sup>47</sup> จูล ที่ a* = 0.98 และ 4.96 × 10<sup>47</sup> จูล ที่ a* = 0.999 ภาพที่ 4 แสดงความสัมพันธ์กับค่าสปิน"
    )
    story.append(Paragraph(p27, body_style))

    if os.path.exists('fig_page_7_0.png'):
        f4_img = Image('fig_page_7_0.png', width=300, height=200)
        f4_img.hAlign = 'CENTER'
        story.append(f4_img)
        story.append(Paragraph(thai("<b>ภาพที่ 4:</b> สัดส่วนพลังงานการหมุนในอุดมคติของหลุมดำเคอร์ นี่คือการคำนวณแหล่งกักเก็บพลังงาน ไม่ใช่ข้ออ้างประสิทธิภาพทางวิศวกรรม"), caption_style))

    p28 = thai(
        "เราจึงแยกคำถามออกเป็นสองประเด็น: (i) มีพลังงานที่เป็นระเบียบเพียงพอในเชิงหลักการหรือไม่ และ (ii) มีการเชื่อมต่อที่อนุญาตทางกายภาพที่สามารถถ่ายโอนพลังงานที่เป็นประโยชน์ไปยังระดับความเป็นอิสระของการควบคุมขอบเขตที่เสนอได้หรือไม่ "
        "มีเพียงคำถามแรกเท่านั้นที่ได้รับการพิสูจน์แล้วจากการคำนวณข้างต้น"
    )
    story.append(Paragraph(p28, body_style))

    story.append(Paragraph(thai("8 แผนงานการพิสูจน์ว่าเป็นเท็จระดับชาติ (National falsification program)"), h1_style))
    p29 = thai(
        "เราขอเสนอแผนงานเป็นระยะโดยมีเงื่อนไขการหยุดที่เด็ดขาด (hard stop conditions):<br/>"
        "<b>ระยะ A — การตรวจสอบส่วนตกค้าง (Residual audit):</b> ประมวลผลส่วนตกค้างของเวลา, ความโน้มถ่วง, วงโคจร และสนามแม่เหล็กโลกซ้ำ โดยใช้ทีมอิสระและการประมวลผลล่วงหน้าแบบปิดบัง (blinded preprocessing) ปฏิเสธ H2 หากความแปรปรวนร่วมหายไปหลังจากตัดโครงสร้างพื้นฐานและกรอบอ้างอิงร่วมออก<br/>"
        "<b>ระยะ B — การค้นหาส่วนตกค้างในคลื่นความโน้มถ่วง (Gravitational-wave residual search):</b> ลงทะเบียนกลุ่มส่วนตกค้างแบบเส้นทางล่าช้าล่วงหน้า และค้นหาหลังจากการประมาณค่าพารามิเตอร์ตามสัมพัทธภาพทั่วไปมาตรฐานเท่านั้น ปฏิเสธย่านพารามิเตอร์ H2 ที่เกี่ยวข้องเมื่อค่า α สอดคล้องกับศูนย์ที่ระดับความไวที่ลงทะเบียนไว้<br/>"
        "<b>ระยะ C — เกณฑ์มาตรฐานการควบคุมควอนตัมแบบย้อนกลับ (Quantum inverse-control benchmark):</b> ใช้งานแบบจำลองของเล่นและแบบจำลองอันดับลดทอนของ ORPHEUS บนระบบดั้งเดิมและระบบควอนตัม ปฏิเสธคำขอทรัพยากรหากการทำงานบนควอนตัมไม่เหนือกว่าวิธีดั้งเดิมที่ดีที่สุด<br/>"
        "<b>ระยะ D — ความสอดคล้องทางเรขาคณิต (Geometric consistency):</b> หากผ่านระยะ A-C ทดสอบว่าพารามิเตอร์การซ้อนทับชุดเดียวสามารถทำนายกลุ่มส่วนตกค้างอิสระทั้งหมดได้หรือไม่ แบบจำลองที่ต้องใช้พารามิเตอร์อิสระแยกสำหรับเซนเซอร์แต่ละกลุ่มจะถือเป็นการปรับเส้นโค้ง (curve fitting) ไม่ใช่คำอธิบายทางกายภาพใหม่"
    )
    story.append(Paragraph(p29, body_style))

    story.append(Paragraph(thai("9 ความเสี่ยง คำอธิบายทางเลือก และข้อจำกัด (Risks, alternative explanations and limitations)"), h1_style))
    p30 = thai(
        "ความเสี่ยงที่ร้ายแรงที่สุดคือ<b>การขยายผลเกินจริงของแบบจำลอง (model overreach)</b> สหสัมพันธ์ข้ามโดเมนสามารถเกิดขึ้นได้จากนาฬิการ่วม, โครงสร้างพื้นฐานข้อมูลร่วม, สายงานการผสานรวม, กิจกรรมสุริยะ, ตารางการบำรุงรักษา และการตอบสนองของมนุษย์ต่อภัยพิบัติ การปรับพอดีแบบปัจจัยเดี่ยวจึงเป็นเพียงเครื่องมือวินิจฉัย ไม่ใช่การค้นพบ"
    )
    story.append(Paragraph(p30, body_style))

    story.append(PageBreak())

    # --- PAGE 8: Section 9 cont., Section 10, Declarations, Appendix ---
    p31 = thai(
        "ความเสี่ยงประการที่สองคือ<b>ความผิดพลาดเชิงหมวดหมู่ (category error)</b> การย้อนกลับลูกศรทางสถิติของวิถีควอนตัมที่มีการตรวจวัดไม่ได้หมายถึงการย้อนเวลาทางอุณหพลศาสตร์ ชีววิทยา หรือจักรวาลวิทยา การนำผลการควบคุมควอนตัมปี 2026 มาใช้เป็นเพียงแรงบันดาลใจและในเชิงขั้นตอนวิธีเท่านั้น<br/><br/>"
        "ความเสี่ยงประการที่สามคือ<b>วาทกรรมเรื่องพลังงาน (energy rhetoric)</b> แหล่งกักเก็บการหมุนของหลุมดำเคอร์อาจมีขนาดมหาศาล ในขณะที่สถาปัตยกรรมการดึงและการเชื่อมต่อที่เป็นประโยชน์อาจเป็นไปไม่ได้เลย การคำนวณพลังงานไม่สามารถกอบกู้กลไกการควบคุมที่ไม่ถูกต้องได้<br/><br/>"
        "ความเสี่ยงประการที่สี่คือ<b>ทอพอโลยีที่ไร้พลวัต (topology without dynamics)</b> การระบุแบบไม่มีการวางทิศทางคล้ายแถบโมเบียสอาจอธิบายได้ทางคณิตศาสตร์แต่ไม่อนุญาตในทางกายภาพ แขนง H2 จะต้องระบุเมตริก, แหล่งกำเนิดความเค้น-พลังงาน, เงื่อนไขเสถียรภาพ และโครงสร้างเชิงสาเหตุอย่างชัดเจน มิฉะนั้นจะต้องถูกละทิ้งไป"
    )
    story.append(Paragraph(p31, body_style))

    story.append(Paragraph(thai("10 บทสรุป (Conclusion)"), h1_style))
    p32 = thai(
        "เอกสารฉบับนี้ไม่ได้อ้างว่ามีสองเอกภพกำลังชนกัน มันระบุลำดับการทดสอบที่ทวีความยากขึ้นเรื่อยๆ ซึ่งจะต้องล้มเหลวเสียก่อนที่สมมติฐานดังกล่าวจะควรค่าแก่การได้รับความสนใจเพิ่มเติม "
        "สายงานการทดสอบความสามารถในการทำซ้ำสามารถตรวจจับโครงสร้างส่วนตกค้างร่วมได้เมื่อมีอยู่จริง "
        "การควบคุมควอนตัมแบบมีเงื่อนไขสามารถกู้วิถีในระบบของเล่นที่มีการตรวจวัดซึ่งหากดูในระดับกลุ่มตัวอย่างจะดูเหมือนย้อนกลับไม่ได้ "
        "การหมุนของหลุมดำเคอร์เป็นแหล่งกักเก็บพลังงานที่มีอยู่จริงทางกายภาพแต่เข้าถึงไม่ได้ทางเทคโนโลยี "
        "ขั้นตอนที่เป็นข้อสันนิษฐานคือการมีอยู่ของระดับความเป็นอิสระของขอบเขตที่เชื่อมโยงข้อเท็จจริงเหล่านี้เข้าด้วยกัน<br/><br/>"
        "<b>คำขอเร่งด่วนในขณะนี้จึงไม่ใช่การขออนุมัติเพื่อจัดการกับกาลอวกาศ แต่เป็นการขออนุมัติเพื่อทำการทดลองที่มีต้นทุนต่ำที่สุดที่สามารถพิสูจน์ว่าพวกเราคิดผิดได้</b>"
    )
    story.append(Paragraph(p32, body_style))

    story.append(Paragraph(thai("การประกาศและข้อแถลง (Declarations)"), h1_style))
    p_dec = thai(
        "<b>แหล่งทุน:</b> งานวิจัยนี้ได้รับการสนับสนุนจากกองทุนวิจัยความต่อเนื่องแห่งชาติ ภายใต้โครงการ ศวสช. ORPHEUS ร่วมสนับสนุนโดย กลุ่ม CreativeLabTH สำหรับโครงสร้างพื้นฐานการคำนวณทางวิทยาศาสตร์ที่ทำซ้ำได้และการตรวจสอบการจำลองอิสระ ผู้ให้ทุนไม่มีอำนาจในการเปลี่ยนแปลงข้อสรุปทางวิทยาศาสตร์<br/>"
        "<b>การขัดกันของผลประโยชน์:</b> คณะผู้วิจัยขอประกาศว่าไม่มีผลประโยชน์ทับซ้อนทางการเงินที่เกี่ยวข้องกับข้อกล่าวอ้างทางวิทยาศาสตร์ในเอกสารฉบับนี้<br/>"
        "<b>ความพร้อมของข้อมูลและโค้ด:</b> ตัวสร้างการทดสอบภาวะวิกฤตความสามารถในการทำซ้ำ, ค่า random seed คงที่, ตารางส่วนตกค้าง และการคำนวณพลังงานเคอร์ ถูกเก็บถาวรไว้ภายใต้แพ็กเกจ SWSN-SCI/ORP-2035-04-SUPP ข้อมูลเซนเซอร์การปฏิบัติงานที่จำกัดสิทธิ์ได้รับการยกเว้นจากสำเนาทบทวนสาธารณะ<br/>"
        "<b>การมีส่วนร่วมของผู้นิพนธ์:</b> อ.ว. (A.W.) ริเริ่มกรอบเชิงปรากฏการณ์วิทยาและปัญหาย้อนกลับ; อ.ม.ว. (E.W.) ออกแบบกลยุทธ์การพิสูจน์ว่าเป็นเท็จทางสถิติข้ามโดเมนและสายงานความสามารถในการทำซ้ำ; ต.ก. (T.K.) พัฒนาระบบควบคุม การเปรียบเทียบเชิงตัวเลข และการทดสอบความทนทาน ผู้เขียนทุกคนร่วมทบทวนต้นฉบับ"
    )
    story.append(Paragraph(p_dec, body_style))

    story.append(Paragraph(thai("ภาคผนวก ก: พารามิเตอร์ความสามารถในการทำซ้ำ (Appendix A: Reproducibility parameters)"), h1_style))
    p_app = thai(
        "การทดสอบภาวะวิกฤตข้ามโดเมนประกอบด้วยตัวอย่างรายเดือน 108 ตัวอย่าง และช่องสัญญาณมาตรฐาน 5 ช่องสัญญาณ ใช้ค่า seed สุ่มเทียมคงที่ 20350817 "
        "กระบวนการแฝงคือลำดับ AR(1) ที่มีสัมประสิทธิ์ 0.86, ปรากฏการณ์ชั่วครู่แบบเกาส์เซียนกว้าง 3 จุด และองค์ประกอบไซน์แบบอ่อน "
        "การตอบสนองของช่องสัญญาณใช้เครื่องหมาย ความล่าช้า และสัญญาณรบกวนเกาส์เซียนอิสระที่แตกต่างกัน "
        "การทดสอบการควบคุมควอนตัมสุ่มวิถีสัญญาณรบกวนเฟส 60,000 วิถี โดยมีส่วนเบี่ยงเบนมาตรฐานของเฟส 2.15 rad และประเมินความเที่ยงตรง F = (1 + cos Δϕ)/2 หลังจากการป้อนกลับ สคริปต์ฉบับสมบูรณ์เป็นส่วนหนึ่งของภาคผนวกทางเทคนิค"
    )
    story.append(Paragraph(p_app, body_style))

    story.append(PageBreak())

    # --- PAGE 9: References ---
    story.append(Paragraph(thai("เอกสารอ้างอิง (References)"), h1_style))
    refs = [
        "[1] García-Pintos LP, Liu YK, Gorshkov AV (2026) Reshaping the Quantum Arrow of Time. Phys Rev X 16:011028. https://doi.org/10.1103/l18s-9vmh",
        "[2] Dressel J, Chantasri A, Jordan AN, Korotkov AN (2017) Arrow of time for continuous quantum measurement. Phys Rev Lett 119:220507.",
        "[3] Harrington PM, Tan D, Naghiloo M, Murch KW (2019) Characterizing a statistical arrow of time in quantum measurement dynamics. Phys Rev Lett 123:020502.",
        "[4] Wiseman HM, Milburn GJ (2009) Quantum Measurement and Control. Cambridge University Press, Cambridge.",
        "[5] Johansson JR, Nation PD, Nori F (2012) QuTiP: An open-source Python framework for the dynamics of open quantum systems. Comput Phys Commun 183:1760-1772.",
        "[6] Johansson JR, Nation PD, Nori F (2013) QuTiP 2: A Python framework for the dynamics of open quantum systems. Comput Phys Commun 184:1234-1240.",
        "[7] Aasi J et al. (2013) Parameter estimation for compact binary coalescence signals with the first generation gravitational-wave detector network. Phys Rev D 88:062001.",
        "[8] Penrose R (1969) Gravitational collapse: the role of general relativity. Riv Nuovo Cimento 1:252-276.",
        "[9] Christodoulou D (1970) Reversible and irreversible transformations in black-hole physics. Phys Rev Lett 25:1596-1597.",
        "[10] Maeda K, Okabayashi K, Okawa H (2018) Maximal efficiency of the collisional Penrose process with spinning particles. Phys Rev D 98:064027.",
        "[11] Maldacena J, Susskind L (2013) Cool horizons for entangled black holes. Fortschr Phys 61:781-811.",
        "[12] Jacobs K, Steck DA (2006) A straightforward introduction to continuous quantum measurement. Contemp Phys 47:279-303."
    ]
    for r in refs:
        story.append(Paragraph(r, ref_style))

    doc.build(story, canvasmaker=NumberedCanvas)
    print(f"Successfully generated {pdf_filename}!")

if __name__ == '__main__':
    build_pdf()
