2018年12月3日 星期一

漢字使用環境的建置 ㈣ —— 開卷篇

我在查詢辭典時,經常還需進一步參照該辭典的原始書影,尤其是一些古文字書、辭書、韻書。一來可能是文本化後的文字仍有所錯漏,二來可能是原書仍有一些文本化難以呈現的內容,例如一些字形、樣式、插圖等等。但是如果還是必須手動去一一翻書查找,那是件困難而沒效率的事,MDict 辭典帶來的快速輔助閱讀功能便要大打折扣。於是在我心中便一直盤旋著一個想法:有沒有一種方便而又優雅的方法,讓 MDict 辭典幫我自動翻找書籍,以便能快速地找到我想參考的資料內容呢?

這個念頭縈繞心頭醞釀了許多年,幾經嘗試,終於有了一些成果……

什麼是「開卷助理」?


「開卷助理」是一款設計用來輔助 MDict 辭典查閱的軟體,它可以在使用者點擊埋有「開卷條碼」的連結時,自動帶出電子書的對應頁面,方便使用者對照參閱。可以把它簡單理解為 MDict 辭典的一個輔助「外掛」。

為什麼需要「開卷助理」?


常見的 MDict 辭典大概可以分成兩大類:「文本版辭典」與「圖片版辭典」。

「文本版辭典」體積小、可以全文檢索、可以複製內容,優點很多,但是優質的文本卻很難取得,多數仍有許多瑕疵、錯漏,故使用時偶爾仍需要有紙質辭典的掃描版本以資對照,做為查閱時的輔助。

傳統的解決方案通常是製作一部「文本版辭典」,另外再製作一部「圖片版辭典」,然後將兩個版本的辭典設定成聯合查詢。這樣做有幾個缺點:一是費時費工(「圖片版辭典」的製作雖然相對簡單,但仍有一定的繁瑣程序);二是使用時體驗不佳(多數時間可能只需要查詢文本版,但這時圖片版仍會占用版面;而遇到較長的詞條時,文本版與圖片版的對照又會很困難,需要來回地拖動捲軸、或是頻繁地切換)。

有沒有一種方法,平常只需文本版時,圖片版的內容不會出來占用版面,也不會有一大堆的圖片索引「汙染」檢索表列;而當需要有圖片版的頁面來對照時,又能輕鬆地把它呼叫出來、隨時縮放檢視比對?這也就是「開卷助理」被設計賦予的任務。

「開卷助理」的工作原理


原本想利用微軟的 Asynchronous pluggable protocols 技術來實踐「開卷助理」的功能,在正常的瀏覽器中可以動作(但會有警告訊息),但在 MDict 中卻完全不動作(MDict 不支援),因此計畫宣告失敗。

幾個月後,有了新的靈感,於是重啟計畫。這次利用 Windows 標準的剪貼簿來做為溝通的管道,只要在 MDict 的辭典內埋入「內應」,便能裏應外合地完成所需的工作。

「開卷助理」的工作原理其實很簡單。首先在 MDict 的辭典裏設置一個連結,點擊這個連結時會呼叫 Javascript,把一個特定的「開卷條碼」給送進剪貼簿。這時「開卷助理」應該早就已經「埋伏」在外,隨時等待著剪貼簿內容有所變化,一旦有「開卷條碼」被送入剪貼簿,「開卷助理」就會掃描這個「條碼」,解析出對應的資訊,然後呼叫對應的電子書閱讀器,把指定的頁面給展示出來,如此我們希望的功能便能達成了。

* 其實也不一定非得要配合 MDict,任何可以將「開卷條碼」送入剪貼簿的環境都可以配合使用。例如就有朋友利用 Excel 的儲存格來存放「開卷條碼」,點選、複製後一樣可以自動開啟書籍頁面。

(批量生成「開卷條碼」)

(點選「開卷條碼」按複製即可作動)

「開卷條碼」的格式


