杜甫诗文中的历法问题
杜甫诗文中有一些篇章涉及历法问题,而历法是专门之学,旧时注家未必深通其术,所以解说中难免出现一些误解,或者对某些文句茫然不知其解。这不能不说是一个缺憾。本文仅就习学所得一二,对其中几个问题试加探讨。
大历年间,杜甫在夔州作《雨》诗一首。由于涉及历法问题,作品编年也产生争议:
冥冥甲子雨,已度立春时。轻箑烦相向,纤恐自疑。烟添才有色,风引更如丝。直觉巫山暮,兼催宋玉悲。
宋人赵次公谓:“按《资治通鉴》,大历二年正月辛亥朔,至十三日甲子。但不知立春在前相去几日,以无《长历》考之也。今立春矣,值春甲子而雨,则将有谚语千里之旱,不亦可忧乎?”系此诗于大历二年(767)。黄鹤注谓:“按《旧史》,大历元年正月丁巳朔,则是初八日为甲子。史又云自春旱,至六月庚子始雨,却与唐谚合。公是时在云安。其年十一月甲子日长至,方改为大历元年。若大历二年,甲子在正月十三日,而立春已在元年十二月二十六七,无容谓甲子雨‘已度立春时’也。”黄鹤注的意思是大历二年正月十三日甲子,而立春在此前的十二月二十六七日,自然不可能有自甲子日下雨直至立春的情况,因此改系此诗于大历元年(766)云安作。与赵次公相比,黄鹤当是认真核查了历日,故下此判断。
明代王嗣奭对宋人旧注提出不同意见:“先雨而度立春,是冬甲子雨,而注引春甲子,误。按谚:‘冬雨甲子,雪飞千里。’南方地暖,故不雪而雨。注引‘赤地千里’,是年春旱,又误。”意思是说此甲子日并非是春正月甲子,而是立春前的冬甲子。这样就解释了自甲子雨而至立春的问题。但是他没有说明冬甲子的日期(应在十一月),对此诗系年也没有发表意见。清仇兆鳌注引用了王嗣奭说,系年则从黄鹤注,此外未加任何解释,或许并没有在意此二人说法中可能包含的问题。
以上三人说法中,王嗣奭说最不可取。如果依王说,此甲子日是冬甲子,在立春前,而非在立春后,那么如黄鹤注已查明的,大历二年立春在大历元年十二月二十六七日(实为二十七日戊申。古人以冬至为二十四节气之首,两个冬至之间即是一个回归年),大历元年立春在永泰元年(765)十二月十六日癸卯。据此可以推算出,大历二年前的冬甲子至立春为44天,大历元年前的冬甲子至立春为39天。不论是在夔州还是在其他地方,哪有可能一冬下如此长雨?况且诗里所描写的情景也全非如此。王嗣奭的牵强解释实乖谬于常识。
黄鹤通过核查历书,改动此诗系年,思路似较前人严密,但其说法其实是站不住脚的。因为只要据其思路追究一下就会发现,即使将此诗作年提前到大历元年,立春同样在正月甲子日前,而且更为提前,达21天,而大历二年是16天。因而改动系年不但没有解决问题,反而使问题更难解释。实际上,根据历法常识可以知道,只有将此诗作年后移,甲子日才会出现在立春之前。因为一个回归年(即二十四节气一个循环)为365日,比六十甲子的倍数360日多出5日。只有将此诗作年后移三年以上,甲子日才会跑到立春之前。但这时杜甫不但已离开夔州,甚至已离开人世。黄鹤看来没有料到他的推论如此经不住推敲,这是因为他对历法知识不熟悉,或者查历书没有查到底。
事实上,黄鹤等人对诗意本身理解有误,才导致对系年的不必要改动。诗云“冥冥甲子雨,已度立春时”,是说甲子这天下雨,而这一天已在立春之后,并不是说自甲子日下雨一直下到立春。大历二年正月甲子日在立春之后,这并没有什么特别之处(大历元年、三年、四年也是如此),而恰好这一天下雨,使诗人想到了俗谚所说“春雨甲子,赤地千里”(见《朝野佥载》卷一,赵次公注已引)。在以上注家中,只有赵次公没有误会诗意,其他人都被黄鹤引导到错误方向上去了,这至少说明注家都没有肯再去核实黄鹤提出的历法问题,而其实这是一个很简单的算术问题。
为了显示自己的博学多才,杜甫在一些文章写作中直接安插进了历法内容。天宝年间,杜甫在长安献三大礼赋,其中《朝献太清宫赋》写到:
帝之苗裔,坤之纪纲。土配君服,宫尊臣商。起数得统,特立中央。且大乐在悬,黄钟冠八音之首;太昊斯启,青陆献千春之祥。
清朱鹤龄注此文,引《史记·历书》及《索隐》黄钟为律之首之说,又引《汉书·律历志》“黄钟为天统”之说。仇兆鳌注又引《律历志》“数从统首日起算”及“以闰法乘日法得统法”之说。
在《有事于南郊赋》中杜甫又写到:
盖九五之后,人人自以遭唐虞;四十年来,家家自以为稷卨。王纲近古而不轨,天听贞观以高揭。蠢尔差僭,粲然优劣。宜其课密于空积忽微,刊定于兴废继绝。而后睹数统从首,八音六律而惟新;日起算外,一字千金而不灭。
朱鹤龄注此文“数统从首”引《律历志》“数从统首日起算”之说。此外引《唐书》开元中僧一行造《大衍历》、历成张说等上之事,认为“课密”以下盖指此而言。
以上两段文字安插在三大礼赋中,相互呼应,从中可以看出作者有某种整体布局上的考虑。这两段话的内容则主要是依据《汉书·律历志》所载刘歆《三统历》之说,用音律学和象数《易》学来解释历法。《三统历》“日法八十一”,即分一日为八十一分,“元始黄钟,初九自乘,一龠之数”(《汉书·律历志下》),认为这一数字是以黄钟律管九寸自乘而来。又“统法一千五百三十九,以闰法乘日法,得统法”,即以闰法19(指十九年七置闰)乘日法81,得1539,为一统的年数,也是统术运算中的日分数,在许多运算中被用作分母。这即是所谓的“起数得统”。杜甫引用这一说法,是用来说明唐应土德,其位中央,其音宫,而君亦为宫,律中黄钟,而黄钟则是历法中统法数据的来源。刘歆为历法数据寻找音律的根据,以此来证明天道运行有某种数学规则的神秘性。杜甫则以此来论证唐德所在(实际上,后代历法已不再勉强与黄钟律数配合),并顺带显示了自己在历法和数学方面的修养。
至于“数统从首”、“日起算外”两句,则是讲《三统历》统术中推(天)正月朔的方法。“数从统首日起算外,则朔日也”(《律历志》),即以60(干支一周数)除积日,所馀数(大馀)首日干支与统首日干支同,从此日起算,可求得朔日干支。王先谦《汉书补注》所引钱大昕、董祐诚等人之说,有详明解说,是朱鹤龄、仇兆鳌二人所未及见的。朱、仇二人只能勉强给出《律历志》中“统首”的出处,但又拉杂引了其他一些不相干的说法,说明他们对这些历法术语并不真正理解。
从这两句来看,杜甫对统术的计算方法似乎颇有心得,不然也不会接连使用“统首日”、“算外”这两个相当冷僻的专门术语。果然,好像是有意为了证实这一点,上元二年(761)杜甫在蜀州为县令王潜作《唐兴县客馆记》,文末忽然别出心裁:
自辛丑岁秋分大馀二,小馀二千一百八十八,杜氏之老记已。
结尾这几句话一下难倒了诸位注家。朱注在此下仍引《汉书·律历志》推正月朔法,仇注引黄百家之说:“杜记盖谓秋分后二日之二十馀刻耳。”显然是逞臆之言。杨伦则直言:“末大馀小馀,即观朱释亦未明。”在笔者阅读范围内,尚未见到其他精于历算的学者有馀暇顾及杜甫此文。
此处所言秋分大馀、小馀,是求节气的干支日及时刻。在历法中,要首先推求天正冬至(历代历法冬至均固定在十一月)大馀、小馀,然后依次求其他节气的大馀、小馀。在《三统历》中,统法(日分数)为1539,两个冬至日间的年长为365日,弃去可为60除尽的360整日,馀数为日。以入统以来岁数乘之,所得称积策馀日,大馀即其整数部分(日数)满60除去后之馀数,小馀即不足一日的日分数。将冬至大馀加45(满60仍除去),小馀加1010(满1539除去,同时大馀加1),即次节立春大馀、小馀。依次可推出八节的大馀、小馀。
但《三统历》的统法为1539,故小馀应<1539。杜甫此文所给出的秋分小馀为2188,显然与此不符。朱鹤龄校“二千”一作“三千”,仇注谓“二千”或作“一千”,都不可据。事实上,此数据并非依据《三统历》,而是另有来历。朱鹤龄曾认为《有事于南郊赋》借汉言唐,所指为一行造《大衍历》事。此文则提供了一个确实的证据,证实了杜甫是依据《大衍历》来进行此次演算。以下就依据新旧《唐书·历志》所载《开元大衍历经》“大衍步中朔第一”部分,对这两个数据加以验算。
《大衍历》称上元以来年数为积算,给出上元至开元十二年(724)积算为96961740算(年)。据此,上元至肃宗上元二年(761)的积算为96961777年。《大衍历》所定通法(日分数,在《三统历》中称统法)为3040分,一回归年所含日分共1110343分,称策实。其算法的文字表述是:
推天正中气,以策实乘入元距所求积算,命曰中积分。盈大衍通法得一,为积日。不盈者为小馀。爻数去积日,不尽日为大馀。数从甲子起算外,即所求年天正中气冬至日及小馀也。
以策实乘积算为中积分,即上元到所求年天正冬至的总日分。在此例中:
96961777×1110343=107660830359511
以中积分除以通法3040,为积日:
107660830359511÷3040=35414746828.78651(日)
积日满60(干支一周,《大衍历》称为爻数)即除去,在此例中,积日/60的整数部分为590245780,所以冬至大、小馀为:
35414746828.78651(积日)-590245780×60
=35414746828.78651-35414746800
=28.78651
即大馀28,从甲子起算外,冬至为壬辰日。小馀为0.78651×3040=2390.9904(日分)。
下面求节气大、小馀。其算法的文字表述是:
求次气,因天正中气大小馀,以三元之策及馀、秒加之。其秒盈象统,从小馀。小馀满大衍通法,从大馀。大馀满爻数,去之。命如前,即次气恒日及馀、秒。
三元之策公式是:
三元之策,一十五;馀,六百六十四;秒,七。
即每一个节气所含日数为日。自冬至至秋分共18个节气,以此年冬至小馀加18个节气整日之外的馀数:
2390.99+664×18=14348.24
满3040为一日,除去(满大衍通法,从大馀):
14348-3040×4=2188
即此年秋分小馀。冬至大馀加18个节气整日数,再加小馀满通法4日:
28+15×18+4=302
满60(爻数)去之:
302-60×5=2
得大馀2。据此推算出的此年秋分在八月十三日丙寅。
以上据《大衍历》演算结果,与杜甫给出的上元二年辛丑岁秋分大馀、小馀完全相合。当然,步中朔、求干支在历法中都属于相对简单、初步的运算。其他步发敛术、步日躔术、步交会术、步五星术等内容要复杂得多,更不用说一行《大衍历》在历法和中国数学史上有许多创新,是一般人难以掌握的。因此,不能据此文得出杜甫精通历法的结论,但他曾研习此术并掌握一些基本的运算方法,应该是可信的。
值得玩味的是,杜甫为什么在此文中运用这种在一般文章中极少见的记大馀、小馀方式?笔者查《全唐文》,只有张《龙筋凤髓判》中有“二分二至,无亏余遂之踪;大馀小馀,允叶容成之度”之语,也不过是借以泛言时刻。其他在提及节气或时间时给出准确的大馀、小馀数据的,一例也没有。原因大概是,能够真正掌握这种算法的人很少。一般历书是查不到大馀、小馀数据的。杜甫又一次让我们见识了他的出人意料之处。
要解释这个问题,不能不联想到写作此文的时间背景。《新唐书·历志三》记载:
至肃宗时,山人韩颖上言《大衍历》或误,帝疑之。以颖为太子宫门郎,直司天台。又损益其术,每节增二日,更名《至德历》,起乾元元年用之,讫上元三年。
原来,杜甫写作此文恰在行用《至德历》期间。《至德历》的具体内容不详,除去这条简略记述外别无记载。据《唐会要》卷四二,颁韩颖所造新历在乾元元年六月十七日。此月,杜甫恰好自朝内外放华州司功参军。唐代所行不同历法所设的上元甲子积年及通法是不同的,这直接关系到各节气小馀数字的计算。代宗时所行五纪历,即恢复唐初麟德历所用通法1340(见《新唐书·历志五》),与《大衍历》不同。这样,在推算冬至或其他节气时,小馀数也必然与《大衍历》不同。《至德历》所设通法与《大衍历》是否相同,不得而知。按改历的一般情况来看,应该有所变化。此外还要考虑到,尽管当时朝廷所颁《至德历》也应在蜀中实行,但其算法却未必为众人所知,而杜甫却早在开元、天宝年间即研习过《大衍历》。所以基本可以肯定,此文所作演算当据《大衍历》无疑。
那么,在朝廷行用《至德历》背景下,使用《大衍历》作此演算有何意义呢?我们在这里不必作太多的政治联想,毕竟这只是一篇普通的应景文字,但在文中直接给出大馀、小馀数确实不同寻常。大馀其实只是干支日的另一种表示,稍通历法的人就可以据干支换算出大馀数,或进行相反计算,而且不管怎样改历,干支(大馀)都不会有变。但给出大馀数的结果是必然同时给出小馀数,而小馀数则必须是经过演算才能得出来的,是采用某一种历法的确切表示。而且不通历法的人,或者没有经过一番演算,根本就看不出这种表示的意义,不知道作者为何给出这两个数据。这正是此文记述大馀、小馀数的深意所在。笔者认为,这是杜甫表达他对开元盛世怀念的一种方式,与这一时期他的许多诗作的主题相通。而这种表达是专门写给少数知音(唐兴县宰王潜或是其一?)以及内行人士看的。可惜的是,由于历算之学太过专门,一般文人知之甚少,历代注家竟然都没有读懂。
《傅璇琮先生八十寿庆论文集》,中华书局2012年
- 此诗《续古逸丛书》影印《宋本杜工部集》卷十六卷目有,正文缺。《钱注杜诗》在卷十五,上海古籍出版社1979年排印本,第557页。
- 林继中辑校《杜诗赵次公先後解辑校》戊帙卷一,上海古籍出版社1994年,第874页。
- 黄希、黄鹤《补注杜诗》卷三二,影印《四库全书》本,第1069册,第613页。
- 王嗣奭《杜臆》,上海古籍出版社排印本1983年,第230页。
- 朱鹤龄《杜工部诗集辑注》文集卷一,河北大学出版社2009年,第864页。
- 仇兆鳌《杜诗详注》卷二四,中华书局1979年,第2118页。
- 《杜工部诗集辑注》,第879页。
- 唐兴县即蜀州唐安县。《元和郡县图志》卷三一蜀州:“唐兴县,望。西北至州四十里。本汉江原县地,后魏于此立犍为郡。……武德元年于废州置唐隆县,属益州,垂拱二年割入蜀州。先天元年以犯讳改为唐安,至德二年改为唐兴县。”新旧《唐书·地理志》蜀州唐安县,皆未载其至德改名。旧注皆引东川遂州唐兴县,天宝元年改为蓬溪,谓此文及《逢唐兴刘主簿弟》等诗沿旧称,误。
- 《杜诗详注》卷二五,第2207页。
- 杨伦《杜诗镜铨》文集卷一,上海古籍出版社1981年,第1076页。
- 《旧唐书·历志三》作“九千六百六十六万一千七百四十算”,误。此据《新唐书》。
- 《旧唐书》卷三四《历志三》,中华书局1975年,第1232页。
- 《旧唐书》卷三四,第1232页。
- 《旧唐书》卷三四,第1232页。
- 参见张培瑜等《中国古代历法》第八章大衍历,中国科学技术出版社2008年,第487页。
- 《全唐文》卷一七四《漏生夜睡不觉失明,天晓已后,仍少六刻不尽,钟鼓既晚,官司失朝》,中华书局影印1982年,第1773页。
- 专门讨论历法问题的不在此列,如傅仁均《对王孝通驳历法议》(《全唐文》卷一三三)。元稹《景申秋八首》(《全唐诗》卷四一〇):“风头难着枕,病眼厌看书。无酒销长夜,回灯照小馀。三元推废王,九曜入乘除。廊庙应多算,参差斡太虚。”是诗歌中仅见用此语者。
- 《新唐书》卷二七《历志三下》,中华书局1975年,第635页。
- 朝廷所颁只能是日历形式的历书,算法必须另有专书。《新唐书·艺文志三》历算类著录《开元大衍历》一卷、《宝应五纪历》四十卷、《建中正元历》二十八卷等皆是此类专书,但这类书必然流传不广。《至德历》的算法书是否写成,也不得而知。
- 《旧唐书·代宗纪》载:宝应元年九月“甲午,秘书监韩颖、中书舍人刘烜配流岭表,寻赐死,坐狎昵李辅国也。”事又见《新唐书·宦者传》。从时间上看,杜甫未必赶上与韩颖同朝处事。如果杜甫曾与闻其人,必是十分厌恶的。