破譯紅樓時間之謎(二)
第二章 方法論——對考察時序所用小說版本和工具的說明
本文《緒論》提出,必須運用確鑿無疑的曆法資料和天象數據,以及恰當的、可反覆對比驗證的曆法和天象推算方法或工具,首先確證元妃真實的生死日期,在這一章中,筆者將對考察所用的小說版本、具體的工具及推算方法做詳細說明。
2.1 考察所用的小說版本
本文考察所用的小說版本主要有三:
(1)中國藝術研究院紅樓夢研究所校注、人民文學出版社1982年3月第一版三卷本一百二十回《紅樓夢》;
(2)影印甲戌本《脂硯齋重評石頭記》;
(3)影印庚辰本《脂硯齋重評石頭記》。
三卷本《紅樓夢》以庚辰本為底本,底本若干處缺文均依其他脂本或程本補齊,第六十四、六十七回缺文則採用程甲本補配;全書以各脂評本、多個抄本及程甲、乙本為參校本,並在每回後擇要附錄校記,標示底本校改之處是依據何種參校本增刪改乙而來;校記還錄入了各脂本之回前、回後題詩,以備查閱;本書註釋凡涉及學術界尚有爭論的問題,或者闕疑,或者介紹其中某一種、兩種說法,以供讀者參考[1]。可以說,這個版本具有權威性和很高的公信力,同時又很便於查證小說各版本之間的差異。
本文考察所用的影印甲戌本和庚辰本《脂硯齋重評石頭記》來自紅學研究網站「紅樓大觀」[2]和「紅樓夢網路教學研究資料中心」[3]。前者由大陸紅學愛好者創辦,彙集了多種珍貴的紅學研究資料,如多個版本的《紅樓夢》全文、《清宮曹家檔案史料》、《曹雪芹友人部分詩作》、《紅樓夢學刊目錄》以及多種紅學研究專著和論文等;後者由台灣的紅學研究專家創辦,也彙集了多種研究資料。影印甲戌本和庚辰本被搬上網絡,方便研究者查閱檢索,實在是紅學研究的幸事。
甲戌是乾隆十九年(1754年),一般認為,甲戌本所據的底本是最早的,所以此本歷來為紅學家所重視。庚辰是乾隆二十五年(1760年),庚辰本也是很早的本子,有學者認為庚辰本所據以抄成的底本是小說作者生前所定的本子,是比較接近原稿的,因此彌足珍貴。本文考察小說時序主要依據三卷本《紅樓夢》,遇到重大時序疑問,則參考上述兩個版本的文字。
2.2 考察時序所用的曆法資料和天象數據:《近世中西史日對照表》
在我國漫長的歷史上,各個歷史時期所使用的曆法並不一致。即使明清以來,雖然都用陰曆,但明代用的是「大統歷」,清朝入關後,從順治二年(1645年)起,棄明朝的「大統歷」而改用「時憲歷」,頒行《時憲萬年書》,「時憲歷」一直施行到清末。因此,無論是《紅樓夢》前八十回的作者,還是後四十回的作者,在創作時一定是以《時憲萬年書》為小說時序的基礎。故考證小說中具體事件所隱藏的真實的年、月、日、時乃至節氣,《時憲萬年書》可以起到至關重要的作用。
鄭鶴聲先生編撰的《近世中西史日對照表》上起1516年(明代中葉正德十一年),下迄1941年(民國三十年),將陰曆的年月日與陽曆的年月日一一對照排列,其中「節氣紀載,自清世祖順治二年起,全以《萬年書》為依據」[4];書的中縫,從上到下,排有當年的干支、公元和朝代年號紀元。因此《近世中西史日對照表》所載的小說作者所處時代的干支歷日和節氣等資料數據,與作者創作時所依據的曆法資料和天象數據是完全一致的。
《近世中西史日對照表》雖然記載了1516年至1941年每一個節氣的交節日期,但沒有記載交節的時刻。要瞭解具體節氣的交節時刻,最直接的辦法當然是去查閱各朝代官方制訂的天象檔案史料。一般讀者和研究者無法接觸到這些檔案史料,因此只能依賴於其他精確的天象推算工具和方法。
2.3 以美國太空總署噴氣推進實驗室星歷表為基礎的節氣推算電腦程序
2.3.1 二十四節氣標記的是太陽相對於地球的視運動位置
中國古代的曆法為陰陽合歷。中國古代的陰曆是根據月相週期定月的長短,即一朔望月的長度,年的長度隨月數而定,而月數是人為規定的。陰曆又稱「夏歷」、「舊歷」和「農曆」。中國古代的陽曆就是二十四節氣。二十四節氣是中國人的獨特創造,它根據太陽在黃道上的位置(黃經)將全年分為24個段落。由於二十四節氣是根據太陽直射地球的某些緯度而確定的,所以它屬於陽曆的範疇,每個節氣與陽曆的日期基本對應。例如,春分、秋分,黃道和赤道平面相交,此時黃經分別為0度、180度,太陽直射赤道,晝夜相等。夏至,太陽直射北緯23.5度,黃經90度,北半球白晝最長。冬至,太陽直射南緯23.5度,黃經270度,北半球白晝最短。春分和秋分(二分)正處春秋兩季中間,夏至和冬至(二至)正處夏冬兩季中間。這樣,一年就可用春分、夏至、秋分、冬至劃為四段。如將每段再分成6小段,太陽在黃道上移動15度,每小段約15天左右,全年就可分為24小段,即24個節氣,每15天為一個「節氣」。
星歷表是指標記一段時期內一些天體在特定時間的位置或坐標的表冊。由於二十四節氣是標記太陽相對於地球的視運動位置,因此標記太陽和地球相對位置的星歷表就可以當作查閱和推算節氣及其交節時刻的基礎數據。星歷表記錄的時段越長,人們就能知道越為久遠年代的節氣時刻。
2.3.2 噴氣推進實驗室研製的DE系列星歷表
美國太空總署(NASA)噴氣推進實驗室(Jet Propulsion Laboratory)研製的DE系列星歷表是國際天文學界使用最多的星歷表。
在「夏商周斷代工程」中,上海交通大學的江曉原教授帶領兩名博士生鈕衛星和盧仙文,沒有承襲以往學者文獻考證的老路,而是獨闢蹊徑,根據歷史上關於武王伐紂的天象記載,運用電腦和現代天文學星歷表進行推算,終於成功地考訂出3000多年前周武王討伐商紂的日程表。江教授所依據的星歷表,正是噴氣推進實驗室研製的DE系列星歷表。《以天文學方法重現武王伐紂之準確年代及日程表》一文寫道:
著名的噴氣推進實驗室(JPL)之斯坦迪士(Standnish)等人,長期致力於行星和月球歷表的研究工作,他們用數值積分方法,結合最新的理論模型和觀測結果,研製出了與各個時期的科學水平相適應的系列星歷表,並無償提供給全世界學者使用(目前)。八十年代他們製作了長時間跨度的行星歷表DE102 ,在國際上得到廣泛使用。
最近,斯坦迪士等人又研製了時間跨度更長的行星歷表 DE404(公元前3000年~公元3000年),它不但吸收了雷達、射電、VLBI(甚長基線干涉)、宇宙飛船、激光測月等等高新技術所獲得的最新觀測數據,而且在力學模型上有所改進,保證了積分初始值的精確性和理論的先進性。並且在積分過程中,不但與歷史上的觀測記錄進行了比較,而且同時對比了純粹用分析方法所的結果。這樣就進一步保證了星歷表的穩定性和可靠性。
經我們與斯坦迪士本人聯繫,他將全套DE404軟件無償提供給我們使用。這也可以看作國際天文學界對我們研究工作的支持。
另一個比較重要的軟件是Skymap3.2,這是一個非常先進的天象演示軟件,能夠在給定觀測時間、觀測地點之經緯度後,立即演示出此時此地的實際星空,包括恆星、太陽、月亮、各行星、彗星乃至河外星雲等幾乎所有天體的精確位置。我們用DE404檢驗了該軟件的精度,發現在前推3000餘年時,其誤差仍僅在角秒量級,這對本專題的研究來說已經綽綽有餘。[5]
從江教授的這篇論文可知,噴氣推進實驗室研製的DE系列星歷表具有穩定、可靠和高精度的特點,並已經在「夏商周斷代工程」中得到了成功的運用,取得了很大的成果。
2.3.3 以DE系列星歷表為基礎開發的精確節氣計算程序
台灣的一位電腦程序員(姓名不詳)以噴氣推進實驗室研製的DE系列星歷表為基礎,開發了一套可以精確計算公元前5400年到公元5400年(前後共10800年)節氣時刻的電腦程序,目前放在互聯網上供人免費使用[6]。
該程序員關於這套程序的說明可以在其創製的網站上全部搜索到[7]。2001年2月20日,該程序員(站長)在其網站上發表聲明,稱「已經可以利用 JPL 噴射系統實驗室的資料庫準確計算九大行星以及許許多多小行星的位置了,計算範圍至少可達五千年,精確度可達『千分之一秒』」。他還稱,「可以利用此程式判斷節氣,絕對比坊間的萬年曆精確」。
2002年2月22日,站長對星歷表發表評論稱:「事實上,最精準,最多人使用的,是美國太空總署(NASA)噴射推進實驗室所觀測的稱為JPL星歷(JPL Ephemeris)。我比較過,有把握把誤差都壓在秒以下。」
在使用該程序檢索節氣時,必須注意到一點,即該程序輸出的節氣時刻一律採用格林威治天文台時間,因此大陸中原地區和台灣的使用者還需要自行加上8小時,才能得出交節時刻的北京時間。此外,該網站還設有陰曆和陽曆日期轉換的程序。
湖北荊門市一位名叫張濤的電腦程序員開發了一款「專業命理軟件」《命理玄微》(可在互聯網上搜索和下載),這款軟件將複雜的八字命理演算變成了簡單的電腦計算程序,同時還提供了從公元1年至公元2100年之間節氣數據。後文將會用到該軟件的命理演算功能,考察元妃及其原型人物的生辰八字。至於節氣數據,筆者曾去信請教張濤先生其來源,張先生回信稱其節氣數據均來自上述的台灣網站[8],並特別告訴筆者:「節氣日期的農曆數據,則是通過公農曆對照轉換得來。請注意軟件中列出的公歷日期是格里曆,在18世紀前,格里曆與儒略歷(當時的公歷)是有區別的。」
2.4 以《星歷表推算原理》一書為基礎開發的節氣計算程序
《星歷表推算原理》(Fundamental Ephemeris Computations)[9]一書是一部為業餘天文愛好者撰寫的介紹計算天體位置的電腦程序原理及運算法則的著作。亞馬遜網站(www.amazon.com)上有讀者關於這部著作的評論。從這些評論可以看出,按照這部著作提供的運算法則編定的電腦程序可以「非常精確地」計算出天體位置,制定星歷表,其結果堪與權威的天文歷表相媲美。不過有評論指出,這部著作並沒有給出任何一個公式或運算法則的算法證明,有些資料的來源也不甚明確。總體來說,讀者對這部著作的評價甚高,認為其填補了天體位置計算領域的一個空缺。遺憾的是,這部著作似乎暫時沒有中譯本。
法國一個中文網站設有介紹中國文化的欄目,其中就有介紹中國農曆和二十四節氣的內容。該網站提供了在線計算節氣及交節時刻的電腦程序[10],可以推算公元前20800年到公元26800年間任何一年的二十四節氣交節的公、農曆日期及時刻。
該網站還提供公元前20800年到公元26800年間任何一年公、農曆日期的換算程序,該程序是根據《曆法計算:千禧年版》(Calendrical Calculations: The Millennium Edition)[11]一書介紹的運算法則及計算機語言開發設計的。這部著作似乎也沒有中譯本。
2.5 《四千年氣朔交食速算法》介紹的節氣時刻推算方法
曾次亮先生編纂的《四千年氣朔交食速算法》是專為研究歷史、考古、治歷者設計的檢算公元前後四千年氣朔交食的速算法[12],內容包括從陽曆、回歷的年月日檢算星期或或紀日干支,陽曆、回歷、標準夏歷間的互求法,二十四節氣平定兩方面的時刻,朔、望、兩弦平定方面的時刻,一切月食可見與否的推定及其食分與各限時刻,一切日食各地可見與否的推定及其食分與食甚時刻。
曾先生在該書《前言》中寫到,經過多次計算和對比,速算法的計算結果與其他各種計算在節氣朔望方面的最大差別是:上考三千年前節氣朔望,最大差30分鐘;推求今日節氣朔望,最大差10分鐘[13]。
曾先生又指出,我國清以前用平氣,自清初起用定氣,因此用速算法檢算標準歷時應加注意[14]。也就是說,在推算清代的節氣時,應該用《速算法》一書第四部分第五章介紹的「夏歷定節氣交節日時檢算法」。
儘管曾先生的速算法採用了大量表格作為檢算的基礎,將複雜的天文推算變成了簡單的四則運算,但其過程和步驟與電腦計算程序相比較,仍然顯得相當繁瑣和複雜,不便於進行大量節氣數據的推算。因此本文在檢算具體節氣時,主要以前兩種電腦計算程序為主,曾先生的速算法則作為驗證重要節氣數據的一個參考。
2.6 電腦計算程序推算結果與《近世中西史日對照表》的對比:交節日期
電腦計算程序推算古代節氣的交節日期與時刻是否準確,可以用古代的天象記載來即時驗證。首先以《近世中西史日對照表》所記載的節氣日期為準,驗證兩種電腦計算程序推算的結果。驗證步驟如下:
(1)列舉《近世中西史日對照表》所記載的明代、清代和民國三個時期各任意兩個年代中任意兩個節氣及交節日期(公歷和農曆兩種日期);
(2)用兩種電腦計算程序,輸入(1)中列舉的年代,檢索(1)中所列節氣的交節日期;
(3)對比三種結果。
按照以上步驟,取例和對比的結果列表如下:
《近世中西史日對照表》 台灣網站 法國網站
明武宗正德十二年丁丑(1517年) 3月21日14時9分 3月21日13時54分,
春分:陽曆3月10日,陰曆二月十八日[15] 陰曆二月十九日 陰曆二月十九日
明神宗萬曆四年丙子(1576年) 8 月23日15時5分 8月23日14時50分,
處暑:陽曆8月13日,陰曆七月十九日[16] 陰曆七月十九日 陰曆七月十九日
清世祖順治十八年辛丑(1661年) 5 月21日2時29分 5月21日2時15分,
小滿:陽曆5月21日,陰曆四月二十三日[17] 陰曆四月二十三日 陰曆四月二十三日
清德宗光緒五年己卯(1879年) 11月8日2時27分 11月8日2時12分,
立冬:陽曆11月8日,陰曆九月二十五日[18] 陰曆九月二十五日 陰曆九月二十五日
民國八年己未(1919年) 9 月9日1時27分 9月9日1時13分
白露:陽曆9月9日,陰曆閏七月十六日[19] 陰曆閏七月十六日 陰曆閏七月十六日
民國三十年辛巳(1941年) 6月22日3時33分 6月22日3時33分
夏至:陽曆6月22日,陰曆五月二十八日[20] 陰曆五月二十八日 陰曆五月二十八日
由上表可以看出,對於實行「大統歷」的明代的節氣,《近世中西史日對照表》所載的交節日期與兩種電腦計算程序的推算結果並不一樣,公歷日期相差10日或11日,陰曆日期相差1日;但兩種電腦計算程序推算的節氣交節日期完全一致,只有交節時刻相差數分鐘或數十分鐘。
對於實行「時憲歷」的清代的節氣,以及民國的節氣,《近世中西史日對照表》所載的交節日期與兩種電腦計算程序的推算結果完全一致,但兩種電腦計算程序推算的交節時刻稍有差別,最大相差15分鐘。本文讀者可以運用以上三種工具反覆驗證筆者的對比結果,亦可自行取例,進行反覆對比驗證。
由於本文考察的小說的天象數據俱以《時憲萬年書》為依據,因此憑藉以上三種工具足以進行準確的推算和辨析。
2.7 電腦計算程序推算結果與南京紫金山天文台節氣數據的對比:交節時刻
電腦計算程序推算節氣交節時刻是否準確,直接影響到本文的論證,因此有必要詳細說明。一個名為「命理玄微」的網站刊載了據稱是「南京紫金山天文台頒發的」《100年(1901年至2000年)節氣時刻表》[21]。該表所刊說明文字暫不知究竟出自「命理玄微」網站編輯之手,還是出自紫金山天文台。說明文字寫道:
「節氣時刻的計算是非常複雜的天文學課程,各國天文年歷所載的數據亦非完全一致。我國天文年歷和曆法由南京紫金山天文台編訂,由於計算方法的改進,新計算出的節氣時刻可能與以前計算的結果有所差異,日期亦可能會相差一天。在這種情況下,為保證歷書使用的連續性,通常都會保留以前的計算結果,儘管它不及新的計算準確。」
2.7.1 數據對比
本節文字將對比並討論該表所載數據與兩種電腦計算程序的推算結果。對比方法及步驟是:從表中任意選取兩年的節氣數據(本文選1901年和1978年),逐項與兩種電腦計算程序的推算結果進行對比。數據列表如下:
紫金山天文台 台灣網站 法國網站
1901年節氣數據
立春2月4日20時46分 2月4日19時39分 2月4日19時25分
驚蟄3月6日15時13分 3月6日14時10分 3月6日13時56分
清明4月5日20時38分 4月5日19時44分 4月5日19時30分
立夏5月6日14時36分 5月6日13時50分 5月6日13時36分
芒種6月6日19時17分 6月6日18時36分 6月6日18時22分
小暑7月8日5時46分 7月8日5時7分 7月8日4時53分
立秋8月8日15時25分 8月8日14時46分 8月8日14時31分
白露9月8日17時51分 9月8日17時10分 9月8日16時55分
寒露10月9日8時49分 10月9日8時6分 10月9日7時52分
立冬11月8日11時28分 11月8日10時34分 11月8日10時19分
大雪12月8日3時42分 12月8日2時52分 12月8日2時38分
1978年數據
立春2月4日12時27分 2月4日12時26分 2月4日12時26分
驚蟄3月6日6時38分 3月6日6時38分 3月6日6時37分
清明4月5日11時39分 4 月5日11時39分 4月5日11時39分
立夏5月6日5時9分 5月6日5時8分 5月6日5時8分
芒種6月6日9時23分 6月6日9時23分 6月6日9時23分
小暑7月7日19時37分 7 月7日11時36分 7月7日19時36分
立秋8月8日5時18分 8 月8日5時17分 8月8日5時17分
白露9月8日8時3分 9 月8日8時2分 9月8日8時2分
寒露10月8日23時31分 10月8日23時30分 10月8日23時31分
立冬11月8日2時34分 11月8日2時34分 11月8日2時34分
大雪12月7日19時20分 12 月7日19時20分 12月7日19時19分
2.7.2 結論:本文論證將以台灣網站的推算為最終論據
對比以上數據可知,兩種電腦計算程序推算1901年節氣的交節時刻,彼此差別不大,相差僅14或15分鐘,但兩種結果與紫金山天文台的數據則相差較大,差值達45分鐘左右。筆者推測這種差別的原因有二:
(1)天文台所載的近百年前的數據並不準確;
(2)天文台所載的近百年前的數據可能屬於不同的時區,即節氣時刻與兩種電腦計算程序的推算結果相差一個時區。如果將1901年的節氣時刻全部提前1小時,可以發現三種數據的差值基本上在20分鐘以內。
對比1978年節氣的交節時刻,可以發現三組數據幾乎完全一致。這很可能是紫金山天文台近年來改進計算方法,提高了精度的結果。
根據以上對比和討論可知,兩種電腦程序是值得信賴的,可以作為考證節氣時刻的基本工具。對於以上的數據和討論結果,本文讀者可以自行任意取例,運用兩種電腦程序進行反覆對比驗證。
由於各種計算方法依據的原理、運算法則和天體數據未必一致,推算出來的結果也有差別。不過從實際的計算結果來看,彼此差別並不大。在本文的論證過程中,筆者將以本章第2.3節介紹的精確節氣計算程序(台灣網站)的推算結果作為最終論據。