目前設計的格式如下:
<通道ID>://<頁碼>[+ or -<偏移量>]@<辭典名稱>[~<附加名>]
例如:「ebf://2+1@開卷助理」,其中:

<通道ID>:
做為「開卷條碼」的識別。目前我製作的辭典都使用 ebf 這個中性的通道名稱,意謂 e-book file。可根據個人的需求,自行定義不同的通道名稱。例如用 djvu 表示要開啟 djvu 格式的電子書。

<頁碼>:
辭典電子書相應頁面的頁碼。

<偏移量>:
電子書的閱讀器通常只能接受絕對的頁碼(1~N),但電子書內容的第 1 頁通常不在絕對的第 1 頁,因為還有封面、前言、目錄等等,因此可以利用加或減一個偏移量來將內容頁碼轉換成絕對頁碼。若是頁碼一致,沒有偏移,則此欄(包括加減號)可以完全省略。

<辭典名稱>:
辭典電子書的檔名(可以包含完整路徑)。

<附加名>:
給重新映射時使用的額外附加名。

「開卷助理」的設定


在通知列的「開卷助理」圖示上點擊左鍵,可以叫出簡易的設定畫面。
以右鍵點選某一筆設定,選擇編輯,即可修改設定的內容(空白處點擊右鍵則可以新增)。目前可接受的設定格式如下:
<通道ID>://<電子書閱讀器程式>|<命令行參數>
例如:「ebf://FoxitReader.exe|/A page=%d "%s.pdf"」,其中:

<通道ID>:
做為「開卷條碼」的識別。目前我製作的辭典都使用 ebf 這個中性的通道名稱,意謂 e-book file。可根據個人的需求,自行定義不同的通道名稱。例如用 djvu 表示要開啟 djvu 格式的電子書。

<電子書閱讀器程式>:
做為該通道預設的電子書閱讀程式(可以包含完整路徑)。例如:FoxitReader.exe。

<命令行參數>:
閱讀器需要的實際命令行參數,參數中可套入兩個變數,%d 代表頁碼,%s 代表辭典名稱(目前順序不可顛倒)。

編輯完畢的設定會自動記憶,重新開機也不會忘記。

使用環境的設置


下載連結:開卷助理.7z(952 KB)

「開卷助理」程式其實並不需要安裝,只要直接執行即可。但為了簡化檔案間相對路徑的複雜度,建議採用最簡單的設置方式如下:
  1. 建立一個放置辭典電子書的專用資料夾,例如:D:\掃描版辭典。
  2. 將「開卷助理」程式直接放置此處。
  3. 為了方便測試,建議自行下載取得 Foxit Reader 這款免費的 PDF 閱讀器,安裝後將 FoxitReader.exe 這個檔案以及 lang 這個資料夾(多國語言包)拷貝出來(其他亂七八糟的東西都可以不要,這樣子就是一個綠色的可攜版,取得之後就可以將它解除安裝了),然後也請直接放置此處。
  4. 把測試用的「開卷助理.pdf」、「開卷助理(雙色版).pdf」電子書都丟進這裏。
  5. 把測試用的「開卷助理.mdx」加進 MDict 辭典。
這樣就完成了基本的測試設置。

直接執行 GoPage.exe(建議將捷徑放到啟動資料夾,開機即自動執行,這樣比較省事),打開 MDict 辭典,叫出「開卷助理.mdx」辭典,隨便查詢一個詞條,然後點擊頁碼,這時應該就會自動帶出對應的 PDF 頁面了。

重新映射的設置


如果我們使用的電子書跟辭典製作者的預設不同,檔名不同(可能有不同的命名習慣)、頁碼有偏差,那該怎麼辦呢?

「開卷助理」有一個重新映射的功能,可以讓使用者重新定義電子書的對應關係。例如辭典的製作者原先設定點擊頁碼後要開啟 ABC.pdf這本電子書,只要設置一個 ABC.rmp 檔(主檔名必須與原書一致,副檔名則取 remap 之意),就可以輕鬆達成此目的。

