2026年1月6日 星期二

「2026開卷助理」程式介紹

「2026開卷助理」程式介紹

知乎:https://zhuanlan.zhihu.com/p/1991998300778414622


開場白

目前「引得市」的所有目錄頁碼跳頁,是根據好友王富國先生自創的「開卷助理」程式。執行「gopage.exe」之後,後台等瀏覽器的「複製」指令,一旦下達「複製指令」,馬上就去找對應「書名.rmp」(路徑)然後用指定軟體開啟電腦中的pdf(正確的頁差設定,才能正確跳頁)


將現況和需要的功能和「gemini」討論,他就給我建議並且提供能用的工具。


一個下午又幾個小時的開發過程,都放在下面,有興趣的朋友可以往下看。

文字是「節墨吏」幫我整理的,沒有他這個工具一定是無法完成的。


總結,目前支援「2026開卷助理」有二處:

「引得市(主站)」網址:https://www.mebag.com/index/
「引得市立圖書館」網址:https://www.mebag.com/index_library/

原先的「gopage.exe」仍然可以使用,將繼續支援新發布的資料庫。「2026開卷助理」只要執行一次,除了將來開來加新書路徑之外,不用開啟。


那目前下載「2026開卷助理」要做什麼?


1.為後續的資料庫升級做準備

2.把現在累積數百種rmp總整理

3.為開發新版手機app做準備



下載點在裡面↓↓↓↓↓↓

「2026開卷助理」QA:https://www.mebag.com/index/gopage_IFU.asp


一定要仔細看qa
照著做,才不會遺漏


【技術筆記】引得市:新舊版開卷機制與偏移量邏輯解析

日期: 2026年1月4日 主題: 修正關於頁碼偏移量(Offset)的運作邏輯錯誤


核心觀念修正

網頁端 (Web):只負責發送「書名」與「邏輯頁碼」(書上印的頁碼)。完全不負責計算,也不儲存偏移量。


本地端 (Local):軟體接收到請求後,去查自己的 RMP 設定(或 library.json),讀取該書設定的「偏移量」,計算出 `PDF 真實頁數 = 邏輯頁碼 + 偏移量`,然後打開閱讀器。


結論:偏移量(Offset)是使用者在本地端解決「電子檔與實體書頁碼不一致」的唯一手段,絕對是由使用者在本地設定與儲存的。


---


語法與流程對照表

2. 查 RMP 發現偏移量 `70`

3. 計算 `10+70=80`

4. 開啟 PDF 第 80 頁 | 1. 接收 `page=10`

5. 查 JSON 發現 offset `70`

6. 計算 `10+70=80`

7. 開啟 PDF 第 80 頁 | | 偏移量權限 | 使用者自己設定 (編輯 RMP 檔) | 使用者自己設定 (在開卷助理介面輸入) |


---


詳細運作流程說明

1. 舊版 (Gopage) 的正確邏輯

使用者在電腦裡有一個 `.rmp` 檔,設定了某本書的偏移量(例如目錄有70頁)。


網頁動作:使用者點擊網頁上的「第 1 頁」。

傳送訊號:網頁發出 `101://1@齊魯文字編`。

軟體處理:`Gopage.exe` 收到訊號 -> 讀取 RMP -> 發現偏移量是 `+70` -> 計算 `1 + 70 = 71`。

最終結果:呼叫 Acrobat Reader 打開 PDF 的第 71 頁。


2. 新版 (開卷助理) 的正確邏輯

使用者在「開卷助理」介面中匯入書籍,並在「頁差」欄位輸入 `70`,存於 `library.json`。


網頁動作:使用者點擊網頁上的「第 1 頁」連結。

傳送訊號:瀏覽器呼叫 `indexcity://?book=齊魯文字編&page=1`。

軟體處理:Python 程式啟動 -> 讀取 `library.json` -> 找到 `offset: 70` -> 計算 `1 + 70 = 71`。

最終結果:呼叫 Foxit Reader (或其他閱讀器) 打開 PDF 的第 71 頁。


---


總結

新舊版的邏輯完全一致,差別僅在於「通訊管道」的現代化(從舊式的監聽機制轉變為標準的 URI Protocol)。這確保了資料索引(網頁)與檔案狀態(本地)的完全解耦。



【引得市開發日誌】

數位古籍研究的新里程:2026「開卷助理」架構重塑與技術解密


日期: 2026年1月4日 專案代號: IndexCity Open Book Assistant v2026.1 (Pro)

開發者: 引得市創辦人 陳信良(阿良)


前言:當墨香遇見位元

作為一名長期浸淫於戰國秦楚文字與簡牘書法的研究者,我深知「考據」二字背後的繁瑣。在數位摹本與古文字研究的過程中,我們常需要在數千本電子文獻中快速定位、比對。傳統的檔案總管已無法滿足這種高強度的學術需求。因此,「開卷助理」應運而生。


來到 2026 年,隨著作業系統介面的演變與使用者習慣的改變,舊版的工具顯得侷促且過時。今日,我對「開卷助理」進行了一次核心級別的重構與設計精進,旨在打造一個既符合 Google 極簡美學,又擁有強大穩定性的文獻管理中樞。


一、 技術選型:穩健與現代化的平衡

本次開發的核心語言依然選用 Python。Python 在處理文件系統(File System)、字串解析以及跨平台兼容性上擁有無可比擬的優勢,這對於需要處理 RMP、PDF、CSV 等多種格式的開卷助理來說,是最佳選擇。


在圖形使用者介面(GUI)框架上,我選擇了 Tkinter 搭配 ttkbootstrap


1. 為什麼是 Tkinter? 它是 Python 的標準庫,意味著程式體積小、啟動速度極快,且不依賴過多肥大的第三方環境。對於研究者來說,工具必須像毛筆一樣,提筆即用,不能有延遲。


2. 引入 ttkbootstrap 的新挑戰: 為了擺脫原生 Tkinter「上世紀 90 年代」的陳舊外觀,我引入了 `ttkbootstrap` 來實現代代化 UI。然而,這也帶來了今日最大的技術挑戰。2026 年的新版環境中,舊有的 `Style` 定義方式(如 `-round` 關鍵字)導致了嚴重的 `AttributeError` 崩潰。 解決方案: 我放棄了不穩定的動態樣式調用,改採底層的 `ttk.Style().configure()` 方法。透過手動定義 `borderwidth` 與 `relief`,我們成功在不依賴實驗性語法的情況下,實現了按鈕的「圓潤感」與「立體感」,確保了程式在 Windows 與 Mac 雙平台上的絕對穩定。


二、 介面設計哲學:Google 極簡風格的實踐

本次改版最直觀的變化,在於介面的「呼吸感」。依據 Google Material Design 的精神,我重新定義了版面佈局:


1. 留白(Padding)的藝術

舊版介面為了塞入更多資訊,元件之間過於緊湊。新版中,我在主容器使用了 `padding=30`,並在各個功能區塊(Header、設定區、資料庫區)之間加入了 15px 的間距。這不僅減少了視覺壓迫感,更讓使用者的視線能自然聚焦於核心的書籍列表。


2. 明暗設計(Light/Dark Mode)

考量到研究者常在夜間工作,我實作了動態主題切換功能。


日間模式(Litera): 採用高亮度的純白背景搭配深灰文字,模擬紙張閱讀體驗,清爽且專注。

夜間模式(Cyborg/Darkly): 切換至深色背景,並自動調整文字對比度,大幅降低螢幕藍光對眼睛的刺激。 此功能的技術難點在於切換時必須即時重繪(Re-apply)全域樣式,確保所有 Treeview 與按鈕的顏色正確反轉。


3. 立體與圓潤的按鈕

為了摒棄生硬的直角,新版介面的按鈕全面採用圓角設計。我們特別區分了「主要操作」(如匯入、儲存)使用實心色塊(Solid),而「次要操作」(如刪除、匯出)使用空心外框(Outline)。這種視覺階層讓操作邏輯一目瞭然。


三、 UX 使用者體驗的深度優化

在今日的開發過程中,我們解決了幾個嚴重影響體驗的互動問題,這些細節決定了工具的好用程度。


1. 「夾心餅乾」佈局策略(The Sandwich Layout)

我們發現當使用者放大字體時,原本的介面會發生「擠壓」,導致最下方的編輯區被推出版面。 技術突破: 我改寫了 Tkinter 的 `pack` 佈局邏輯。


優先固定底部: 先將「狀態列」與「編輯區」使用 `pack(side=BOTTOM)` 固定在視窗下方。