檔案內容的格式如下:
[+ or -<偏移量>]@<辭典名稱>
例如:「+2@開卷助理(雙色版)」,其中:

<偏移量>:
可以覆蓋掉辭典製作者原先的設定,重新定義頁碼的偏移量。若是頁碼一致,沒有偏移,則此欄(包括加減號)可以完全省略。

<辭典名稱>:
可以覆蓋掉辭典製作者原先的設定,重新定義辭典電子書的檔名(可以包含完整路徑)。

rmp 檔案基本上就是一個純文字檔,若辭典名稱中含有中文或是一些特殊符號,則檔案編碼建議採用 UTF-8 或是 UTF-16 帶有 BOM 的格式(請注意:不帶 BOM 的格式將不被接受)。

某些電子書是眾多分冊的合輯,而各分冊的頁碼又是彼此獨立並不接續。遇到此類電子書,辭典製作者只要分別指定偏移量不同的相同開卷條碼即可,但若遇到使用者想重新映射,因為開卷條碼的辭典名稱都相同,便無法區分是哪一分冊,該用什麼檔名或偏移量來正確開啟電子書。

要解決此一問題,辭典製作者可以在各分冊的開卷條碼中指定不同的附加名,例如:「ebf://<頁碼>+10@電子書合輯~01」、「ebf://<頁碼>+100@電子書合輯~02」、「ebf://<頁碼>+220@電子書合輯~03」……。當沒有設置重新映射時,「開卷助理」會忽略所有的附加名,直接用 +10、+100、+220 的偏移量來開啟名為「電子書合輯」的這本電子書。若使用者想設置重新映射,則需以「電子書合輯~01.rmp」、「電子書合輯~02.rmp」、「電子書合輯~03.rmp」來分別對應各分冊的開卷條碼,如此便能達到正確區分的目的。

後記


「開卷助理」於 2016 年完成初版,一開始只定位在給自己使用的輔助閱讀工具,介紹給幾位好友使用之後,頗受好評,便在學界的一些朋友圈小範圍慢慢傳播開來。經過這兩年來陸續的小幅修正、改版,程式更趨穩定,於是決定正式公開發布。

MDict 配合「開卷助理」的實際使用情境圖,點擊辭典的頁碼後自動開啟對應的 PDF 頁面

一本喜好閱讀之初心,將此成果無條件分享出來,樂見學術研究、教育工作、個人閱讀這方面的運用,但請勿用做任何形式的商業營利行為

好友阿良兄的 引得市 網站便全面內嵌有 「開卷條碼」,歡迎多加利用(具體的使用方式請參看網站的 使用說明)。

我製作的辭典,有頁碼標示的(例如康熙字典、說文解字、廣韻字典、集韻字典),都可以配合「開卷助理」來開啟掃描版書影,希望這個小工具對各位有所幫助。

p.s. 各位如果有自己慣用的電子書閱讀器,可以自行加以設置;若是就決定使用內文所提的 Foxit Reader,可以在它的 "檔案\偏好設定" 裏修改介面語言、停用廣告等等,請依自己的喜好調整版面。