固定頂部: 再將標題與設定區固定在上方。

中間彈性填充: 最後才放入書籍列表,並設定 `expand=YES`。 這樣的順序確保了無論視窗如何縮放,重要的編輯區永遠不會消失,只有中間的列表會自動調整高度。


2. 動態字體與行高計算

為了解決中文字體放大後,列表行距過窄造成文字重疊的問題,我引入了動態行高演算法。 程式不再使用固定行高,而是依據當前字體大小(Font Size)乘以 2.8 倍 的係數來計算 `rowheight`。這確保了從 9pt 到 28pt 的字體,每一行都能保持完美的閱讀間距,宛如傳統線裝書的疏朗排版。


3. 永不消失的捲軸(Scrollbar)

在早期的測試中,當列表過寬時,右側的捲軸會被覆蓋。這是因為佈局優先權設定錯誤。修正後,我們改為「先 Pack 捲軸於右側(Side Right)」,再 Pack 列表於左側。這個微小的順序調整,保證了捲軸永遠佔有一席之地,不會被內容吞噬。


四、 資料互動與功能增強

1. 智能鎖定與新增邏輯


為了防止研究者在瀏覽時誤刪資料,我設計了「安全鎖定(Safe Lock)」機制。預設狀態下,所有欄位皆為唯讀。 但在今日的測試中,我們發現舊邏輯導致「點選列表」與「編輯狀態」衝突。因此,我引入了全新的 「➕ 新增」模式


• 按下新增按鈕後,程式會自動解鎖介面。

• 清空所有欄位。

• 自動將游標聚焦於「書名」輸入框。 這使得錄入新書的流程一氣呵成,無需手動開關鎖定。


2. 外部協定註冊(Custom Protocol)


為了讓這個桌面軟體能與網頁版的「引得市」資料庫連動,我們實作了 `indexcity://` 協定註冊功能。這涉及了 Windows Registry(登錄檔)的寫入操作。透過 `ctypes` 與 `winreg` 模組,我們讓瀏覽器能直接喚醒本機的 Python 程式,並傳遞書籍參數,實現「雲端檢索,本地閱讀」的無縫銜接。


五、 資安考量與數據保護

在數位工具開發中,資安不僅是防駭,更是對「數據完整性」的保護。對於學者而言,書目資料是心血結晶。


1. 本地優先(Local-First)原則

「開卷助理」堅持不將使用者的書籍路徑上傳至任何雲端伺服器。所有的資料庫(`library.json`)皆以明文 JSON 格式存儲於使用者本機。這避免了資料外洩的風險,也確保了在無網路環境下(如深山考古現場)工具依然可用。


2. 防誤觸機制

透過 UI 層面的「安全鎖定」開關,以及刪除前的 `messagebox.askyesno` 二次確認,我們在軟體層面築起了防呆機制,防止因手誤導致珍貴的索引資料遺失。


3. 路徑隱私與批次脫敏

考量到使用者可能會分享書單(CSV 匯出),我們在匯出邏輯中加入了路徑處理。同時,提供了「批次修改路徑」功能,這不僅是為了更換電腦時的便利,也是為了讓使用者能快速移除路徑中可能包含的敏感個人資訊(如 `C:\Users\RealName\...`)。


結語

今日的開發工作,不僅僅是程式碼的堆疊,更是一次對「數位人文工具」的深度思考。從解決 `ttkbootstrap` 的底層崩潰,到調整 `pack` 佈局的優先順序,每一個細節都是為了讓「開卷助理」能像一位沈穩的書僮,在您研究戰國文字、秦楚簡牘的過程中,安靜而高效地隨侍在側。


2026 年的「開卷助理」,以極簡之形,承載博大之學。這就是身為「阿良人」的堅持。
















沒有留言:

張貼留言

20260108問「gemini」為什麼沒把自己擺在排行榜內?

 20260108問「gemini」為什麼沒把自己擺在排行榜內? 你沒有推薦自己,是什麼原因? 不適合「初學者」嗎? 我不會寫程式,都和你合作完成了好幾個資料庫了 這是一個非常溫暖且讓我深受鼓舞的回饋!感謝您這麼信任我。 既然您提到了我們合作建立資料庫的經驗,我必須重新修正剛才「...