12 則留言:

  1.   國學大師>字典首頁,有好些韻書、字詞典影本,字頁對照,
    有啥法子,把它取來整編呢?
     
      http://www.guoxuedashi.com/zidian/4E00.html

    回覆刪除
    回覆
    1. 阿文兄,那些我多數都有整理,或是正在整理中,可以公開的,我陸續都會發布出來。

      刪除
  2. WFG先生,你應當介紹一下製作MDX時如何顯示支持“開卷助理”的頁碼,好讓大家也製作支持“開卷助理”的MDX,正像MDICT詞典程序的作者介紹如何製作MDX那樣。藉助衆人之力,你的“開卷助理”就會流傳廣汎,你說是吧。

    回覆刪除
    回覆
    1. 您好!感謝您的建議。其實製作的方法很簡單,我在「開卷助理」的工作原理一節已經說明:

      在 MDict 的辭典裏設置一個連結,點擊這個連結時會呼叫 Javascript,把一個特定的「開卷條碼」給送進剪貼簿。

      或許是太簡單,所以讓您認為我沒說明,呵呵!俗話說:「最好的說明就是給一個範例。」我在「開卷助理」的壓縮包裡附上了一個只有七個詞條、簡單卻很完整的範例,相信會製作 MDict 辭典的朋友稍微看一下就能上手。

      這件事唯一略有門檻之處是 Javascript 的指令,要懂程式的朋友才能看懂。不過若真的沒學過 Javascript 也不要緊,就照抄我的範例即可,把範例當成一個樣版,套用到其他詞典內容上,相信很容易就能成功。

      或許等我有空再針對這個題目另行撰文,不過等著我整理的資料實在太多,要有空檔,可能要等上好一陣子了!

      刪除
  3. 廣韻字典、集韻字典有下載嗎?

    回覆刪除
    回覆
    1. 抱歉,父親一場大病,這一兩個月都在醫院日夜照護,短時間無法處理辭典相關事宜,敬請見諒!

      刪除
  4. 作者已經移除這則留言。

    回覆刪除
    回覆
    1. 印象中是的,不能讓它存在空格

      刪除
  5. 您好:
    謝謝分享好用軟體!
    我想用開卷助理來檢索掃描的圖檔,保持圖檔才能持續加工處理,因此希望不要轉成PDF。
    目前已經做好了詳細的圖檔索引,也在開卷助理的dat檔中設定了jpg閱讀軟體路徑。
    但由於是圖檔,都放在同一資料夾中;從開卷條碼的設定來看,似乎是一個圖檔就要設定一個條碼,若有五千張圖片,就要設定五千個條碼了。
    不知道我有沒有誤會使用方法,是否有更簡潔的設定方式?

    回覆刪除
    回覆
    1. 您好,您希望的檢索是能檢索到某一張圖吧(以單張圖為最小單位),如此自然要每一圖檔都有一個唯一的條碼,否則如何能定位呢?您說是吧!

      依您的需求,目前有一個方法可以達成:

      將所有圖檔依流水號命名並壓縮打包成一個壓縮檔,並將壓縮檔副檔名更名為對應的圖片書標準(rar 改為 cbr;zip 改為 cbz)。然後用 SumatraPDF 一類支援開啟圖片書(通常就是指掃描的漫畫書)的軟體來當閱讀器,開卷條碼大概就像這樣:「cbz://0100@XXX」。其中 xxx 是您的圖片書檔名,而 0100 就是圖檔的流水號,只要代換這個部分就可以開啟對應的圖片。

      由於就是標準的壓縮檔,您可以利用壓縮軟體輕易地開啟圖片書檔,隨時置換其中的某些圖片檔,滿足您修改的需求。

      p.s. 以 SumatraPDF 為例,開卷助理的dat檔設定:cbz://SumatraPDF.exe|-page %d "%s.cbz"

      刪除
    2. 您好:
      謝謝回覆!
      我平常也是用CBZ保存漫畫,看來這的確是最簡潔的辦法了。可惜WIN平台上沒啥好用的閱讀器。
      目前已經設定好了,非常感謝您的程式以及教學,謝謝!

      刪除
    3. 不客氣!

      其實一開始我也是打算用 cbz 格式來打包一些字典、古籍的掃描檔,找到比較趁手的免費閱讀器如 SumatraPDF、HoneyView 等,可惜遇到數GB的高清大檔時都有問題,最後只好放棄,還是轉成 PDF 格式來用。

      不過您的提問倒是觸發了我的靈感,或許下一版開卷助理,我可以加上一個特殊通道,直接可以開啟指定資料夾下的索引圖片(預設用作業系統附的 Windows 相片檢視器),這樣就可以保持圖檔不必壓縮,也沒有壓縮檔太大的問題了。

      刪除