diff --git a/README.md b/README.md index 3bf5417..26d9259 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,6 @@ Web site (Chinese): http://www.abolybook.org 编译用到了: - xelatex,调用的包和字体,见 style.tex -- Python,2.7和3.5皆可,调用了 [pinyin](https://pypi.python.org/pypi/pinyin/) +- Python,2.7和3皆可,调用了 [pinyin](https://pypi.python.org/pypi/pinyin/) 网站:http://www.abolybook.org diff --git a/autobody.py b/autobody.py index a89b68b..9151e54 100644 --- a/autobody.py +++ b/autobody.py @@ -1,44 +1,44 @@ -# coding: utf-8 - -from __future__ import unicode_literals -import io -import sys - - -# \lychar* --> \lycharlink -def auto_lychars(bodyfile, cmapfile, encoding): - with io.open(bodyfile, encoding=encoding) as fin: - body = fin.read() - with io.open(cmapfile, encoding=encoding) as fin: - cmaps = fin.read().splitlines() - for cm in cmaps: - chunks = cm.split(' ') - target = chunks[-1] - for name in chunks[:-1]: - old = r'\lychar{%s}' % name - repl = r'\lycharlink{%s}{%s}' % (target, name) - body = body.replace(old, repl) - - specials = { - r'\lychar{伯夷}': r'\lycharlink{boyishuqi}{伯夷}', - r'\lychar{叔齐}': r'\lycharlink{boyishuqi}{叔齐}', - } - for old, repl in specials.items(): - body = body.replace(old, repl) - return body - - -def main(): - CHARACTERS_MAP = 'characters_map.txt' - ENCODING = 'utf-8' - BODY = 'body.tex' - BODY_OUT = 'autobody.tex' - - body = auto_lychars(BODY, CHARACTERS_MAP, ENCODING) - - with io.open(BODY_OUT, 'w', encoding=ENCODING) as fout: - fout.write(body) - - -if __name__ == '__main__': - sys.exit(main()) +# coding: utf-8 + +from __future__ import unicode_literals +import io +import sys + + +# \lychar* --> \lycharlink +def auto_lychars(bodyfile, cmapfile, encoding): + with io.open(bodyfile, encoding=encoding) as fin: + body = fin.read() + with io.open(cmapfile, encoding=encoding) as fin: + cmaps = fin.read().splitlines() + for cm in cmaps: + chunks = cm.split(' ') + target = chunks[-1] + for name in chunks[:-1]: + old = r'\lychar{%s}' % name + repl = r'\lycharlink{%s}{%s}' % (target, name) + body = body.replace(old, repl) + + specials = { + r'\lychar{伯夷}': r'\lycharlink{boyishuqi}{伯夷}', + r'\lychar{叔齐}': r'\lycharlink{boyishuqi}{叔齐}', + } + for old, repl in specials.items(): + body = body.replace(old, repl) + return body + + +def main(): + CHARACTERS_MAP = 'characters_map.txt' + ENCODING = 'utf-8' + BODY = 'body.tex' + BODY_OUT = 'autobody.tex' + + body = auto_lychars(BODY, CHARACTERS_MAP, ENCODING) + + with io.open(BODY_OUT, 'w', encoding=ENCODING) as fout: + fout.write(body) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/autocharacters.py b/autocharacters.py index 8ac4c32..91cfa85 100644 --- a/autocharacters.py +++ b/autocharacters.py @@ -1,122 +1,122 @@ -# coding: utf-8 - -from __future__ import unicode_literals -import io -import re -import sys - - -def extract_blob_title(content): - r'''Extract text inside \lyblob{}.''' - left = content.index('{') + 1 - right = left - count = 1 - while count != 0: - if content[right] == '{': - count += 1 - elif content[right] == '}': - count -= 1 - right += 1 - return content[left:right] - - -def get_charname_blobs(content): - '''Return a dict of character names to lists of blob labels.''' - CHAPTER_PREFIX = r'\chapter' - BLOB_PREFIX = r'\lyblob' - BLOB_TEMPLATE = '%d.%d' - CHARNAME_PAT = re.compile(r'\\lycharlink\{(.+?)\}\{.+?\}') - chapter_count = 0 - blob_count = 0 - - lines = content.splitlines(True) - c2bs = {} - for i, line in enumerate(lines): - if line.lstrip().startswith(CHAPTER_PREFIX): - chapter_count += 1 - blob_count = 0 - elif line.lstrip().startswith(BLOB_PREFIX): - blob_count += 1 - left = content.index(line) - assert content[left+len(line):].find(line) == -1 # no duplicate \lyblob line - title = extract_blob_title(content[left:]) - mats = CHARNAME_PAT.finditer(title) - if mats: - blob = BLOB_TEMPLATE % (chapter_count, blob_count) - # if blob == BLOB_TEMPLATE % (11, 3): # skip 四科十哲 - # continue - for m in mats: - charname = m.group(1) - if charname not in c2bs: - c2bs[charname] = [blob] - else: - if blob not in c2bs[charname]: - c2bs[charname].append(blob) - return c2bs - - -def append_annotation(seg, annotation): - insert_pos = len(seg) - while seg[insert_pos-1].isspace(): - insert_pos -= 1 - return seg[:insert_pos] + annotation + seg[insert_pos:] - - -def append_annotations(content, charname_blobs): - removecomment_pat = re.compile(r'(? 1: - segment = sorted_counts[start:stop] - segment.sort(key=lambda x: pinyin.get(x[0])) - sorted_counts[start:stop] = segment - start, stop = stop, stop+1 - - # Dump topics. - with io.open(TOPICS, encoding=ENCODING) as fin: - template = fin.read() - with io.open(AUTOTOPICS, 'w', encoding=ENCODING) as fout: - insersion = template.index(INSERSION_POINT) - prolog, epilog = template[:insersion], template[insersion+len(INSERSION_POINT):] - fout.write(prolog) - for i, x in enumerate(sorted_counts): - k, v = x - if v <= SHORT_TOPIC_THRESHOLD: - break - topic = TOPIC_TEMPLATE % ( - k, v, - ' '.join( - BLOB_REF % v for v in topics[k])) - if k in topic_labels: - topic = '\\lylabel{%s}\n%s' % (topic_labels[k], topic) - fout.write(topic) - # Short topics. - sclen = len(sorted_counts) - while i < sclen: - count = sorted_counts[i][1] - sts = [] - while i < sclen and sorted_counts[i][1] == count: - k = sorted_counts[i][0] - sts.append(SHORT_TOPIC_T % (k, ' '.join(BLOB_REF % v for v in topics[k]))) - i += 1 - line = SHORT_TOPICS_TEMPLATE % (count, SHORT_TOPICS_SEP.join(sts)) - fout.write(line) - fout.write(epilog) - -# # Dump summary. -# summary = '\n'.join('%s\t%d' % (v[0], v[1]) for v in sorted_counts) -# with io.open(SUMMARY, 'w', encoding=ENCODING) as f: -# f.write(summary) - - -def main(): - hack_pinyin() - topics = extract_topics() - dump_topics(topics) - - -if __name__ == '__main__': - sys.exit(main()) +# coding: utf-8 + +from __future__ import unicode_literals, print_function +import io +import os +import pinyin # for sorting keywords with same count of occurrences +import re +import sys + + +BODY = 'body.tex' +TOPICS = 'topics.tex' +AUTOTOPICS = 'autotopics.tex' +#SUMMARY = 'topics.txt' +ENCODING = 'utf-8' +INSERSION_POINT = 'INSERSION_POINT' +TOPIC_TEMPLATE = '\\lytopic{%s}(%d章):%s\n\n' +SHORT_TOPICS_TEMPLATE = '%d章:%s\n\n' +SHORT_TOPIC_T = '\\lytopic{%s} %s' +SHORT_TOPIC_THRESHOLD = 3 +SHORT_TOPICS_SEP = r'\quad ' + + +# Retain tones. +def hack_pinyin(): + dat = os.path.join(os.path.dirname(pinyin.__file__), "Mandarin.dat") + pinyin.pinyin.pinyin_dict = {} + with io.open(dat) as f: + for line in f: + k, v = line.strip().split('\t') + pinyin.pinyin.pinyin_dict[k] = v.lower().split(" ")[0] # don't strip tones + + +def extract_topics(): + CHAPTER_PREFIX = r'\chapter' + BLOB_PREFIX = r'\lyblob' + BLOB_TEMPLATE = '%d.%d' + pat = re.compile(r'\\lytopics\{(.*?)\}\s*(?:%.*)?') + kwd = r'\lytopics' # double-check + sep = ',' + + chapter_count = 0 + blob_count = 1 # incremented after seeing BLOB_PREFIX + match_count = 0 + topics = {} + with io.open(BODY, encoding=ENCODING) as fin: + content = fin.read() + for lineno, line in enumerate(content.splitlines()): + if line.startswith(CHAPTER_PREFIX): + chapter_count += 1 + blob_count = 1 + elif line.startswith(BLOB_PREFIX): + blob_count += 1 + + mat = pat.match(line.strip()) + if not mat: + if kwd in line: + print('Malformatted line:', line, file=sys.stderr) + else: + match_count += 1 + blob_label = BLOB_TEMPLATE % (chapter_count, blob_count) + if not mat.group(1): + print('Line %d is an empty keyword list' % (lineno+1), line, file=sys.stderr) + continue + for c in mat.group(1).split(sep): + if c not in topics: + topics[c] = [blob_label] + else: + topics[c].append(blob_label) + totalblobs = content.count(BLOB_PREFIX) + if match_count != totalblobs: + print('Found %d keyword lists for %d blobs' % (match_count, totalblobs)) + return topics + + +topic_labels = { + # For cover links. + '君子': 'topicjunzi', + '仁': 'topicren2', + '礼': 'topicli3', + '学': 'topicxue2', + '政': 'topiczheng4', + + '孝': 'topicxiao4', + '义': 'topicyi4', + '信': 'topicxin4', + '友': 'topicyou3', + '志': 'topiczhi4', + + '温': 'topicwen1', + '敬': 'topicjing4', + '谦': 'topicqian1', + '恕': 'topicshu4', + + '文': 'topicwen2', + '艺': 'topicyi4a', + '智': 'topiczhi4a', + '恒': 'topicheng2', + + '德': 'topicde2', + '忠': 'topiczhong1', + '用人': 'topicyongren', + '惠': 'topichui4', + '廉': 'topiclian2', + + # Others. + '未见': 'topicweijian', + '快乐': 'topickuaile', + '人我': 'topicrenwo', + '孔子自评': 'topickongziziping', + '人评孔子': 'topicrenpingkongzi', +} + + +def dump_topics(topics): + BLOB_REF = r'\lyref{%s}' + sorted_counts = [(k, len(v)) for k, v in topics.items()] + sorted_counts.sort(key=lambda x: x[1], reverse=True) + # Sort equal-count items by pinyin. + start, stop, end = 0, 1, len(sorted_counts) + while stop < end: + while stop < end and sorted_counts[start][1] == sorted_counts[stop][1]: + stop += 1 + if stop - start > 1: + segment = sorted_counts[start:stop] + segment.sort(key=lambda x: pinyin.get(x[0])) + sorted_counts[start:stop] = segment + start, stop = stop, stop+1 + + # Dump topics. + with io.open(TOPICS, encoding=ENCODING) as fin: + template = fin.read() + with io.open(AUTOTOPICS, 'w', encoding=ENCODING) as fout: + insersion = template.index(INSERSION_POINT) + prolog, epilog = template[:insersion], template[insersion+len(INSERSION_POINT):] + fout.write(prolog) + for i, x in enumerate(sorted_counts): + k, v = x + if v <= SHORT_TOPIC_THRESHOLD: + break + topic = TOPIC_TEMPLATE % ( + k, v, + ' '.join( + BLOB_REF % v for v in topics[k])) + if k in topic_labels: + topic = '\\lylabel{%s}\n%s' % (topic_labels[k], topic) + fout.write(topic) + # Short topics. + sclen = len(sorted_counts) + while i < sclen: + count = sorted_counts[i][1] + sts = [] + while i < sclen and sorted_counts[i][1] == count: + k = sorted_counts[i][0] + sts.append(SHORT_TOPIC_T % (k, ' '.join(BLOB_REF % v for v in topics[k]))) + i += 1 + line = SHORT_TOPICS_TEMPLATE % (count, SHORT_TOPICS_SEP.join(sts)) + fout.write(line) + fout.write(epilog) + +# # Dump summary. +# summary = '\n'.join('%s\t%d' % (v[0], v[1]) for v in sorted_counts) +# with io.open(SUMMARY, 'w', encoding=ENCODING) as f: +# f.write(summary) + + +def main(): + hack_pinyin() + topics = extract_topics() + dump_topics(topics) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/body.tex b/body.tex index cbe2ef6..8f2ceba 100644 --- a/body.tex +++ b/body.tex @@ -206,7 +206,7 @@ \chapter{学而} 古注有把“易色”解释成端肃态度,或者把“贤贤易色”解释成以好色之心重贤,“易”就是替换,也讲得通,但从内容顺序看,说的更像是择偶标准。 -\item \lyterm{事}:动词,侍奉,服侍。\lyl{成语“事齐事楚”。} +\item \lylabel{shi4f}\lyterm{事}:动词,侍奉,服侍。\lyl{成语“事齐事楚”。} \item \lylabel{zhi4}\lyterm{致}:给予,献出,投入,dedicate,devote。\lyl{\lyref{19.1} \lyq{士见危致命。}常用词“致力”与“注意”的构词方式相同。思考:它们后接宾语时,在现代用法中有什么差异?} \item \lyterm{虽}:表示让步或假设的副词,尽管,即使。\lyl{《史记·孔子世家》:\lyq{虽不能至,然心乡往之。}(乡:通“向”。)} @@ -220,7 +220,7 @@ \chapter{学而} \lyblob{子曰:“君子不重则不威,学则不固。主忠信,无友不如己者。过则勿惮改。”} { \item \lyterm{重}:庄重,稳重。\lyterm{威}:有威严。 -\item \lylabel{gu4}\lyterm{固}:浅陋狭隘。\lyl{\lyref{7.36} \lyq{奢则不孙,俭则固。}} +\item \lylabel{gu4}\lyterm{\lylink{gu4a}{固}}:浅陋狭隘,冥顽不化。\lyl{\lyref{7.36} \lyq{奢则不孙,俭则固。}} \item \lylabel{zhu3}\lyterm{主}:注重,崇尚。\lyl{\lyref{3.16} \lyq{射不主皮。}} \item \lyterm{无友不如己者}:不要和(各方面都)不如自己的人交朋友。\lyterm{友}是动词。 @@ -404,9 +404,9 @@ \chapter{为政} \lylabel{fazhi} 法家主张的\lykw{法治},以密法严刑为基础,不强求执政者德才无瑕,却足以建立坚实的底线。《管子·任法》:\lyq{所谓仁义\lylink{liyue}{礼乐}者,皆出于法,此先圣之所以一民也。……君臣上下贵贱皆发\lylink{yan1a}{焉},故曰“法”。……君臣上下贵贱皆从法,此谓为大治。}(\lylabel{yimin}一民:统治百姓。发:产生。)《商君书·开塞》:\lyq{古之民朴\lylink{yi3a}{以}厚,今之民巧以伪。故效于古者,先德而治;效于今者,前刑而法。}《韩非子·难势》:\lyq{且夫\lycharlink{yao}{尧}、\lycharlink{shun}{舜}、\lycharlink{xiachao}{桀}、\lycharlink{zhou}{纣},千世而一出,……吾所以为言势者,中也。……抱法处势则治,背法去势则乱。今废势背法而待尧舜,尧舜至乃治,是千世乱而一治也;抱法处势而待桀纣,桀纣至乃乱,是千世治而一乱也。} -传统政治实践中,德治与法治相为补益。《汉书·元帝本纪》载,汉元帝为太子时,\lylabel{hanxuandi}曾向宣帝进言:\lyq{“陛下持刑太深,宜用儒生。”宣帝作色曰:“汉家自有法度,本以\lylink{wangdao}{霸王道}杂之,奈何纯任德教,用周政乎!且俗儒不达时宜,好是古非今,使人眩于\lylink{zhengming}{名实},不知所守,何足委任?”}652年编定的《唐律疏议》首卷倡言:\lyq{德礼为政教之本,刑罚为政教之用,犹昏晓阳秋,相须而成者也。}(礼法之功效,在于自律他律。阳秋:即春秋,晋朝时为避文帝皇后讳,改春字为阳。) +传统政治实践中,德治与法治相为补益。《汉书·元帝本纪》载,汉元帝为太子时,\lylabel{hanxuandi}曾向宣帝进言:\lyq{“陛下持刑太深,宜用儒生。”宣帝作色曰:“汉家自有法度,本以\lylink{wangdao}{霸王道}杂之,奈何纯任德教、用周政乎!且俗儒不达时宜,好是古非今,使人眩于\lylink{zhengming}{名实},不知所守,何足委任?”}652年编定的《唐律疏议》首卷倡言:\lyq{德礼为政教之本,刑罚为政教之用,犹昏晓阳秋,相须而成者也。}(礼法之功效,在于自律他律。阳秋:即春秋,晋朝时为避文帝皇后讳,改春字为阳。) -教化中则多偏重德礼修养,轻视普法宣传。《史记·礼书》开头,\lyq{太史公曰:\lylink{yangyang}{洋洋}美德乎!宰制万物,役使群众,岂人力也哉?}(人力:指强力可为。)《大戴礼记·礼察》:\lyq{凡人之知,能见已然,不能见将然。礼者,禁于将然之前,而法者,禁于已然之后。是故法之用易见,而礼之所为生难知也。}(礼法之用,为事前事后。“法禁于已然之后”的观念,可能也造成中国百姓的法律意识淡薄,违法就自认倒霉。)\lyref{2.3} 比较了法治与德治的效果。 +教化中则多偏重德礼修养,轻视普法宣传。《史记·礼书》开头,\lyq{太史公曰:\lylink{yangyang}{洋洋}美德乎!宰制万物,役使群众,岂人力也哉?}(人力:指强力可为。)《大戴礼记·礼察》:\lyq{凡人之知,能见已然,不能见将然。礼者,禁于将然之前,而法者,禁于已然之后。是故法之用易见,而礼之所为生难知也。}(礼法之用,为事前事后。“法禁于已然之后”的观念,可能也造成中国百姓日常法律意识淡薄,违法就自认倒霉。)\lyref{2.3} 比较了法治与德治的效果。 } \item \lyterm{北辰}:即北极星,是北半球肉眼可见的亮星中最接近地球自转轴的,古人认为它恒定不动,视为众星之主,用以比喻帝王或众望所归者,又称为帝星、紫微星。\lyc{根据现代天文学,由于太阳和其它天体的引力,地球的自转轴也在缓慢旋转,约25800年旋转一周,所以北极星并不固定。孔子当时的北极星是小熊座β。约500年,祖暅(\lypy{gèng},数学家祖冲之之子)观测到北极星偏离真北极1度多,当时的北极星是鹿豹座32H,也是迄今最暗的北极星。现代的北极星是小熊座α。} @@ -647,7 +647,7 @@ \chapter{为政} 孔子对曰:“举直错诸枉,则民服;举枉错诸直,则民不服。”} { -\item \lyterm{举直错诸枉}:把正直君子安排在比邪曲小人高的职位上。\lylabel{ju3}\lyterm{举}:选用,推荐。\lylabel{cuo4}\lyterm{错}:通“措”,放置,安放。\lyterm{枉}:弯曲,不直。\lyc{《韩诗外传》第4卷第4章强调了小人在位的危害:\lyq{《周书》曰:“无为虎傅翼,将飞入\lylink{yi4c}{邑},择人而食。”夫置不肖之人于位,是为虎傅翼也,不亦\lylink{dai4}{殆}乎?}(\lylabel{fu4a}傅:附,加。)} +\item \lyterm{举直错诸枉}:把正直君子安排在比邪曲小人高的职位上。\lylabel{ju3}\lyterm{举}:选用,推荐。\lylabel{cuo4}\lyterm{错}:通“措”,放置,安放。\lyterm{枉}:弯曲,不直。\lyl{\lyref{18.2} \lyq{枉道而事人,何必去父母之邦?}}\lyc{《韩诗外传》第4卷第4章强调了小人在位的危害:\lyq{《周书》曰:“无为虎傅翼,将飞入\lylink{yi4c}{邑},择人而食。”夫置不肖之人于位,是为虎傅翼也,不亦\lylink{dai4}{殆}乎?}(\lylabel{fu4a}傅:附,加。)} } {} @@ -755,7 +755,7 @@ \chapter{八佾} \lylabel{jianyongbayi}\lyc{《左传·昭公二十五年》(前517年):\lyq{将\lylink{di4}{禘}于襄公,万者二人,其众万于季氏。}(\lylabel{xianggong}襄公:鲁襄公(前575年--前542年),名午,鲁国第22任国君,\lycharlink{zhaogong}{鲁昭公}之父。万:一种大型乐舞。其众:指鲁公室八佾中的大多数舞师,他们去和季氏自有的四佾组成八佾了。\lylabel{jipingzi}季氏:指当时的权臣、\lycharlink{jishi}{季孙氏}第4任宗主季平子(季孙意如),他是\lycharlink{jihuanzi}{季桓子}之父。) \lylabel{qingdafushi} -周朝\lylink{zhuhou}{诸侯国}在国君以下的贵族(与\lylink{shu4b}{庶民}相对),有\lykw{卿}、\lykw{大(\lypy{dà})夫}、\lykw{士}3等,每等又分为上、中(或称亚、次)、下3级。诸侯有三卿,上卿执政,又称\lykw{正卿}。周王有六卿,卿之上还有\lykw{公}(三公:师、保、傅),执政大臣称为\lykw{卿士}。士与平民的距离最近,下士的俸禄刚够糊口,不必亲身耕作了。大夫比卿的群体大,比士的权力高,是官吏阶层的中坚。 +周朝\lylink{zhuhou}{诸侯国}在国君以下的贵族(与\lylink{shu4b}{庶民}相对),有\lykw{卿}、\lykw{大(\lypy{dà})夫}、\lykw{士}3等,每等又分上、中(或称亚、次)、下3级。诸侯有三卿,上卿执政,又称\lykw{正卿}。周王有六卿,卿之上还有\lykw{公}(三公:师、保、傅),执政大臣称为\lykw{卿士}。士与平民的距离最近,下士的俸禄刚够糊口,不必亲身耕作了。大夫比卿的群体大,比士的权力高,是官吏阶层的中坚。 \lylabel{shidafu}后世表示身份的称谓中,\lykw{卿大夫}、\lykw{公卿大夫}属于高级官员;\lykw{士大夫}泛指官吏阶层,特别是有公职名望的知识分子;\lykw{士人}是尚无官位但有一定才誉的读书人(即\lylink{shi4c}{士}),士大夫的后备军。 } @@ -836,7 +836,7 @@ \chapter{八佾} \begin{lyblobitemize} \item \lylabel{yidihuaxia}\lyterm{夷狄}:泛指中原地区以外的异族人。相对地,\lyterm{诸夏}就是指中原地区的各诸侯国。 -历史上,居住在中原地区、崇尚农耕文化的汉族具有浓厚的中心意识和优越感,自称\lykw{华夏},将文化较落后、从事游牧的外族蔑称为\lykw{夷}或\lykw{裔},又按方位分为东夷、南蛮、西戎、北狄。\lylink{zhouchao}{春秋}时起,人口的流动与杂居增强,许多周边民族自觉或不自觉地被中原文明同化,成为华夏的有机部分。\lyl{《晋书·何曾传》载,阮籍居丧放诞,何曾建议魏文帝\lyq{宜摈〔籍〕四裔,无令污染华夏。}(摈(\lypy{bìn}):弃,指放逐。)}\lyc{《左传·定公十年》孔颖达正义:\lyq{夏,大也。\lylink{zhongguo}{中国}有礼仪之大,故称夏;有服章之美,谓之华。华、夏一也。}唐太宗认为:\lyq{治安中国,而四夷自服},这也是中国古代的传统外交理念。} +历史上,居住在中原地区、崇尚农耕文化的汉族具有浓厚的中心意识和优越感,自称\lykw{华夏},将文化较落后、从事游牧的外族蔑称为\lykw{夷}或\lykw{裔},又按方位分为东夷、南蛮、西戎、北狄。\lylink{zhouchao}{春秋}时起,人口的流动与杂居增强,许多周边民族自觉或不自觉地被中原文明同化,成为华夏的有机部分。\lyl{《晋书·何曾传》载,阮籍居丧放诞,何曾建议魏文帝\lyq{宜摈〔籍〕四裔,无令污染华夏。}(摈(\lypy{bìn}):弃,指放逐。)}\lyc{《左传·定公十年》孔颖达正义:\lyq{夏,大也。\lylink{zhongguo}{中国}有礼仪之大,故称夏;有服章之美,谓之\lylink{hua2}{华}。华、夏一也。}唐太宗认为:\lyq{治安中国,而四夷自服},这也是中国古代的传统外交理念。} \lylabel{zhongyuan} \lykw{中原}是以今天的河南省为中心,延至黄河中下游地区,大致包括河南、河北、山西南部、山东西部、安徽北部。河南大致对应于古代\lylink{sanfentianxia}{九州}居中的豫州,夏商周三代都奠基于此,被认为是\lylink{tianxia}{天下}的中心。春秋时期主要的中原诸侯国由东至西有:齐、鲁、宋、卫、郑、陈、蔡、晋,其中,周都北方的晋和东北的齐并为赫然大国。中原以外的主要诸侯国有:齐国北部的燕、东南沿海的吴与越、南方的楚、西方的秦,它们都曾称霸一时,以楚与秦的实力最为雄厚。 % TODO: move 诸侯国 to 源流。 @@ -1138,15 +1138,15 @@ \chapter{八佾} \lytopics{人评孔子} \lyblob{仪封人请见,曰:“君子之至于斯也,吾未尝不得见也。”从者见之。出曰:“二三子何患于丧乎?天下之无道也久矣,天将以夫子为木铎。”} { -\item \lyterm{仪封人}:仪地的边境官。\lyterm{仪}:\lylink{kangshu}{卫国}城邑,毗邻鲁国,在今河南省开封市兰考县,故而兰考素称“孔子过\lylink{hua4}{化}”之地。\lyterm{封}:疆域,疆界。\lyl{《明史·兵志二》:\lyq{都指挥使与布、按并称三司,为封疆大吏。}} -\item \lyterm{见}:在\lyterm{请见}、\lyterm{得见}中,指拜见,谒见(孔子),visit。在\lyterm{见之}中,指(向孔子)引见(仪封人),present。 +\item \lyterm{仪封人}:仪地的边境官。\lyterm{仪}:\lylink{kangshu}{卫国}城邑,毗邻鲁国,在今河南省开封市兰考县,后来兰考也称“孔子过\lylink{hua4}{化}”之地。\lyterm{封}:疆域,疆界。\lyl{《明史·兵志二》:\lyq{都指挥使与布、按并称三司,为封疆大吏。}} +\item \lyterm{见}:在\lyterm{请见}、\lyterm{得见}中,指拜见,谒见(孔子),visit,meet。在\lyterm{见之}中,指(向孔子)引见(仪封人),introduce,present。 \item \lylabel{ersanzi}\lyterm{二三子}:对几个人或一群人的亲切的敬称,多用于平辈或晚辈,相当于诸君,您大伙。 \item \lyterm{丧}(\lypy{sàng}):失其位,流亡,流离失所。\lyl{《诗经·唐风·葛生序》:\lyq{好攻战,则国人多丧矣。}} \item \lyterm{铎}(\lypy{duó}):大铜铃。\lyterm{木铎}的铃舌是木制的,金铎的铃舌是铜制的。周朝向公众宣布政令之前,会沿途振响木铎以引人关注。\lyc{《日知录·卷五·木铎》:\lyq{金铎所以令军中,木铎所以令国中,此\lylink{xianwang}{先王}仁义之用也。}} % NOTE: 孙诒让《周礼正义》:\lyq{《说文·金部》云:金,五色金也。黄为之长;银,白金也;铅,青金也;铜,赤金也;铁,黑金也。案金为黄金,亦为五金之总名。但古制器多用铜,故经典通称铜为金。} -这里以木铎比喻孔子,认为他在当时灰暗失序的年代,必将肩负起传播正道于天下、振聋发聩的历史使命。后来“天之木铎”就专指孔子。近现代也将致力于传道授业、德高望重的教师学者誉为木铎。北京师范大学的校徽里就是一个木铎。\lyc{1915年,李大钊有感于当时\lyq{政象阴霾,风俗卑下},中学少年多有灰心失望而自杀者,在《厌世心与自觉心》中写道:\lyq{国中分子,昏梦罔觉者去其泰半,其余丧心溃气者又泰半,聪颖优秀者,悉数且甚寥寥,国或不亡,命脉所系,即在于是。……设无文人,应时而出,奋生花之笔,扬木铎之声,人心来复之\lylink{ji1b}{几}久塞,忏悔之念,更何由发,将与禽兽为侣,暴掠强食以自灭也。}(\lylabel{wang3b}罔:无。泰:大。设:倘若。来复:回归(于善)。)} -% NOTE: 2016-2-23,18岁的高三学生林嘉文因抑郁症自杀,改用此例。 +这里以木铎比喻孔子,认为他在当时灰暗失序的年代,必将肩负起传播正道于天下、振聋发聩的历史使命。后来“天之木铎”就专指孔子。近现代也将致力于传道授业、德高望重的教师学者誉为木铎。北京师范大学的校徽中央就是一个木铎。\lyc{1915年,就读日本早稻田大学政治本科的青年李大钊有感于当时国内\lyq{政象阴霾,风俗卑下},中学少年多有灰心失望而自杀者,在《厌世心与自觉心》中写道:\lyq{国中分子,昏梦罔觉者去其泰半,其余丧心溃气者又泰半,聪颖优秀者,悉数且甚寥寥,国或不亡,命脉所系,即在于是。……设无文人,应时而出,奋生花之笔,扬木铎之声,人心来复之\lylink{ji1b}{几}久塞,忏悔之念,更何由发,将与禽兽为侣,暴掠强食以自灭也。}(\lylabel{wang3b}罔:无。泰:大。设:倘若。来复:回归(于善)。)} +% NOTE: 2016-2-23,18岁高三学生林嘉文因抑郁症自杀,改用此例。 } {} @@ -1163,9 +1163,9 @@ \chapter{八佾} \item \lylabel{meishan}\lyterm{美}指形式表现,即艺术性,\lyterm{善}指价值内涵,即思想性。 -\item \lylabel{wuyue}\lyterm{《武》}:\lycharlink{wu}{周武王}时期的乐舞,相传为\lycharlink{zhougong}{周公}所作,主要用于祭祖,内容从武王伐\lycharlink{zhou}{纣}取得天下,直到周、\lycharlink{shaogong}{召}二公分陕而治。\lyterm{未尽善}:指尽管伐纣顺应天意民心,毕竟还是\lylink{caiweige}{以暴易暴}。 +\item \lylabel{wuyue}\lyterm{《武》}:\lycharlink{wu}{周武王}时期的乐舞,相传为\lycharlink{zhougong}{周公}所作,主要用于祭祖,内容为武王伐\lycharlink{zhou}{纣}取得天下,直到周、\lycharlink{shaogong}{召}二公分陕而治。\lyterm{未尽善}:指尽管伐纣顺应天意民心,毕竟还是\lylink{caiweige}{以暴易暴},同根相煎。 \end{lyblobitemize} -\lyc{\lyref{7.14}。\lylabel{jizhaguanyue}前544年(《左传·襄公二十九年》),\lylink{taibo}{吴国}贤\lylink{gongzi}{公子}季札(即后来的吴王阖闾的小叔)借出访鲁国的机会,观赏了大量\lycharlink{zhougong}{周乐},并作出精辟点评,其中也包括《韶》和《武》:\lyq{见舞《大武》者,曰:“美哉!周之盛,其若此乎?”……见舞《韶箾》者,曰:“德至矣哉!大矣!如天之无不帱也,如地之无不载也,虽甚盛德,其蔑以加于此矣。观止矣!若有他乐,吾不敢请已!”}(《韶箾》(\lypy{xiāo}):即《箫韶》。帱(\lypy{chóu}):覆盖。蔑:无。)当时孔子7岁。} +\lyc{\lyref{7.14}。\lylabel{jizhaguanyue}前544年(《左传·襄公二十九年》,当时孔子8岁),\lylink{taibo}{吴国}贤\lylink{gongzi}{公子}季札(即后来的吴王阖闾的小叔)借出访鲁国的机会,观赏了大量\lycharlink{zhougong}{周乐},并作出精辟点评,其中也包括《韶》和《武》:\lyq{见舞《大武》者,曰:“美哉!周之盛,其若此乎?”……见舞《韶箾》者,曰:“德至矣哉!大矣!如天之无不帱也,如地之无不载也,虽甚盛德,其蔑以加于此矣。观止矣!若有他乐,吾不敢请已!”}(《韶箾》(\lypy{xiāo}):即《箫韶》。帱(\lypy{chóu}):覆盖。蔑:无。)} } {} @@ -1190,7 +1190,7 @@ \chapter{里仁} \item \lyterm{择}:挑选,这里指选择住所。 \item \lyterm{知}(\lypy{zhì}):通“智”,有智慧。 -\lylabel{qujiu}\lyc{如果跳出“里”的环境,择友、择业等等,也都是这个道理。《大戴礼记·曾子疾病》:\lyq{与君子游,苾乎如入兰芷之室,久而不闻,则与之化矣;与小人游,贷乎如入鲍鱼之次,久而不闻,则与之化矣。是故君子慎其所去就。}(苾(\lypy{bì}):芳香。鲍鱼:腌咸鱼。贷:清代王念孙认为是“\raisebox{-0.1em}{\includegraphics[width=1em]{img/zhi}}”(\lypy{zhí})之误,败臭。次:指肆,市中店铺。)英文\lyurl{http://heptagrama.com/quotes-thoughts-62.htm}{谚语}的建议更直白:\lyqe{Surround yourself with people who make you a better person.}甚至\lyurl{http://www.jimrohn.com/}{Jim John}武断地说:\lyqe{You are the average of the five people you spend the most time with.} 反过来想更容易认同:一直stand out是很累的;环境与时间会磨平棱角。} +\lylabel{qujiu}\lyc{如果跳出“里”的环境,择友、择业等等,也都是这个道理。《大戴礼记·曾子疾病》:\lyq{与君子游,苾乎如入兰芷之室,久而不闻,则与之化矣;与小人游,贷乎如入鲍鱼之次,久而不闻,则与之化矣。是故君子慎其所去就。}(苾(\lypy{bì}):芳香。鲍鱼:腌咸鱼。贷:清代王念孙认为是“\raisebox{-0.1em}{\includegraphics[width=1em]{img/zhi}}”(\lypy{zhí})之误,败臭。次:指肆,市中店铺。)英文\lyurl{https://heptagrama.com/quotes-thoughts-62.htm}{谚语}的建议更直白:\lyqe{Surround yourself with people who make you a better person.}甚至\lyurl{http://www.jimrohn.com/}{Jim John}武断地说:\lyqe{You are the average of the five people you spend the most time with.} 反过来想可能更容易认同:一直stand out是很累的,环境与时间会磨平棱角。} } {} %TODO: @@ -1241,9 +1241,9 @@ \chapter{里仁} \item \lyterm{终食}:吃完一餐饭(的时间)。 \item \lyterm{造次必于是,颠沛必于是}:仓促忙乱时要这样(指守仁),挫折困顿时也要这样。 -\lyterm{造}:仓促。\lyl{《礼记·玉藻》:\lyq{造受命于君前,则书于笏。}(笏(\lypy{hù}):古代大臣朝见君王时所持的手板。)}\lyterm{次}:处,所在。\lyterm{造次}就是忙乱之时,仓促之间,构词上类似来自日文的围棋术语“急所”。后来又引申出片刻、轻率的意思。 +\lyterm{造}:仓促。\lyl{《礼记·玉藻》:\lyq{造受命于君前,则书于笏。}(笏(\lypy{hù}):古代大臣朝见君王时所持的手板。)}\lyterm{次}:处,所在。\lyterm{造次}就是忙乱之时,仓促之间,构词上类似于来自日文的围棋术语“急所”。后来又引申出片刻、轻率的意思。 -\lyterm{颠}:倒,跌倒。\lyl{\lyref{16.1} \lyq{危而不持,颠而不扶。}成语“颠扑不破”(扑:击打)。}\lyterm{沛}:通“跋”,也是跌倒。\lyc{颠沛出自《诗经·大雅·荡》结尾:\lyq{人亦有言:颠沛之揭,枝叶未有害,本实先拨。\lylink{yinjian}{殷鉴}不远,在\lylink{xiachao}{夏后}之世。}(揭:翘起见根。拨:断绝。)是把根基动摇的商朝比作倾倒的大树。} +\lylabel{dian1}\lyterm{颠}:倒,跌倒。\lyl{\lyref{16.1} \lyq{危而不持,颠而不扶。}成语“颠扑不破”(扑:击打)。}\lyterm{沛}:通“跋”,也是跌倒。\lyc{颠沛一词出自《诗经·大雅·荡》结尾:\lyq{人亦有言:颠沛之揭,枝叶未有害,本实先拨。\lylink{yinjian}{殷鉴}不远,在\lylink{xiachao}{夏后}之世。}(揭:翘起见根。拨:断绝。)是把根基动摇的商朝比作倾倒的大树。} } % TODO: 对照孟子“鱼,我所欲也……”? {} @@ -1285,12 +1285,10 @@ \chapter{里仁} \item \lylabel{shi4c}\lyterm{士}:对成年男子的美称,这是它的基本义。\lyl{《韩诗外传》第8卷第24章:\lyq{士必学问,然后成\lylink{junzi}{君子}。}}有具体所指时,意义较广,《论语》中涉及的有: \begin{lyitemize} \item 读书人,知识分子。官职并非士的必要条件,但按儒家传统观念,是应当积极从政的。\lyref{19.13} \lyq{学而优则仕},主语很自然地就是士。向学之士与在位之\lylink{qingdafushi}{士}的区别,类似于双重含义的\lylink{junzi}{君子}。古代不同职业的地位及影响力差别很大,现代的选择面就宽得多了。 -\item 引申指理想化的士。这两个意义在《论语》中互有融合,就像现代汉语的男人、英语的man,既可以不带感情色彩地指男性成员,也可以根据上下文环境指真男儿、好汉子。\lyl{\lyref{8.7} \lyq{士不可以不弘毅。}\lyref{14.2} \lyq{士而怀居,不足以为士矣。}1962年Bob Dylan民歌金曲\emph{Blowin' in the Wind}的开头:\lyqe{How many roads must a man walk down, before you call him a man?}} - -\item \lylabel{shishi}掌管刑狱的官员,即士师。《论语》中仅有2例:\lyref{18.2} \lyq{柳下惠为士师,三黜。} \lyref{19.19} \lyq{孟氏使阳肤为士师。} +\item 引申指理想化的士。这两个意义在《论语》中互有融合,就像现代汉语的男人、英语的man,既可以不带感情色彩地指男性成员,也可以根据上下文环境指真男儿、好汉子。\lyl{\lyref{8.7} \lyq{士不可以不弘毅。}\lyref{14.2} \lyq{士而怀居,不足以为士矣。}1962年Bob Dylan的民歌金曲\emph{Blowin' in the Wind}开头是:\lyqe{How many roads must a man walk down, before you call him a man?}} \end{lyitemize} -战国时养士之风盛行,更看重实用的一技之长。此外,士还是最低级别的\lylink{qingdafushi}{贵族阶层},也泛指有官职者。 -\item \lyterm{议}:讨论,商量,这里偏重于交流求道的心得体会。\lyc{\lyref{15.40} \lyq{道不同,不相为谋。}1929年,史学家陈寅恪(1890--1969)在王国维纪念碑铭中写道:\lyq{士之读书治学,盖将以脱心志于俗谛之\lylink{zhigu}{桎梏},真理因得以发扬。}(谛:道理。俗谛:即庸俗鄙陋之见。)大概所有走出校园、进入社会的人,都能切身感受“俗谛”的无所不在,更可见专心求道之可贵。} +此外,士还是最低级别的\lylink{qingdafushi}{贵族阶层},也泛指有官职者。到战国时,养士之风盛行,实用的一技之长更受看重。 +\item \lyterm{议}:讨论,商量,这里偏重于交流求道的心得体会。\lyc{\lyref{15.40} \lyq{道不同,不相为谋。}1929年,史学家陈寅恪(1890--1969)在王国维纪念碑铭中写道:\lyq{士之读书治学,盖将以脱心志于俗谛之\lylink{zhigu}{桎梏},真理因得以发扬。}(谛:道理。俗谛:即庸俗鄙陋之见。)大概所有走出校园、进入社会的人,都能切身感受“俗谛”的无所不在,可见专心求道的可贵。} } {} @@ -1362,7 +1360,7 @@ \chapter{里仁} \lyc{《宋史·范纯仁传》载,范仲淹之子、北宋名臣范纯仁\lyq{性\lylink{yi2}{夷}易宽简,不以声色加人,谊之所在,则挺然不少屈。……尝曰:“吾平生所学,得之‘忠恕’二字,一生用不尽,以至立朝事君,接待僚友,亲睦宗族,未尝须臾离此也。”每戒子弟曰:“人虽至愚,\lylink{ze2a}{责}人则明;虽有聪明,恕己则昏。\lylink{gou3a}{苟}能以责人之心责己,恕己之心恕人,不患不至圣贤地位也。”}(\lylabel{xuyu}须臾(\lypy{yú}):片刻。\lylabel{yi4j}谊:通“\lylink{yi4}{义}”。) -教育家蒋梦麟的回忆录《西潮》中谈到明治维新,东西文化大结合使得日本空前强盛,\lyq{并予文化祖国的中国以极大的鼓励与兴奋。在我幼年时代,我们一辈青年,都奉日本为师,希望日本反哺文化之母鸟而帮助中国复兴。惜乎日本秉国的军阀,知尽忠于己,而不知施恕于人。知义而不知仁,见小而不见大,识近而不识远。致使中国近六十年之历史成为中日关系之惨痛史。}} +教育家蒋梦麟在回忆录《西潮》中谈到明治维新,认为东西文化的大结合使日本空前强盛,\lyq{并予文化祖国的中国以极大的鼓励与兴奋。在我幼年时代,我们一辈青年,都奉日本为师,希望日本反哺文化之母鸟而帮助中国复兴。惜乎日本秉国的军阀,知尽忠于己,而不知施恕于人。知义而不知仁,见小而不见大,识近而不识远。致使中国近六十年之历史成为中日关系之惨痛史。}} } { } % TODO: 如果用在个人修养方面,“忠”也可以理解成忠于自己的内心,努力认识自己、把握自己。“恕”可以认为是宽容之心,理解并欣然接受别人是与自己不同、但又完全合理的个体,不苛求,不狭隘。 @@ -1443,7 +1441,7 @@ \chapter{里仁} \lytopics{君子,言,行} \lyblob{子曰:“君子欲讷于言而敏于行。”} { -\item \lylabel{ne4}\lyterm{讷}(\lypy{nè}):本义为口齿笨拙,引申为少言寡语。成语“讷言敏行”指出言谨慎,做事麻利。\lyc{\lyref{1.14} \lyq{君子……敏于事而慎于言。}据《大戴礼记·曾子疾病》,\lycharlink{zengshen}{曾参}临终前感慨:\lyq{华繁而实寡者,天也;言多而行寡者,人也。}(华:通“花”。)} +\item \lylabel{ne4}\lyterm{讷}(\lypy{nè}):本义为口齿笨拙,引申为少言寡语。成语“讷言敏行”指出言谨慎,做事麻利。\lyc{\lyref{1.14} \lyq{君子……敏于事而慎于言。}据《大戴礼记·曾子疾病》,\lycharlink{zengshen}{曾参}临终前感慨:\lyq{华繁而实寡者,天也;言多而行寡者,人也。}(\lylabel{hua2}华:通“花”。)} } {} @@ -1656,7 +1654,7 @@ \chapter{公冶长} \lytopics{才能} \lyblob{子曰:“\lychar{晏平仲}善与人交,久而敬之。”} { -\item \lyterm{之}指“晏平仲”或“人”都讲得通,可以自行理解,不必拘泥于一说。 +\item \lyterm{之}指“晏平仲”或“人”都讲得通。若干古本作“久而人敬之”。\lyc{《四书集注》引程颐语:\lyq{人交久则敬衰。久而能敬,所以为善。}1866年,曾国藩在回复上海道台应宝时的信中说:\lyq{令人敬畏,全在自立自强,不在装模作样。}原意“人”指外国\lylink{yuanren}{远人},但也不乏普遍意义。} } {} @@ -1678,10 +1676,11 @@ \chapter{公冶长} { \item \lylabel{lingyin}\lyterm{令尹}:春秋战国时期楚国的最高官职,内理政务(相当于宰相),外掌兵权,多由王室亲族担任。 -\item \lyterm{子文}:斗谷於菟(\lypy{wū tú}),字子文,前664年--前637年间任楚国令尹,清廉爱民,上任后献出家产解救国难,留下了“毁家纾难”的佳话。(纾(\lypy{shū}):缓和,解除。)他荐举的继任令尹子玉,就是晋楚\lylink{chengpuzhizhan}{城濮之战}的楚军统帅。 +\item \lyterm{子文}:斗姓,名谷於菟(\lypy{wū tú}),字子文,前664年--前637年间任楚国令尹。他清廉爱民,上任后献出家产解救国难,留下了“毁家纾难”的佳话。(纾(\lypy{shū}):缓和,解除。)他荐举的继任令尹子玉,就是晋楚\lylink{chengpuzhizhan}{城濮之战}的楚军统帅。 % NOTE: 斗谷於菟是楚国令尹斗伯比的私生子,被遗弃于郊野后,有母老虎给他喂奶。当时楚语称乳为“谷”,老虎为“於菟”,于是给他起了“谷於菟”之名。 \item \lylabel{yi3b}\lyterm{已}:停止,引申为罢免,离职。\lyterm{三仕}、\lyterm{三已}的详情难以确考。\lyc{《国语·楚语下》载,\lyq{昔斗子文三舍令尹,无一日之积,\lylink{xu4c}{恤}民之故也。}楚成王听说他家吃了上顿没下顿,每次想给他加薪,他都逃不从命。\lyq{人谓子文曰:“人生求富,而子逃之,何也?”对曰:“夫从政者,以庇民也。民多旷者,而我取富焉,是勤民以自\lylink{feng1}{封}也,死无日矣!我逃死也,非逃富也。”}(旷:空乏,穷匮。勤:劳。)《史记·循吏列传》对于楚国名相孙叔敖也有类似的评价:\lyq{三得相而不喜,知其材自得之也;三去相而不侮,知非己之罪也。}} +% NOTE: 嵇康《与山巨源绝交书》也举子文为例:\lyq{子文无欲卿相,而三为令尹,是乃君子思济物之意也。} \item \lyterm{弑}(\lypy{shì}):臣杀君,子杀父。\lylabel{cuizhu}\lyterm{崔子弑齐君}:指前548年齐国大夫崔杼(\lypy{zhù})纵容家臣弑杀国君齐庄公一事。庄公名光,齐国第22任国君,前554年由崔杼迎立,后来却屡与崔杼之妻通奸。崔杼怀恨在心,告病不朝,庄公借口探病,上门逐戏崔杼妻。崔杼的家臣堵住庄公,崔杼闭内门不纳,庄公被杀。崔杼虽未亲手杀死庄公,却心怀不轨在前,纵凶不救在后,所以齐国太史仍秉笔直书“崔杼弑庄公”。孔子时年4岁。事见《左传·襄公二十五年》、《史记·齐太公世家》。 \item \lylabel{chenwenzi}\lyterm{陈文子}:齐庄公的大夫,名须无,也称田文子。他是田氏家族的第4代宗主,\lycharlink{chenchengzi}{陈成子}的曾祖父。 @@ -1784,7 +1783,7 @@ \chapter{公冶长} \item \lyterm{施劳}:把苦差事施加给别人。 \item \lylabel{huai2}\lyterm{怀}:(使)依附,即安抚,爱护。 -\lylabel{huairouyuanren}\lyc{中国古代素有“怀柔\lylink{yidihuaxia}{远人}”的政治理念,怀即来,柔即安,均为使动用法。怀的这个含义,可理解为源自想念,即给予恩惠,使其感念向往;也可理解为源自胸怀,即宽厚仁爱,使之归于怀抱。 +\lylabel{huairouyuanren}\lyc{中国古代素有“怀柔\lylink{yuanren}{远人}”的政治理念,怀即来,柔即安,均为使动用法。怀的这个含义,可理解为源自想念,即给予恩惠,使其感念向往;也可理解为源自胸怀,即宽厚仁爱,使之归于怀抱。 这前一种解释,例证如\lycharlink{zichan}{子产}去世时民众发自内心的悲痛,反例如《史记·酷吏列传》所载,汉武帝的\lylink{tingwei}{廷尉}张汤自幼娴于刀笔,\lyq{为人多诈,舞智以御人,……文深意忌不专平,……舞文巧诋以辅法,……百姓不安其生},所以\lyq{张汤死而民不思}(《史记·平准书》)。 @@ -2149,7 +2148,7 @@ \chapter{雍也} \item \lylabel{nanzi}\lyterm{南子}:\lylink{songguo}{宋国}宗室之女,子姓,\lycharlink{weilinggong}{卫灵公}的续弦夫人,美艳而有\lylink{songzhao}{淫乱}之名。前496年,卫太子\lycharlink{weijun}{蒯聩}因受宋人\lylink{songzhao}{耻笑},欲杀南子,触怒了灵公,蒯聩出奔。3年后灵公去世,蒯聩之子蒯辄继任为\lycharlink{weijun}{卫出公}。又12年后,蒯聩夺位为卫庄公,遂杀南子。 % NOTE: 南子为续弦夫人,见《列女传·仁智·卫灵夫人》梁端注:\lyq{《列女传》列此于“仁智”,而别记南子与“孽嬖”,此夫人盖在南子前。} -\lylabel{zijiannanzi}\lyc{根据孔子周游列国的行程推算,子见南子约在前496年。其经过《左传》未载,仅见于《史记·孔子世家》:\lyq{反乎卫,主\lycharlink{quboyu}{蘧伯玉}家。灵公夫人有南子者,使人谓孔子曰:“四方之君子不辱欲与寡君为兄弟者,必见\lylink{16.14}{寡小君}。寡小君愿见。”孔子辞谢,不得已而见之。夫人在\lylink{chi1}{絺}\lylink{wei2a}{帷}中,孔子入门,\lylink{nanmian}{北面}\lylink{baili}{稽首}。夫人自帷中\lylink{zaibai}{再拜},环佩玉声璆然。孔子曰:“吾\lylink{xiang4a}{乡}为弗见,见之,礼答焉。”子路不说。孔子\lylink{shi3a}{矢}之曰:“予所否者,天厌之!天厌之!”居卫月余,灵公与夫人同车,宦者雍渠参乘,出,使孔子为次乘,招摇市过之。孔子曰:“吾未见好德如好色者也。”于是丑之,去卫,过曹。}(主:住。璆(\lypy{qiú}):玉饰相互撞动的叮咚声。\lylabel{cansheng}同乘一车者,尊长居左,\lylink{yu4b}{御}者居中,参\lylink{sheng4a}{乘}就是车右陪乘人员。) +\lylabel{zijiannanzi}\lyc{根据孔子周游列国的行程推算,子见南子约在前496年。《左传》未载此事,现仅见于《史记·孔子世家》:\lyq{反乎卫,主\lycharlink{quboyu}{蘧伯玉}家。灵公夫人有南子者,使人谓孔子曰:“四方之君子不辱欲与寡君为兄弟者,必见\lylink{16.14}{寡小君}。寡小君愿见。”孔子辞谢,不得已而见之。夫人在\lylink{chi1}{絺}\lylink{wei2a}{帷}中,孔子入门,\lylink{nanmian}{北面}\lylink{baili}{稽首}。夫人自帷中\lylink{zaibai}{再拜},环佩玉声璆然。孔子曰:“吾\lylink{xiang4a}{乡}为弗见,见之,礼答焉。”子路不说。孔子\lylink{shi3a}{矢}之曰:“予所否者,天厌之!天厌之!”居卫月余,灵公与夫人同车,宦者雍渠参乘,出,使孔子为次乘,招摇市过之。孔子曰:“吾未见好德如好色者也。”于是丑之,去卫,过曹。}(主:住。璆(\lypy{qiú}):玉饰相互撞动的叮咚声。\lylabel{cansheng}同乘一车者,尊长居左,\lylink{yu4b}{御}者居中,参\lylink{sheng4a}{乘}就是车右陪乘人员。) 据《汉书·王莽传》所载太皇太后诏书:\lyq{孔子见南子,\lycharlink{zhougong}{周公}居\lylink{she4a}{摄},盖\lylink{quan2}{权}时也。}颜师古注:\lyq{孔子欲说灵公以治道,故见南子也。}可以视为当时的主流观点。 } @@ -2238,7 +2237,7 @@ \chapter{述而} \lyblob{子之燕居,申申如也,夭夭如也。} { \item \lyterm{燕居}:在家闲居,这是相对于在朝堂之上说的。\lyterm{燕}:通“宴”,安闲,闲适。\lyl{苏辙《九日家酿未熟》:\lyq{燕居渐忘我,杜门\lylink{xi1}{奚}不乐?}(杜:闭。)} % NOTE: 《礼记·仲尼燕居》郑玄注:\lyq{退朝而处曰燕居。} -\item \lyterm{申申}和\lyterm{夭夭}(\lypy{yāo})都形容舒展和缓的样子。\lyterm{申}的甲骨文像闪电舒张,\lyterm{夭}的甲骨文像人挥袖起舞。这种象形造字的美感,是字母化表音文字难以传达的。% TODO: add 2 甲骨文 graphs; p. 245, 168 +\item \lyterm{申申}和\lyterm{夭夭}(\lypy{yāo}),都是形容舒展和缓的样子。\lyterm{申}的甲骨文像闪电舒张,\lyterm{夭}的甲骨文像人挥袖起舞。这种象形造字的美感,是字母化表音文字难以传达的。% TODO: add 2 甲骨文 graphs; p. 245, 168 } {} @@ -2377,7 +2376,9 @@ \chapter{述而} { \item \lylabel{shushi}\lyterm{饭疏食}:吃粗糙的饭。\lyterm{疏}:粗,不精细。\lyl{成语“志大才疏”。}\lyc{\lyref{6.11}} \item \lylabel{gong1b}\lyterm{肱}(\lypy{gōng}):上臂,泛指胳膊。 -\item \lyterm{浮云}随风飘荡,含有转瞬即逝、不可靠、不值得、不屑为等意味,可以自行体会。\lylabel{dongmenhuangquan}\lyc{孔子眼中的浮云,世人却趋之若鹜。如《史记·李斯列传》载,李斯从荀子学帝王之术,学成辞行时说:\lyq{诟莫大于卑贱,而悲莫甚于穷困。久处卑贱之位、困苦之地,非世而恶利,自托于无为,此非\lylink{shi4c}{士}之情也。故斯将西说秦王矣。}(诟(\lypy{gòu}):耻。)通过二十余年苦心经营,终于辅佐秦始皇一统天下。位极人臣之际,他也曾\lylink{kui4}{喟然}而叹:\lyq{物极则衰,吾未知所税驾也!}(税:通“脱”。税驾:(自比老马)解下车套,即休息。)政治斗争多么残酷,他出于嫉妒害死了同学韩非,又因为恐惧\lylink{ershiwangqin}{害死}了扶苏、蒙恬,结果自己也被赵高陷以谋反之名,腰斩灭族。临死之前,他\lyq{顾谓其中子曰:“吾欲与若复牵黄犬俱出上蔡东门逐狡兔,岂可得乎!”遂父子相哭。}(上蔡:李斯的故乡,战国时为楚国一县,在今河南省上蔡县。)} +\item \lyterm{浮云}随风飘荡,含有转瞬即逝、不可靠、不值得、不屑为等意味,可以自行体会。 + +\lylabel{dongmenhuangquan}\lyc{孔子眼中的浮云,世人却趋之若鹜。如《史记·李斯列传》载,李斯从荀子学帝王之术,学成辞行时说:\lyq{诟莫大于卑贱,而悲莫甚于穷困。久处卑贱之位、困苦之地,非世而恶利,自托于无为,此非\lylink{shi4c}{士}之情也。故斯将西说秦王矣。}(诟(\lypy{gòu}):耻。)经过二十余年苦心经营,终于辅佐秦始皇一统天下。位极人臣之际,他也曾\lylink{kui4}{喟然}而叹:\lyq{物极则衰,吾未知所税驾也!}(税:通“脱”。税驾:(自比老马)解下车套,即休息。)政治斗争多么残酷,他出于嫉妒害死了同学韩非,又因为恐惧\lylink{ershiwangqin}{害死}了皇长子扶苏、大将蒙恬,结果自己也被近臣赵高陷以谋反之名,腰斩灭族。临死之前,他\lyq{顾谓其中子曰:“吾欲与若复牵黄犬俱出上蔡东门逐狡兔,岂可得乎!”遂父子相哭。}(上蔡:李斯的故乡,战国时为楚国一县,在今河南省上蔡县。)在他贵显之时,老师荀子早已\lyq{退而笑之曰:“夫不以其道进者,必不以其道亡。”}(《荀子》刘向叙录。)} } {} @@ -2391,7 +2392,7 @@ \chapter{述而} \item \lylabel{yijing}\lyterm{《易》}:即《易经》,中国最古老的哲学经典,早先用于占卜,后来被儒家、道家共同信奉。《周礼·春官宗伯·大卜》载,《易》有3种:《连山》,创自\lycharlink{sanhuang}{伏羲},成书于\lylink{xiachao}{夏朝};《归藏》(\lypy{cáng}),创于\lycharlink{sanhuang}{黄帝}时代,用于\lylink{shangchao}{商朝};《周易》,由\lycharlink{wen}{周文王}将伏羲八卦两两相重扩展而得。后世仅有《周易》较完整地流传下来,成为《易经》的代称。 -《周易》的内容深奥难解,历代研究者不计其数。它的名称就有很强的辩证性,郑玄认为,\lyq{易,一名而含三义:易简,一也;变易,二也;不易,三也。}其主体是对64 \lykw{卦}的逐个解释。每卦含6 \lykw{爻}(\lypy{yáo},每爻或阴或阳),相当于一个6位二进制数(如泰卦\lybaguasym{䷊}相当于000111),64卦喻示了万事万物的状态及变化。解释的部分包括\lykw{经}和\lykw{传}:经文先概说本卦,再分述各爻;传是对经文的进一步阐释。64卦之后,还附有5篇总论性的传(系辞上下、说卦、序卦、杂卦),它们与分散在卦传中的彖(\lypy{tuàn},分上下篇)、象(分上下篇)、文言合称\lykw{十翼}。《汉书·艺文志》称十翼为孔子所作,现代一般认为是出自战国秦汉多人之手。 +《周易》的内容深奥难解,历代研究者不计其数。它的名称就有很强的辩证性,郑玄认为,\lyq{易,一名而含三义:易简,一也;变易,二也;不易,三也。}其主体是对64 \lykw{卦}的逐一解释。每卦含6 \lykw{爻}(\lypy{yáo}),每爻分阴阳,相当于一个6位二进制数(如泰卦\lybaguasym{䷊}相当于000111),64卦喻示了万事万物的状态及变化。解释的部分包括\lykw{经}和\lykw{传}:经文先概说本卦,再分述各爻;传是对经文的进一步阐释。64卦之后,还附有5篇总论性的传(系辞上下、说卦、序卦、杂卦),它们与分散在卦传中的彖(\lypy{tuàn},分上下篇)、象(分上下篇)、文言合称\lykw{十翼}。《汉书·艺文志》称十翼为孔子所作,现代一般认为是出自战国秦汉多人之手。 } {} @@ -2452,10 +2453,13 @@ \chapter{述而} \lytopics{孔子自评,教育,言,行} -\lyblob{子曰:“二三子以我为隐乎?吾无隐乎尔!吾无行而不与二三子者,是丘也。”} +\lybloba{子曰:“二三子以我为隐乎?吾无隐乎尔!吾无行而不与二三子者,是丘也。”} { +\begin{lyblobitemize} \item \lyterm{隐}:隐瞒,藏着不说。这可能是有学生以为孔子在学问上有藏私,类似的想法陈亢也问过伯鱼 \lyref{16.13}。 -\item \lyterm{无行而不与\lylink{ersanzi}{二三子}者}:没有做了什么事而不让你们大伙儿知道的。\lyc{\lyref{6.28}} +\item \lyterm{无行而不与\lylink{ersanzi}{二三子}者}:没有做了什么事而不让你们大伙儿知道的。\lyterm{与}:指与共知,即明示。 +\end{lyblobitemize} +隐而不言的质疑,可能与 \lyref{5.13} \lyq{不可得而闻}有关。孔子用无行不与来回应,符合他身教重于言传的一贯主张。正如钱穆《论语新解》所说:\lyq{本章孔子提醒学者勿尽在言语上求高远,当从行事上求真实。有真实,始有高远。而孔子之身与道合,行与学化。}从教师教书育人的角度看,无行不与要比知无不言言无不尽更难能可贵。 } {} @@ -2463,7 +2467,7 @@ \chapter{述而} \lytopics{教育} \lyblob{子以四教:文、行、忠、信。} { -\item \lyterm{文}:指古代典籍。\lyterm{行}:指行为规范。 +\item \lyterm{文}:指礼乐教化典籍。\lyterm{\lylink{xing2}{行}}:指道德行为。 } {} @@ -2731,7 +2735,7 @@ \chapter{泰伯} \begin{lyblobitemize} \item \lyterm{弘毅}:胸怀宽广,意志坚定。\lyterm{弘}:广大。\lylabel{yi4i}\lyterm{毅}:坚强果决。\lylabel{ren4a}\lyterm{任}:责任,职责,其甲骨文字形为人负重物。% NOTE: 任的字形解析,与《汉字源流字典》不同。 \end{lyblobitemize} -\lylabel{yitianxiaweijiren}\lyc{《孟子·万章上》通过\lycharlink{yiyin}{伊尹}从隐居到出仕,从自立到\lylink{6.30}{立人}的转变,提出以天下\lylink{12.1}{归仁}为己任,激励了一代又一代儒者:\lyq{“与我处畎亩之中,由是以乐尧舜之道,吾岂若使是君为尧舜之君哉?吾岂若使是民为尧舜之民哉?吾岂若于吾身亲见之哉?天之生此民也,使先知觉后知,使先觉觉后觉也。予,天民之先觉者也;予将以斯道觉斯民也,非予觉之而谁也?”思天下之民,匹夫匹妇有不\lylink{pi1}{被}尧舜之泽者,若己推而内之沟中,其自任以天下之重如此。}(畎(\lypy{quǎn}):田间的水沟。畎亩:指民间。)苏轼《乐全先生文集叙》:\lyq{呜呼,士不以天下之重自任,久矣!言语非不工也,政事文学非不敏且博也。然至于临大事,鲜不忘其\lylink{buwangqichu}{故}、失其\lylink{shou3}{守}者,其\lylink{qixiao}{器小}也。}} +\lylabel{yitianxiaweijiren}\lyc{《孟子·万章上》通过\lycharlink{yiyin}{伊尹}从隐居到出仕,从自立到\lylink{6.30}{立人}的转变,提出以天下\lylink{12.1}{归仁}为己任,激励了一代又一代儒者:\lyq{“与我处畎亩之中,由是以乐尧舜之道,吾岂若使是君为尧舜之君哉?吾岂若使是民为尧舜之民哉?吾岂若于吾身亲见之哉?天之生此民也,使先知觉后知,使先觉觉后觉也。予,天民之先觉者也;予将以斯道觉斯民也,非予觉之而谁也?”思天下之民,匹夫匹妇有不被尧舜之泽者,若己推而内之沟中,其自任以天下之重如此。}(畎(\lypy{quǎn}):田间的水沟。畎亩:指民间。被:覆盖,惠及。)苏轼《乐全先生文集叙》:\lyq{呜呼,士不以天下之重自任,久矣!言语非不工也,政事文学非不敏且博也。然至于临大事,鲜不忘其\lylink{buwangqichu}{故}、失其\lylink{shou3}{守}者,其\lylink{qixiao}{器小}也。}} } {} @@ -2970,7 +2974,7 @@ \chapter{子罕} \item \lyterm{绝四}:杜绝四种毛病。 \item \lyterm{意}:通“\lylink{yi4a}{亿}”,主观臆测。\lyc{\lyref{2.17}} \item \lyterm{必}:非黑即白,绝对主义,又可理解为死钻牛角尖,非怎样不可,其本义为分界用的木橛。% TODO: 《天龙八部》,玄慈“一拂之纯”,扫地僧“知念障”,以慈悲佛法化解。 -\item \lyterm{固}:顽固不化,拒绝变通。\lyc{\lyref{4.10}} +\item \lyterm{\lylink{gu4}{固}}:顽固不化,拒绝变通。\lyc{\lyref{4.10}} \item \lyterm{我}:自私自我。 } {} @@ -2982,7 +2986,7 @@ \chapter{子罕} \lytopics{孔子自评,志} \lyblob{子畏于匡,曰:“\lychar{文王}既没,文不在兹乎?天之将丧斯文也,后死者不得与于斯文也;天之未丧斯文也,匡人其如予何?”} { -\item \lyterm{畏}:犯法入狱死,这里指拘禁不得出。亦见于 \lyref{11.23}。\lyterm{匡}:卫国地名,在今河南省长垣县西南,与\lylink{puyi}{蒲邑}相邻。% TODO: 参见源流 +\item \lyterm{畏}:犯法入狱而死,这里指受困无法离开。亦见于 \lyref{11.23}。\lyterm{匡}:卫国地名,在今河南省长垣县西南,与\lylink{puyi}{蒲邑}相邻。% TODO: 参见源流 \item \lylabel{siwen}\lyterm{文}:指传承的礼乐教化、典章制度,相当于文化的精神文明部分,是孔子特别看重的。后面的\lyterm{斯文}也是这个意思,与 \lyref{6.17} 的\lylink{sidao}{斯道}相呼应。现代汉语的“斯文”转为指文人,文学,文雅。 \item \lylabel{zi1}\lyterm{兹}(\lypy{zī}):代词,这,此,指孔子自己。这是一个反问句:难道……吗? \item \lyterm{后死者}:这是相对于文王说的。与后一句连起来,可见孔子之志。 @@ -3175,7 +3179,7 @@ \chapter{子罕} Sam:没错,小姐。真是逝水难寻哪。 \end{lyquotepara} -古希腊哲学家赫拉克利特(Heraclitus)有名言:\lyq{人不能踏进同一条河流两次。}(\lyqe{No man ever steps in the same river twice.}) +古希腊哲学家赫拉克利特(Heraclitus)有名言:\lyq{你无法两次踏进同一条河流。}(\lyqe{No man ever steps in the same river twice.}) 感叹时机稍纵即逝的也有很多,如《汉书·蒯通传》:\lyq{夫功者,难成而易败;时者,难值而易失。时乎时,不再来。}(值:遇。) } @@ -3321,17 +3325,20 @@ \chapter{子罕} \lytopics{欺伪} \lyblob{“唐棣之华,偏其反而。岂不尔思?室是远而。”子曰:“未之思也。夫何远之有?”} { -\item \lyterm{唐棣(\lypy{dì})之华}这4句诗,出处已不可考。意思是:唐棣的花朵啊,摇曳翻转,怎能不思念你呀,(可惜)离家太远。 +\item \lyterm{唐棣(\lypy{dì})之华} 4句诗的意思是:唐棣的花朵啊,摇曳翻转,怎能不思念你呀,(然而)离家太远。其出处已不可考,《论语注疏》、《四书集注》都说是《\lylink{shijing}{诗经}》的逸诗,古注多认为是表达思慕贤人之情。 -\lyterm{华}:通“花”。\lylabel{tangdi}\lyterm{唐棣}:也写作棠棣,学名叫郁李,蔷薇科灌木,春季开桃红色花。因为《诗经·小雅·常棣》开头用花朵和花萼的映衬依托来比拟兄弟亲情,后来就以棠棣喻指手足兄弟。 +\lyterm{华}:通“花”。\lylabel{tangdi}\lyterm{唐棣}:也写作棠棣,学名为郁李,蔷薇科灌木,春季开桃红色花。\lyc{《诗经·小雅·常棣》开头用花朵与花萼的依托映衬来比拟兄弟亲情:\lyq{常棣之华,鄂不韡韡。凡今之人,莫如兄弟。}(不:通“柎”(\lypy{fū}),花萼的足。韡(\lypy{wěi}):光彩鲜明。)后来就常以棠棣比喻手足兄弟。} -\lylabel{er2}\lyterm{而}:无意义的句末助词,也可以表示感叹。\lyl{\lyref{18.5} \lyq{已而,已而,今之从政者殆而!}} +\lylabel{er2}\lyterm{而}:无意义的句末助词,又可以表示感叹。\lyl{\lyref{18.5} \lyq{已而,已而,今之从政者殆而!}} + +\lyterm{偏其反而}:喻指(本应欢聚却)相远离。\lyc{《诗经·小雅·角弓》讲兄弟亲情:\lyq{骍骍角弓,翩其反矣。兄弟昏姻,无胥远矣。}(骍骍:形容弓已调理得灵便称手。翩其反矣:指张弓放箭时角弓两端由近而远。昏姻:指亲戚。胥:相互。)由此看来,把本章的4句诗理解为思念兄弟,由实指上升到思贤、思仁,也说得通。} +% NOTE: \lyl{《晋书·刘乔传》:\lyq{今夕为忠,明旦为逆,翩其反而,互为戎首。载籍以来,骨肉之祸未有如今者也。}康有为《新学伪经考》后序:\lyq{观其尊伪《周礼》一事,而知其\lylink{15.40}{道不相谋},翩其反而也。}} \lyterm{是}:副词,用在单音节形容词谓语之前,强化了形容的效果,相当于如此,这样,so,this。\lyl{\lyref{20.1} \lyq{周有大赉,善人是富。}《诗经·小雅·南山有台》:\lyq{乐只君子,德音是茂。}(\lylabel{zhi1a}只:语气词,相当于呀,呵。德音:善言。)} \lyc{《诗经·郑风·东门之墠》:\lyq{其室则\lylink{er3}{迩},其人甚远。……岂不尔思?子不我\lylink{ji2a}{即}。}(墠(\lypy{shàn}):平整过的场地。)} -\item \lyterm{何远之有}是说,当真思念的话,就不会觉得路途遥远了。 +\item \lyterm{何远之有}是说,当真思念的话,就不会以路远为辞了。\lyc{\lyref{6.12}} % NOTE: 句读为“未之思也,夫何远之有?”不妥,因“夫”用于句首引导。或可句读为:“未之思也夫!何远之有?”参见俞樾《古书疑义举例》。 } {} @@ -3965,7 +3972,7 @@ \chapter{先进} { \item \lylabel{jiziran}\lyterm{季子然}:\lycharlink{jishi}{季氏}的族人。当时子路和冉求都是季氏家臣,所以他会这么问。 \item \lyterm{异之问}:“\lylink{ozhiv}{O之V}”的倒装结构,问的是别人。 -\item \lylabel{juchen}\lyterm{具臣}:充任其职而碌碌无为之臣。\lyterm{具}:出现在那里而已、徒具形式的意思。\lylabel{juwen}\lyl{“具文”指空文,只有样子而不起实际作用的规章制度,现代汉语中也很常用。\lylabel{beiyuan}“备员”与“具臣”的构词和含义都相近(员:官员,人员),又可指职位。《三国志·蜀书·董允传》:\lyq{攸之性素和顺,备员而已。}(攸之:郭攸之,蜀国侍中。)《后汉书·仲长统传》:\lyq{自此以来,三公之职,备员而已。}}\lyc{\lyref{14.22}。唐代赵蕤(\lypy{ruí})《长短经·臣行》描述的六正六邪之臣,也包括大臣和具臣:\lyq{虚心尽意,日进善道,勉主以礼义,谕主以长策,将顺其美,匡救其恶,如此者,大臣也。……安官贪禄,不务公事,与世沉浮,左右观望,如此者,具臣也。}(将(\lypy{jiāng}):扶助。)} +\item \lylabel{juchen}\lyterm{具臣}:充任其职而碌碌无为之臣。\lyterm{具}:出现在那里而已、徒具形式的意思。\lylabel{juwen}\lyl{“具文”指空文,只有样子而不起实际作用的规章制度,现代汉语中也很常用。\lylabel{beiyuan}“备员”与“具臣”的构词和含义都相近(员:官员,人员),又可指职位。如《史记·张丞相列传》说,汉武帝的几任丞相为官但求廉谨,\lyq{备员而已,无所能发明功名有著于当世者。}(发明:建树,昭彰。)《后汉书·仲长统传》载,东汉建立后,光武帝愠于公室失权,强臣窃命,决然以尚书架空丞相,总揽朝政,\lyq{自此以来,三公之职,备员而已}。}\lyc{\lyref{14.22}。唐代赵蕤(\lypy{ruí})《长短经·臣行》描述的六正六邪之臣,也包括大臣和具臣:\lyq{虚心尽意,日进善道,勉主以礼义,谕主以长策,将顺其美,匡救其恶,如此者,大臣也。……安官贪禄,不务公事,与世沉浮,左右观望,如此者,具臣也。}(将(\lypy{jiāng}):扶助。)} % NOTE: 《礼记·曲礼下》:\lyq{为人臣之礼,不显谏。三谏而不听,则逃之。}然而在大义面前,礼就没那么重要了,《礼记·檀弓上》:\lyq{事君有\lylink{fan4}{犯}而无隐。} \item \lyterm{从之者与?}:(领导)让他们干什么都照办吗?孔子坚持大义,他的回答乍看似乎突兀,含有对季氏窃政的不满,可比较 \lyref{13.14}。 } @@ -4046,7 +4053,7 @@ \chapter{先进} \item \lylabel{yong3}\lyterm{咏}:长声吟唱。不妨遥想一下,他们所咏的内容会是什么?\lyc{\lyref{6.30}} -\item \lylabel{an1}\lyterm{安}:表示反问的代词,怎么,岂,参见\lylink{yan1}{焉}。练习:快递公司用“所托安至”的宣传语,是否妥当? +\item \lylabel{an1}\lyterm{安}:表示反问的代词,怎么,岂,参见\lylink{yan1}{焉}。练习:快递公司使用“所托安至”作宣传语,是否妥当? \item \lyterm{非邦}:(说的)不是国家(治理方面的事)。孔子问的是“如或知尔”,诸弟子从子路往后,一个比一个回答得谦逊含蓄,所以曾皙想请老师指点确认一下。 % NOTE: 由此可见,有古注认为曾皙的回答是避世自娱之意,实属误解。 @@ -4209,7 +4216,7 @@ \chapter{颜渊} \lyblob{子曰:“片言可以折狱者,其\lychar{由}也与?”\lychar{子路}无宿诺。} { \item \lyterm{片言}:简短的话,几句话,这里理解为供辞或问话皆通。\lylabel{zheyu}\lyterm{折狱}:断案。\lyterm{折}:判断,裁决。成语“片言折狱”既可以指人洞察力强,见微知著,也可以指论断简明扼要,一语中的。 -\item \lyterm{宿诺}:隔夜的承诺,即不能及时兑现的诺言。\lyl{《大戴礼记·五帝德》:\lyq{\lycharlink{zaiyu}{宰我}曰:“昔者予也闻诸夫子曰:小子无有宿问。”}(宿问:隔夜的疑问。)《孔子家语·弟子行》:\lyq{心有耻而不使其过宿。}(即知耻速改。)}\lyc{\lyref{5.14}} +\item \lyterm{宿诺}:隔夜的承诺,即不能及时兑现的诺言。\lyl{《大戴礼记·五帝德》:\lyq{\lycharlink{zaiyu}{宰我}曰:“昔者予也闻诸夫子曰:小子无有宿问。”}(宿问:隔夜的疑问。)《孔子家语·弟子行》:\lyq{心有耻而不使其过宿。}(即知耻速改。)}\lyc{\lyref{5.14}。《汉书·东方朔传》载,东方朔自称\lyq{常服子路之言},就是指“无宿诺”。} } {} @@ -4316,7 +4323,7 @@ \chapter{颜渊} 樊迟退,见\lychar{子夏},曰:“乡也吾见于夫子而问知,子曰:‘举直错诸枉,能使枉者直’,何谓也?”子夏曰:“富哉言乎!\lychar{舜}有天下,选于众,举皋陶,不仁者远矣。汤有天下,选于众,举伊尹,不仁者远矣。”} { \item \lylabel{xiang4a}\lyterm{乡}(\lypy{xiàng}):通“向”,从前,之前。\lyc{\lyref{2.19}} -\item \lyterm{富}:指内涵丰富,言简意赅。 +\item \lyterm{富}:指内涵丰富,意蕴深远。 \item \lyterm{选于众}:从民众中(量才)选拔,与后来的贵族世袭相对。\lylabel{xuanyuzhong}\lyc{《史记·五帝本纪》描述了\lycharlink{shun}{舜帝}广开言路,使\lycharlink{gaoyao}{皋陶}等22名贤臣各得其所的情景:\lyq{舜乃至于文祖,谋于四岳,辟四门,明通四方耳目,命十二牧论帝德,行厚德,远佞人,则蛮夷率服。……舜曰:“皋陶!蛮夷猾夏,寇贼奸轨,汝作\lylink{shishi}{士},五刑有服,五服三就;五流有度,五度三居;维明能信。”}(文祖:\lycharlink{yao}{尧帝}的祖庙。辟四门:指广迎四方贤人。牧:\lylink{sanfentianxia}{州}长。猾:侵扰。\lylabel{jiangui}奸轨:又作“奸宄”(\lypy{guǐ}),违法作乱。在外称奸,在内称宄。服:适度。就:处所。流:流放之刑。)} 后一个“选于众”偏重于修辞,\lycharlink{tang}{商汤}是先得\lycharlink{yiyin}{伊尹}然后夺取天下的。《史记·殷本纪》录有两种说法:伊尹想投奔商汤而无门径,就先去当了商汤夫人家的厨师陪嫁过去,\lyq{以滋味说汤,\lylink{zhi4b}{致}于\lylink{wangdao}{王道}}(详见《吕氏春秋·孝行览·本味》),故被后世奉为烹饪之祖;伊尹是隐士,商汤5次派人礼聘才同意出山。后来他又投奔\lycharlink{xiachao}{桀}(《吕氏春秋·慎大览·慎大》、《孙子兵法·用间》等认为,他是被商汤派去进行离间破坏),不齿桀之无道,复归于汤,终成大业。 @@ -4415,9 +4422,9 @@ \chapter{子路} 樊迟出,子曰:“小人哉,\lychar{樊须}也!上好礼,则民莫敢不敬;上好义,则民莫敢不服;上好信,则民莫敢不用情。夫如是,则四方之民襁负其子而至矣,焉用稼?”} { \item \lyterm{稼}:种庄稼。\lyterm{圃}(\lypy{pǔ}):种蔬菜。 -\item \lylabel{xiaoren1}\lyterm{\lylink{junzi}{小人}}:指志向小,胸怀格局不大。\lyc{\lyref{2.12} \lyq{君子不器。}《礼记·乐记》:\lyq{德成而上,艺成而下;行成而先,事成而后。}} +\item \lylabel{xiaoren1}\lyterm{\lylink{junzi}{小人}}:指志向小,胸怀抱负不大。\lyc{\lyref{2.12} \lyq{君子不器。}《礼记·乐记》:\lyq{德成而上,艺成而下;行成而先,事成而后。}} % TODO: 亦见宋儒提出的\lylink{sangangbamu}{三纲八目}。 -\item \lyterm{用情}:指待以真情,不虚饰掩藏。 +\item \lyterm{用情}:指坦诚相待,不虚饰掩藏。\lylabel{qing2}\lyterm{情}:诚实,真情,与“伪”相对。“情伪”即真假,虚实。 \item \lyterm{襁}(\lypy{qiǎng}):背负婴儿用的宽带子。这一句体现了中国传统的\lylink{huairouyuanren}{怀柔远人}的政治理念。\lyc{\lyref{5.26} \lyref{13.16}} } { @@ -4773,7 +4780,7 @@ \chapter{宪问} \item \lyterm{羿}(\lypy{yì}):即\lylink{xiachao}{夏朝}有穷氏的首领后羿,善于射箭(和传说中奉\lycharlink{yao}{尧帝}之命射落九日的羿不是同一人)。他恃武力驱逐了夏朝第3任君王、\lylink{qi3}{启}之子太康,立其弟中康为傀儡,后来又篡夺了中康之子相的政权。后羿溺于狩猎,不修民事,弃用良臣,信任奸邪小人寒浞(\lypy{zhuó})为相。后来寒浞谋害了后羿,继任有穷氏首领,烹其尸,杀其子,占其妻。事见《左传·襄公四年》、《史记正义》。 \item \lyterm{奡}(\lypy{ào}):也写作浇(\lypy{ào}),寒浞与后羿之妻(称玄妻,也是后羿打仗抢来的)所生的两个儿子之一,勇力过人,能在陆地上推船行走,曾在水战中荡覆敌舟。奡灭掉了斟灌氏、斟寻氏的国家,杀害了被后羿夺权的相。忠于夏的大臣靡在后羿被害后出逃,联合二氏的幸存者消灭了寒浞,复立相的遗腹子少康为夏朝之君。后来少康杀奡兄弟、灭有穷氏,夏朝得以中兴。亦见《左传·襄公四年》、《史记正义》。 -\lyc{屈原(前352年--前281年)《离骚》也举他们为例来说明道德自律的重要:\lyq{羿\lylink{yin2}{淫}游以\lylink{yi4b}{佚}畋兮,又好射夫封狐。固乱流其鲜终兮,浞又贪夫\lylink{jue2}{厥}家。浇身被服强圉兮,纵欲而不忍。日康娱而自忘兮,厥首\lylink{yong4}{用}夫颠陨。……\lycharlink{tang}{汤}禹\lylink{yan3}{俨}而祗敬兮,周论道而莫差。举贤而授能兮,循绳墨而不颇。}(畋(\lypy{tián}):狩猎。\lylabel{feng1}封:通“丰”,高大,肥厚。乱流:恣意妄为。\lylink{pi1}{被}:指拥有。圉(\lypy{yù}):通“御”,强圉即强力。颠陨:坠落。\lylabel{zhi1}祗(\lypy{zhī}):敬。周:指周\lycharlink{wen}{文}、\lycharlink{wu}{武}等贤王。绳墨:喻准则。颇:偏。)} +\lyc{屈原(前352年--前281年)《离骚》也举他们为例来说明道德自律的重要:\lyq{羿\lylink{yin2}{淫}游以\lylink{yi4b}{佚}畋兮,又好射夫封狐。固乱流其鲜终兮,浞又贪夫\lylink{jue2}{厥}家。浇身被服强圉兮,纵欲而不忍。日康娱而自忘兮,厥首\lylink{yong4}{用}夫颠陨。……\lycharlink{tang}{汤}禹\lylink{yan3}{俨}而祗敬兮,周论道而莫差。举贤而授能兮,循绳墨而不颇。}(畋(\lypy{tián}):狩猎。\lylabel{feng1}封:通“丰”,高大,肥厚。乱流:恣意妄为。\lylink{pi1}{被}服:拥有,负恃。圉(\lypy{yù}):通“御”,强圉即强力。颠陨:坠落。\lylabel{zhi1}祗(\lypy{zhī}):敬。周:指周\lycharlink{wen}{文}、\lycharlink{wu}{武}等贤王。绳墨:喻准则。颇:偏。)} \item \lylabel{houji}\lyterm{稷}:即\lylink{zhouchao}{周}王室的始祖后稷。他从儿时即展露出种植庄稼的天赋,成人后专心务农,能因地制宜,合理耕收,被\lycharlink{yao}{尧帝}任用为农师,天下得其利,后被\lycharlink{shun}{舜帝}封于邰(\lypy{tái},在今陕西省武功县西南),得姓姬。事见《史记·周本纪》。 \item \lyterm{躬稼}:亲自耕作,指身体力行而不是做做样子。 @@ -4914,7 +4921,7 @@ \chapter{宪问} \lylabel{jiantuzhimeng}另一种解释是,年老的晋文公渴望成就霸业,功利心太盛,操之过急。前631年冬,宋国求救于晋,晋人的反应是:\lyq{报施救患,取威定霸,于是乎在矣。}次年夏4月击退楚军后,5月晋国就召集齐、宋、鲁、蔡、郑、卫等国,于践土(郑国之地,在今河南省新乡市原阳县)立盟,以晋为伯,共尊周室,同年冬再盟于温(周\lylink{wangji}{王畿}内的小国,在今河南省焦作市温县),商议讨伐不顺服的国家。这两次盟会,天子周襄王都应邀(受召)前往,实质是为晋文公站台加冕,充当\lylink{3.13}{媚于奥}的滑稽角色。这在《春秋》、《左传》“僖公二十八年”的记录也很委婉,因为\lyq{以臣召君,不可以训}(孔子语。训:作为典范、楷模)。 -城濮之战前,\lycharlink{qihuangong}{齐桓公}已死,中原各国群龙无首,饱受强大的楚国欺凌。晋文公长年漂泊,多识世故,\lyq{险阻艰难,备尝之矣;民之\lylink{qing2}{情}伪,尽知之矣}(楚成王语),这与齐桓公的尊崇无忧有天壤之别。他一朝为君,自知日暮途远,晋国固然人才济济,却无管仲那样独力擎天的经世奇才,其谲也是情非得已了。城濮之战后,30多年间楚国不敢北窥中原,晋国的强盛持续到\lylink{sanjiafenjin}{六卿内斗}时期。 +城濮之战前,\lycharlink{qihuangong}{齐桓公}已死,中原各国群龙无首,饱受强大的楚国欺凌。晋文公长年漂泊,多识世故,\lyq{险阻艰难,备尝之矣;民之\lylink{qing2}{情伪},尽知之矣}(楚成王语),这与齐桓公的尊崇无忧有天壤之别。他一朝为君,自知日暮途远,晋国固然人才济济,却无管仲那样独力擎天的经世奇才,其谲也是情非得已了。城濮之战后,30多年间楚国不敢北窥中原,晋国的强盛持续到\lylink{sanjiafenjin}{六卿内斗}时期。 \item 孔子评价的齐桓公之\lyterm{正},应是指下一章的\lylink{jiuhezhuhou}{九合诸侯,不以兵车}。 } @@ -4947,7 +4954,7 @@ \chapter{宪问} \item \lylabel{kuang1}\lyterm{匡}(\lypy{kuāng}):正,纠正。\lyl{成语“匡时济世”。} \item \lyterm{微}:副词,用于名词之前,构成表示假设、让步的分句,要是没有。\lyl{范仲淹《岳阳楼记》:\lyq{微斯人,吾谁与归?}《战国策·中山策·昭王既息民缮兵》:\lyq{微白起,吾不能灭赵乎?}} -\item \lylabel{pi1}\lyterm{被(\lypy{pī})发左衽(\lypy{rèn})}:披散头发、身着异族服装,指沦落成未开化的\lylink{yidihuaxia}{野蛮人}。这里推崇的是管仲辅佐齐桓公“尊王\lylink{rang3}{攘}夷”的业绩,包括救\lylink{shaogong}{燕}于山戎、救\lylink{kangshu}{卫}于狄等,事见《史记·齐太公世家》。\lyterm{被}:通“披”。\lylabel{zuoren}\lyterm{衽}:上衣前胸处交领的部分。传统汉服以左前襟压右前襟,称为右衽,反之则为\lyterm{左衽},是当时周边少数民族的习俗,也是汉族寿衣的穿法。 +\item \lyterm{被(\lypy{pī})发左衽(\lypy{rèn})}:披散头发、身着异族服装,指沦落成未开化的\lylink{yidihuaxia}{野蛮人}。这里推崇的是管仲辅佐齐桓公“尊王\lylink{rang3}{攘}夷”的业绩,包括救\lylink{shaogong}{燕}于山戎、救\lylink{kangshu}{卫}于狄等,事见《史记·齐太公世家》。\lylabel{pi1}\lyterm{被}:通“披”。\lylabel{zuoren}\lyterm{衽}:上衣前胸处交领的部分。传统汉服以左前襟压右前襟,称为右衽,反之则为\lyterm{左衽},是当时周边少数民族的习俗,也是汉族寿衣的穿法。 \item \lylabel{liang4}\lyterm{谅}:本义为诚信,引申指目光短浅的固执、狭隘。\lyl{\lyref{16.4} \lyq{友直、友谅、友多闻,益矣。}\lyref{15.37} \lyq{君子贞而不谅。}}\lyc{\lyref{9.4} \lyref{19.11}} \item \lyterm{自经于沟渎}:上吊死在荒野小山沟。\lylabel{goudu}\lyterm{沟渎}:田间水道,比喻默默无闻的小地方,意思是死得轻于鸿毛。 @@ -5277,7 +5284,7 @@ \chapter{卫灵公} \lyblob{在陈绝粮,从者病莫能兴。\lychar{子路}愠,见曰:“君子亦有穷乎?”子曰:“君子固穷,小人穷斯滥矣。”} { \item \lyterm{病莫能兴}。\lylabel{bing4}\lyterm{病}:困苦,困乏,这里指因为断粮而饿坏了。\lyterm{兴}:起身。有的书在“病”之后加逗号,考虑到“爱莫能助”、“苦不堪言”都是耳熟能详,就不多此一举了。% TODO: add link for 在陈绝粮;源流增加《史记》虎兕旷野。 -\item \lyterm{固穷}:在艰苦困境中保持意志坚定(不违仁)。\lyterm{固}:动词,安守,坚守。\lylabel{qiong2}\lyterm{穷}:本义为已达尽头,尽,完,引申为困窘,贫乏,又引申为不得志。反义词是\lylink{da2}{达}。\lyl{成语“穷途末路”。\lylabel{qiongda}《孟子·尽心上》:\lyq{穷则独善其身,达则兼善天下。}}\lyc{\lyref{4.5} \lyref{4.9} \lyref{6.7}。《韩诗外传》第1卷第8章:\lyq{厄穷而不悯,劳辱而不\lylink{gou3}{苟},然后有\lylink{zhi4b}{致}也。}(厄:困苦。悯:忧伤。)} +\item \lyterm{固穷}:在艰苦困境中保持意志坚定(不违仁)。\lyterm{\lylink{gu4a}{固}}:动词,安守,坚守。\lylabel{qiong2}\lyterm{穷}:本义为已达尽头,尽,完,引申为困窘,贫乏,又引申为不得志。反义词是\lylink{da2}{达}。\lyl{成语“穷途末路”。\lylabel{qiongda}《孟子·尽心上》:\lyq{穷则独善其身,达则兼善天下。}}\lyc{\lyref{4.5} \lyref{4.9} \lyref{6.7}。《韩诗外传》第1卷第8章:\lyq{厄穷而不悯,劳辱而不\lylink{gou3}{苟},然后有\lylink{zhi4b}{致}也。}(\lylabel{e4b}厄:困苦。\lylabel{min3b}悯:忧伤。)} \item \lyterm{滥}:过度,无节制,引申指抛弃操守地胡作非为,乱来。\lyl{成语“宁缺勿滥”,熟语“滥用职权”。} } {} @@ -5678,7 +5685,7 @@ \chapter{卫灵公} \item \lyterm{师冕}:盲人乐师,名冕。先秦时期的乐师常由盲人担任。\lyc{《周礼·春官宗伯·序官》贾公彦疏:\lyq{以其无目,无所睹见,则心不移于音声,故不使有目者为之也。}} \item \lyterm{某在斯}:某人在这里,这是向师冕介绍在座各位的姓名和位置。 \item \lyterm{与师言之道与?}:(这是)和(盲人)乐师说话的合礼方式吗? -\item \lyterm{\lylink{xiang4}{相}}(\lypy{xiàng}):特指扶助盲人。\lyl{《荀子·成相》:\lyq{人主无贤,如\lylink{gu3a}{瞽}无相,何伥伥!}(伥伥(\lypy{chāng}):无所适从的样子。)}\lyc{明代薛瑄《读书录》:\lyq{常人见贵人则知敬,见敌者则敬稍衰,于下人则\lylink{man4}{慢}之而已。圣人与上下人己之间,皆一诚敬之心。}(敌:相当。)} +\item \lylabel{xiang4b}\lyterm{\lylink{xiang4}{相}}(\lypy{xiàng}):特指扶助盲人。\lyl{《荀子·成相》:\lyq{人主无贤,如\lylink{gu3a}{瞽}无相,何伥伥!}(伥伥(\lypy{chāng}):无所适从的样子。)}\lyc{明代薛瑄《读书录》:\lyq{常人见贵人则知敬,见敌者则敬稍衰,于下人则\lylink{man4}{慢}之而已。圣人与上下人己之间,皆一诚敬之心。}(敌:相当。)} } {} @@ -5717,15 +5724,19 @@ \chapter{季氏} 他这句话的意思是:拿得出什么本事就去任什么职,做不来就歇着吧。\lylabel{chen2a}\lyterm{陈}:摆出,陈列。\lyc{《史记·范雎蔡泽列传》引范雎上秦昭王书,开头说:\lyq{臣闻明主立政,有功者不得不赏,有能者不得不官。劳大者其禄厚,功多者其爵尊,能治众者其官大。故无能者不敢当职焉,有能者亦不得蔽隐。}} +\item \lyterm{危而不持,\lylink{dian1}{颠}而不扶}。\lyterm{持}:扶助,扶持。本句与后面的\lyterm{\lylink{xiang4b}{相}}一语双关,责备他们身为臣下而不作为,使主上迷途难返,陷于无相之\lylink{gu3b}{瞽}的危险境地。\lyc{\lyref{11.24}。《明史·海瑞传》海瑞上嘉靖疏:\lyq{今大臣持禄而好谀,小臣畏罪而结舌,臣不胜愤恨。}} + \item \lyterm{虎兕(\lypy{sì})出于柙(\lypy{xiá}),龟玉毁于椟中}。\lyterm{兕}:野牛。\lyterm{柙}:兽笼。\lyterm{龟玉}:龟甲和宝玉,古代视为国之重器。这里用“虎兕”隐指季氏的无名之师,“龟玉”指社稷之臣颛臾,批评两位学生未能尽到持危扶颠、进尽忠言的臣辅之职。\lyc{《四书集注》:\lyq{言在柙而逸,在椟而毁,典守者不得辞其过。明二子居其位而不去,则季氏之恶,己不得不任其责也。}(\lylabel{dian3}典:掌管,主持。)\lylabel{ligu}《后汉书·李固传》载,146年,年幼的汉冲帝被皇太后之兄、大将军梁冀毒死,太尉李固联合司徒胡广、司空赵戒,议立年长有德的清河王为帝。梁冀忌惮清河王之严明,执意立15岁的蠡吾侯(即汉桓帝),争论时\lyq{意气凶凶而言辞激切,自胡广、赵戒以下,莫不慑惮之},而李固坚守本议。一年后,李固被梁冀诬陷而死,临刑前写信给胡广、赵戒说:\lyq{“固受国厚恩,是以竭其股肱,不顾死亡,志欲扶持王室,比隆\lycharlink{hanwendi}{文}、\lycharlink{hanxuandi}{宣}。何图一朝梁氏迷谬,公等曲从,以吉为凶,成事为败乎?汉家衰微,从此始矣!公等受主厚禄,颠而不扶,倾覆大事,后之良史,岂有所私?固身已矣,于义得矣,夫复何言!”广、戒得书悲惭,皆长叹流涕。}(\lylabel{gugong}股\lylink{gong1b}{肱}:大腿和胳膊,这里指辅佐(之力),也常比喻辅政重臣。)} +\item \lylabel{gu4a}\lyterm{固}:本义为四周地势险要闭塞,易于长守不变。\lyl{贾谊《过秦论下》:\lyq{秦地被山带河以为固,四塞之国也。}} + \item \lyterm{必为之辞}:非要替它找个借口。 \item \lyterm{不患寡而患不均,不患贫而患不安}:根据文意,似应为:不患贫而患不均,不患寡而患不安。\lyc{西汉董仲舒《春秋繁露·度制》开篇:\lyq{孔子曰:“不患贫而患不均。”故有所积重,则有所空虚矣。大富则骄,大贫则忧;忧则为盗,骄则为暴——此众人之情也。}} \item \lyterm{既\lylink{lai2}{来}之,则安之}里的\lyterm{来}和\lyterm{安},都是使动用法:使归从,使安定。 -\lyterm{之}都是指\lyterm{远人},与自己关系疏远者。它既可指地理的远近,如海外异邦;也可指立场的亲疏,如敌国外患;又可指文化的同异,如\lylink{yidihuaxia}{四夷}。如果孔子这里专有所指,也许是说鲁国连年讨伐的近邻\lylink{zhuguo}{邾国}。 +\lylabel{yuanren}两个\lyterm{之}都是指\lyterm{远人},与自己关系疏远者。它既可指地理的远近,如海外异邦;也可指立场的亲疏,如敌国外患;又可指文化的同异,如\lylink{yidihuaxia}{四夷}。如果孔子这里专有所指,也许是说鲁国连年讨伐的近邻\lylink{zhuguo}{邾国}。 “既来之,则安之”作为现代成语,意思是既已来到这里,就安心待在这里。“之”的所指\lylink{shizhizhe}{虚化},常用于陌生的环境或岗位。 @@ -5919,7 +5930,7 @@ \chapter{阳货} \item \lyterm{好从事而亟(\lypy{qì})失时}:热心于政治却屡屡错失机会。\lylabel{qi4a}\lyterm{亟}:屡次,一再。 \item \lyterm{岁不我与}:“\lylink{nov}{岁不与我}”的倒装。这是阳货鼓动孔子为自己效力,催他表态的话。\lyterm{与}:等待,这是从帮助、许可的意义引申来的,主语是\lyterm{岁}(时间,岁月)。后有成语“时不我与”。 -\item \lyterm{吾将仕矣}:这是孔子对阳货的应付之辞。前501年阳货被逐后,孔子就接受鲁定公之命任\lylink{qirenkuinvyue}{中都宰},后又为\lylink{sikong}{司空}、\lylink{sikou}{司寇},品级升至\lylink{qingdafushi}{大夫}。 +\item \lyterm{吾将仕矣}:这是孔子对阳货的应付之辞。前501年阳货被逐后,孔子就接受鲁定公之命任\lylink{qirenkuinvyue}{中都宰},后又为\lylink{sikong}{司空}、\lylink{sikou}{司寇},位阶升至\lylink{qingdafushi}{大夫}。 } {} % TODO: 孔子\lylink{7.31}{难得}耍了个心眼,却失败了。 @@ -6116,7 +6127,7 @@ \chapter{阳货} \item \lyterm{患得\lylink{shizhizhe}{之}}:担心得不到。成语“患得患失”指人斤斤计较于个人得失,而不以大局为重。 \item \lyterm{无所不至}:没有什么干不上来的。\lyc{\lyref{15.2} \lyq{小人穷斯滥矣。}} \end{lyblobitemize} -\lyc{苏轼对于本章的学习体会,见《上皇帝书》:\lyq{臣始读此书,疑其太过,以为鄙夫之患失,不过\lylink{beiyuan}{备位}而\lylink{gou3}{苟}容。及观李斯忧蒙恬之夺其权,则立二世以亡秦;卢杞忧怀光之数其恶,则误德宗以再乱。其心本生于患失,而其祸乃至于丧邦。孔子之言,良不为过!是以知为国者,平居必有忘躯犯颜之士,则临难\lylink{shu4a}{庶几}有徇义\lylink{shou3}{守死}之臣。苟平居尚不能一言,则临难何以责其死节?人臣苟皆如此,天下亦\lylink{dai4}{殆}哉!} +\lyc{苏轼关于本章的学习心得,见《上皇帝书》:\lyq{臣始读此书,疑其太过,以为鄙夫之患失,不过\lylink{beiyuan}{备位}而\lylink{gou3}{苟}容。及观李斯忧蒙恬之夺其权,则立二世以亡秦;卢杞忧怀光之数其恶,则误德宗以再乱。其心本生于患失,而其祸乃至于丧邦。孔子之言,良不为过!是以知为国者,平居必有忘躯犯颜之士,则临难\lylink{shu4a}{庶几}有徇义\lylink{shou3}{守死}之臣。苟平居尚不能一言,则临难何以责其死节?人臣苟皆如此,天下亦\lylink{dai4}{殆}哉!} (\lylabel{ershiwangqin}李斯事:《史记·李斯列传》载,前210年秦始皇病故,近臣赵高以\lyq{未尝见秦免罢丞相功臣有封及二世者也,卒皆以诛亡}为由胁迫丞相\lycharlink{dongmenhuangquan}{李斯}改立新君。李斯始而不从,继而\lyq{仰天长叹,垂泪\lylink{taixi}{太息}},合谋\lylink{jiancuanweijiao}{矫}诏赐死了刚毅武勇的皇长子扶苏和名将蒙恬,立才能浅薄的幼子胡亥为秦二世,3年后秦朝覆亡。卢杞事:《新唐书·卢杞传》载,783年10月爆发泾原兵变,唐德宗从都城长安出奔,被困于奉天(今陕西省咸阳市乾县)月余,朔方节度使李怀光千里赴难,勇解城下之围。怀光曾斥宰相卢杞之徒奸佞误国,\lyq{宜诛之以谢天下},杞惧,使德宗令怀光乘胜扫平叛党,不必入城面君。怀光\lyq{内怏怏无所发,遂谋反,因暴言杞等罪恶},德宗再逃至汉中,战乱又延续了大半年才得平息。徇:通“殉”。)} } @@ -6130,7 +6141,8 @@ \chapter{阳货} \item \lylabel{si4b}\lyterm{肆}:放纵,指自由随意,不拘小节。相对地,\lyterm{荡}则是\lylink{19.11}{逾大闲}。 \item \lylabel{jin1b}\lyterm{\lylink{jin1}{矜}}:骄傲自负,自高自大。\lyc{《三国志·蜀书·刘璋传》裴松之注引习凿齿语:\lyq{昔\lycharlink{qihuangong}{齐桓}一矜其功而叛者九国,曹操暂自骄伐而天下三分,皆勤于数十年之内而弃之于俯仰之顷,岂不惜乎!是以君子劳谦日昃,\lylink{lvyixiaren}{虑以下人},功高而居之以让,势尊而守之以卑。}(昃(\lypy{zè}):太阳西斜。日昃:出自《周易·离》,这里指工作勤久。)} -\item \lylabel{lian2}\lyterm{廉}:品行正直而心胸不广。其本义为堂屋的地面与墙相并形成的直二面角(而不是墙角旮旯),所以有方正之意,又因为相夹而狭,所以还有狭窄之意,《说文解字》就直接解释为仄(狭窄)。常用的清正不贪财,是它的后起偏义。这里的解释略与各家不同,他们未能指明狭窄,似乎偏离了“疾”。\lyl{《史记·屈原贾生列传》:\lyq{其志洁,故其称物芳;其行廉,故死而不容。}《史记·郦生陆贾列传》:\lyq{〔平原君朱建〕刻廉刚直,……行不\lylink{gouhe}{苟合},义不取容。}(刻:严苛。\lylabel{qurong}取容:讨好别人以求安身。)}\lyc{《韩诗外传》第1卷第25章说,\lyq{仁道有四,磏为下}(磏(\lypy{lián}):赤色有棱角的石头,这里通“廉”),并举\lycharlink{boyishuqi}{伯夷}、\lycharlink{boyishuqi}{叔齐}、\lycharlink{yuansi}{原思}等人为例:\lyq{廉洁直方,\lylink{ji2}{疾}乱不治,恶邪不\lylink{kuang1}{匡},虽居乡里,若坐涂炭,命入朝廷,如赴汤火,非其民不使,非其食弗尝,疾乱世而轻死,弗顾兄弟,……是磏仁者也。……山锐则不高,水径则不深,仁磏则其德不厚。}(如赴汤火:形容在所不惜。\lylink{jing4}{径}:指窄小。)} +\item \lylabel{lian2}\lyterm{廉}:品行正直而有失宽容,相当于严于律己也严于律人。其本义为堂屋的地面与墙面并成的直二面角(而非墙角旮旯),所以有方正之意,又因为相夹则狭,所以还有狭窄之意,《说文解字》就直接解释为仄(狭窄)。常用的清正不贪财,是它的后起偏义。这里的解释略与各家不同,他们未能指明狭窄,似乎偏离了“疾”。\lyl{《庄子·徐无鬼》评价\lycharlink{guanzhong}{鲍叔牙}:\lyq{为人洁廉,善士也;其于\lylink{1.8}{不己若者}不\lylink{bi3}{比}之,又一闻人之过,终身不忘。}《史记·屈原贾生列传》评价屈原:\lyq{其志洁,故其称物芳;其行廉,故死而不容。}《史记·郦生陆贾列传》评价平原君朱建:\lyq{刻廉刚直,……行不\lylink{gouhe}{苟合},义不取容。}(刻:严苛。\lylabel{qurong}取容:讨好别人以求安身。)}\lyc{《韩诗外传》第1卷第25章说,\lyq{仁道有四,磏为下}(磏(\lypy{lián}):赤色有棱角的石头,这里通“廉”),并举\lycharlink{boyishuqi}{伯夷}、\lycharlink{boyishuqi}{叔齐}、\lycharlink{yuansi}{原思}等人为例:\lyq{廉洁直方,\lylink{ji2}{疾}乱不治,恶邪不\lylink{kuang1}{匡},虽居乡里,若坐涂炭,命入朝廷,如赴汤火,非其民不使,非其食弗尝,疾乱世而轻死,弗顾兄弟,……是磏仁者也。……山锐则不高,水径则不深,仁磏则其德不厚。}(如赴汤火:形容在所不惜。\lylink{jing4}{径}:指窄小。)1998年香港电影《野兽刑警》中有句善恶分明的台词,可以作为“廉”的注脚:\lyq{这个世界在黑白之间,有一个地方叫灰色的地带。有人灰色的地带好大一片,有人小点,而我黑白之间,只有一条线。}} +% NOTE: 引自《野兽刑警》的台词,见31:57。 \item \lyterm{忿戾}(\lypy{lì}):蛮横易怒。\lylabel{li4a}\lyterm{戾}:乖张,暴虐。 } @@ -6162,7 +6174,7 @@ \chapter{阳货} 子曰:“天何言哉?四时行焉,百物生焉。天何言哉?”} { -\item \lyterm{小子何述焉?}:我们当弟子的怎么记述传承呢?孔子为什么突然不想说话,难以确解,也留下了很多想象空间。子贡在 \lyref{5.13},追思了孔子不言的内容。颜回在 \lyref{9.11},描述了孔子善言的风采。\lyref{15.5} 的“无为而治”,也许是孔子向往的吧。 +\item \lyterm{小子何述焉?}:我们当弟子的怎么记述传承呢?孔子为什么突然不想说话,难以确解,也留下了很多想象空间。子贡在 \lyref{5.13},追思了孔子不言的内容。颜回在 \lyref{9.11},描述了孔子善言的风采。与 \lyref{15.5} 的“无为而治”、\lyref{12.13} 的“无讼而律”相似,“不言而教”也是孔子向往的吧。 } {} @@ -6297,6 +6309,7 @@ \chapter{微子} \lytopics{直,仕隐} \lyblob{\lychar{柳下惠}为士师,三黜。人曰:“子未可以去乎?”曰:“直道而事人,焉往而不三黜?枉道而事人,何必去父母之邦?”} { +\item \lylabel{shishi}\lyterm{士师}:掌管禁令、狱讼之官,位阶为中大夫,是\lylink{sikou}{司寇}的下属,详见《周礼·秋官司寇》。在《周礼》和内容更古的《尚书》中,刑狱之官也泛称为“士”。 \item \lylabel{chu4}\lyterm{黜}(\lypy{chù}):免职或降职,又引申为废除。\lyl{《汉书·武帝纪》:\lyq{孝武初立,卓然罢黜百家,表章《\lylink{liujing}{六经}》。}} \lylabel{liuxiahuiqi}\lyc{ @@ -6312,8 +6325,9 @@ \chapter{微子} 门人从之以为诔,莫能窜一字。君子谓柳下惠妻能光其夫矣。 \end{lyquotepara} -(渎:通“黩”,贪求。油油:通“悠悠”,第一个指众多,第二个指心平气和。裸裎(\lypy{chéng}):裸体。\lylabel{lei3}诔(\lypy{lěi}):累述死者功德、致哀并定谥号,通常为上对下;这里是家人、弟子之诔,为私谥。\lylabel{kaiti}恺(\lypy{kǎi})悌:和乐平易。厉:通“励”。下世:去世。遐年:长寿。窜:改。)\lylabel{hesheng}《孟子·万章下》评价:\lyq{闻柳下惠之风者,鄙夫宽,薄夫敦。……柳下惠,圣之和者也。}(敦:厚,笃实。) +(渎:通“黩”,贪求。\lylabel{youyou}油油:通“悠悠”,第一个指广大众多,与 \lyref{18.6} 的\lylink{taotao}{滔滔}意蕴相近,第二个指心态安适。裸裎(\lypy{chéng}):裸体。\lylabel{lei3}诔(\lypy{lěi}):累述死者功德、致哀并定谥号,通常为上对下;这里是家人、弟子之诔,为私谥。\lylabel{kaiti}恺(\lypy{kǎi})悌:和乐平易。厉:通“励”。下世:去世。遐年:长寿。窜:改。) } +\item \lyterm{父母之邦}:祖国,故土。英语也说fatherland、motherland,与此相通。 } {} @@ -6321,7 +6335,7 @@ \chapter{微子} \lytopics{君臣,仕隐,孔子自评} \lyblob{\lychar{齐景公}待孔子曰:“若\lychar{季氏},则吾不能。”以\lychar{季}、\lychar{孟}之间待之。曰:“吾老矣,不能用也。”孔子行。} { -\item 前面的\lyterm{待孔子曰},像是与大臣商议将给孔子的待遇。后面的\lyterm{曰},像是过了一段时间之后,重新自我认识的话。 +\item 前面的\lyterm{待孔子曰},也许是和大臣们商议给孔子的待遇。后面的\lyterm{曰},也许是过了一段时间之后,重新自我认识的话。 \item \lyterm{若季氏,则吾不能}:指齐景公无法以鲁君对季氏的同等规格来任用孔子。\lyterm{季、孟之间}是介于季氏和孟氏的待遇,虽非专听专信,仍然很隆重。可后来有齐国大夫忌害孔子,孔子告诉景公,景公爱莫能助,可能也自愧无法达到孔子的期望,才会发出\lyterm{吾老矣,不能用也}的慨叹,事见《史记·孔子世家》。\lyc{清代崔述认为:\lyq{景公是时年仅四五十岁,其后复在位二十余年,岁会诸侯,赏战士,与晋争霸,亦不当云“老不能用”也。}但景公既非励精图治之君,又无法预知后事,这应是一时一地的心境。} % TODO: 源流;当时孔子多少岁,景公何以称老?是否推诿? } @@ -6342,9 +6356,9 @@ \chapter{微子} \lytopics{人评孔子,仕隐} \lyblob{楚狂接舆歌而过孔子曰:“凤兮,凤兮!何德之衰?往者不可谏,来者犹可追。已而,已而,今之从政者殆而!”孔子下,欲与之言。趋而辟之,不得与之言。} { -\item \lylabel{jieyu}\lyterm{楚狂接舆}:楚国一位佯狂避世的隐士,因为不知道他的真名,所以根据他走近过孔子的车乘这件事,给他取了\lyterm{接舆}的代名。 +\item \lylabel{jieyu}\lyterm{楚狂接舆}:楚国一位佯狂避世的隐士,因为不知道他的真名,所以根据他走近过孔子的车乘这件事,给他取了\lyterm{接舆}的代称。 \item \lyterm{凤}:喻指孔子。有匡时济世之才而不得其用,故称\lyterm{德衰},既含惋惜,又微讽孔子碌碌奔忙,不如避世保身。% TODO: 源流,说老子的龙。比较异同:神龙见首不见尾,凤凰九招。 -\item \lyterm{追}:补救,指用今后的恰当行为弥补过去犯下的错误。 +\item \lyterm{追}:补救,指用今后的正确行为弥补过去的谬误。 \item \lyterm{已\lylink{er2}{而}}:罢了吧,算了吧。 } {} @@ -6359,7 +6373,7 @@ \chapter{微子} 子路行以告,夫子怃然曰:“鸟兽不可与同群,吾非斯人之徒与而谁与?天下有道,丘不与易也。”} { -\item \lylabel{changjujieni}\lyterm{长沮(\lypy{jù})、桀(\lypy{jié})溺}:两位姓名不详的隐士,因为他们个子高大、正满身泥水在田里干活,所以给他们起了这两个代名。当时的场景应该是孔子乘车来到大河边上,希望找渡船过河,看到了在旁边耕作的这两位隐士。\lyterm{沮}:潮湿。\lyterm{桀}:通“杰”,高大。\lyterm{溺}:陷于水中。 +\item \lylabel{changjujieni}\lyterm{长沮(\lypy{jù})、桀(\lypy{jié})溺}:两位姓名不详的隐士,因为他们个子高大、正满身泥水在田里干活,所以给他们起了这两个代称。当时的场景应该是孔子乘车来到大河边上,希望找渡船过河,看到了在旁边耕作的这两位隐士。\lyterm{沮}:潮湿。\lyterm{桀}:通“杰”,高大。\lyterm{溺}:陷于水中。 \item \lyterm{耦}(\lypy{ǒu}):两人并肩协力耕田。耦耕的形式未有定论,一说是使用一种双人配合的犁具。春秋末年已有\lylink{liniu}{耕牛},他们仍用传统的手工生产方式。 @@ -6403,7 +6417,7 @@ \chapter{微子} \item \lyterm{大伦}:指\lylink{junchenfuzi}{君臣父子}的正统关系。\lylabel{lun2}\lyterm{伦}:尊卑长幼的次序关系,泛指道理,义理。\lyl{现代汉语也常用的“天伦”,就是父子、兄弟这样天然形成的亲属关系。}\lyc{《礼记·礼器》:\lyq{天地之祭,宗庙之事,父子之道,君臣之义,伦也。}} \end{lyblobitemize} -\lyc{《困学纪闻》认为,\lycharlink{changjujieni}{长沮、桀溺}与荷蓧丈人的言行,虽未合乎\lylink{zhongyong}{中庸}之道,但也只有孔子这样的圣人有资格评议:\lyq{斯人清风远韵,如鸾鹄之高翔、玉雪之不污,视世俗徇利亡耻、饕荣苟得者,犹腐鼠粪壤也。小人无忌惮,自以为中庸,而逸民清士乃在讥评之列,学者其审诸!}(鸾(\lypy{luán}):凤凰一类的五彩神鸟。鹄(\lypy{hú}):天鹅。徇(\lypy{xùn}):谋求。饕(\lypy{tāo}):极贪。腐鼠、粪壤:比喻污秽低贱之物,出自《庄子·秋水》、《楚辞·离骚》。)} +\lyc{《困学纪闻》认为,\lycharlink{changjujieni}{长沮、桀溺}与荷蓧丈人的言行,虽未合乎\lylink{zhongyong}{中庸}之道,但也只有孔子这样的圣人有资格评议:\lyq{斯人清风远韵,如鸾鹄之高翔、玉雪之不污,视世俗徇利亡耻、饕荣苟得者,犹腐鼠粪壤也。小人无忌惮,自以为中庸,而\lylink{yimina}{逸民}清士乃在讥评之列,学者其审诸!}(鸾(\lypy{luán}):凤凰一类的五彩神鸟。鹄(\lypy{hú}):天鹅。徇(\lypy{xùn}):谋求。饕(\lypy{tāo}):极贪。腐鼠、粪壤:比喻污秽低贱之物,出自《庄子·秋水》、《楚辞·离骚》。)} } {} @@ -6419,7 +6433,7 @@ \chapter{微子} “我则异于是:无可无不可。”} { -\item \lylabel{yimina}\lyterm{逸民}:又作“佚民”,避世隐居的人,也特指灭国后的遗老遗少。\lyterm{逸}:本义为逃跑,引申为隐遁。\lyl{北宋周敦颐《爱莲说》:\lyq{予谓菊,花之隐逸者也。}} +\item \lylabel{yimina}\lyterm{逸民}:又作“佚民”,避世隐居的人,也特指灭国后的遗老遗少。\lyterm{逸}:本义为逃跑,引申为隐遁。\lyl{北宋周敦颐《爱莲说》:\lyq{予谓菊,花之隐逸者也。}}\lyc{《新元史·隐逸传》认为,\lyq{孔子称为逸民者七人}以后,\lyq{列于隐逸者,其人有二:惓惓故国,不仕新朝,自附于夷、齐者也;穷居伏处,修天爵而不受人爵,合于蛊上九之义者也。}(惓惓(\lypy{quán}):念念不忘。天爵、人爵:《孟子·告子上》:\lyq{仁义忠信,乐善不倦,此天爵也;公卿大夫,此人爵也。}蛊(\lypy{gǔ})上九:《周易·蛊》卦上九爻:\lyq{不\lylink{shi4f}{事}王侯,高尚\lylink{qi2}{其}事。})} \item \lyterm{虞仲}、\lyterm{夷逸}、\lyterm{朱张},事迹均不详。《礼记·杂记下》提到过\lyterm{少连}:\lyq{孔子曰:“少连、大连善居丧,三日不怠,三月不解,\lylink{ji1}{期}悲哀,三年忧。\lylink{yidihuaxia}{东夷}之子也。”} \item \lyterm{言\lylink{zhong4}{中}\lylink{lun2}{伦},行中虑}:说话符合伦理规范,行为经过深思熟虑。柳下惠的事迹见 \lyref{18.2}。 \item \lyterm{放言}:指不议论世事。现代汉语的“放言”则指放纵言论。\lyterm{放}:舍弃,废置。这是古注比较一致的解释,也有今注本解释为肆意狂言,结合上下文看似乎不妥。\lyc{《史记·晋世家》载,\lycharlink{jinwengong}{晋文公}继位后遍赏功臣,一直随他流亡、又有割股解饥之恩的介子推耻于言禄,禄亦不及。子推将要隐居深山,母亲说应使文公知其不公,他回答:\lyq{“言,身之\lylink{wen2}{文}也。身欲隐,安用文之?文之,是求显也。”}至死不见文公。} @@ -6427,7 +6441,8 @@ \chapter{微子} \item \lyterm{无可无不可}:这是孔子说自己能够自如应对各种处境。\lyc{\lyref{4.10} 的\lyq{无适无莫}。} % NOTE: 《孟子·公孙丑上》:\lyq{可以仕则仕,可以止则止,可以久则久,可以速则速:孔子也。}似乎过誉。 -现代汉语的“无可无不可”指人没有坚定不移的主张倾向,容易相处、影响、利用,贬义用法相当于英语的pushover。 % NOTE: pushover, n. One that is easy to persuade, influence, or defeat. +现代汉语的“无可无不可”指人没有坚定不移的主张倾向,容易相处、影响、或利用,贬义用法相当于英语的pushover。 +% NOTE: pushover, n. One that is easy to persuade, influence, or defeat. } {} @@ -6458,7 +6473,7 @@ \chapter{微子} 不过鲁公守礼有余进取不足,他身上也反映了鲁国的传统面貌。\lyq{鲁公伯禽之初受封之鲁,三年而后报政周公。周公曰:“何迟也?”伯禽曰:“变其俗,革其礼,丧三年然后除之,故迟。”\lycharlink{jiangtaigong}{太公}亦封于齐,五月而报政周公。周公曰:“何疾也?”曰:“吾简其君臣礼,从其俗为也。”及后闻伯禽报政迟,乃叹曰:“呜呼,鲁后世其\lylink{nanmian}{北面}事齐矣!大政不简不易,民不有近;平易近民,民必归之。”} } \item \lyterm{不施其亲}:不怠慢他的亲戚。\lyterm{施}:通“弛”,松懈,引申为疏远,忘弃。\lyc{\lyref{8.2}} -\item \lyterm{怨乎不\lylink{yi3}{以}}:抱怨不任用(他们)。 +\item \lyterm{\lylink{yuan4b}{怨}乎不\lylink{yi3}{以}}:抱怨不任用(他们)。 } {} @@ -6658,7 +6673,7 @@ \chapter{子张} \begin{lyblobitemize} \item \lyterm{阳肤}:曾子的弟子。\lyterm{问于曾子}的主语是阳肤。 \item \lyterm{民散}(\lypy{sàn}):指民心涣散。\lyc{\lyref{2.3} \lyref{15.33}} -\item \lyterm{得其情}:指查知案情真相,可以判罪了。\lylabel{qing2}\lyterm{情}:实际情况,真情实感。\lyl{《史记·高祖本纪》:\lyq{列侯诸将无敢隐朕,皆言其情:吾所以有天下者何?项氏之所以失天下者何?}} +\item \lyterm{得其情}:指查知案情真相,可以判罪了。\lyterm{\lylink{qing2}{情}}:真实情况,真情实感。\lyl{《史记·高祖本纪》:\lyq{列侯诸将无敢隐朕,皆言其情:吾所以有天下者何?项氏之所以失天下者何?}} \end{lyblobitemize} \lyc{\lyref{12.13}。《孔丛子·刑论》:\lyq{《\lylink{shangshu}{书}》曰:“哀敬\lylink{zheyu}{折狱}。”仲弓问曰:“何谓也?”孔子曰:“古之\lylink{tingsong}{听讼}者,察贫贱,哀孤独及\lylink{guan1a}{鳏}寡老弱不肖而无告者,虽得其情,必哀\lylink{jin1a}{矜}之。死者不可生,断者不可属。”}(所引句出自《尚书·周书·吕刑》。属(\lypy{zhǔ}):连,接续。)民生多艰,就像安徒生童话《海蟒》中,一条小鱼在深海遇上了可怕的巨鲸,只有哀求:\lyq{请不要把我吞下去,我连味儿都没有,因为我是这样小,但是我觉得活着是多么愉快啊!}(\lyqe{Don't swallow me, I am not even a taste, I am so little, and it is a great pleasure to me to be alive!})(叶君健中译,W. A. Craigie与J. K. Craigie英译。)} % NOTE: 这句引语与《海蟒》的主旨关系不大,但刚好道出了社会底层的心声——他们像玩具一样被摆布,受利用,一旦出事,却往往最遭罪。于无声处听惊雷,正是安徒生童话的独特魅力。 diff --git a/buildaboly.py b/buildaboly.py index 6689153..4e886e4 100644 --- a/buildaboly.py +++ b/buildaboly.py @@ -1,63 +1,65 @@ -# coding: utf-8 - -from __future__ import unicode_literals, print_function -import logging -import os -import subprocess -import sys - -import validate - - -def main(): - BUILD_CMD = r'xelatex "\newcommand\buildnoaboly{%d} \newcommand{\lycommitno}{%s} \input{aboly.tex}"' - COMMITNO_CMD = r'git rev-parse HEAD' - BUILDNO_FILE = 'buildnoaboly.txt' # shabby toy of my own; not included in the GitHub project - LOG_FILE = 'abolylog.txt' - - logging.basicConfig( - format='【%(asctime)s - %(levelname)s】%(message)s', - filename=LOG_FILE, - filemode='w', # or 'a' - level=logging.INFO) - log = logging.getLogger() - log.addHandler(logging.StreamHandler()) # log to file and stderr - - for f in ('autobody.py', 'autocharacters.py', 'autotopics.py'): - if subprocess.call([sys.executable, f]) != 0: - log.error('Failed to run %s', f) - return 1 - - for validator in validate.validators: - if not validator(log): - log.error('Failed validator %s', validator.__name__) - return 1 - - buildno = 0 - use_buildno_file = os.path.isfile(BUILDNO_FILE) - if use_buildno_file: - try: - with open(BUILDNO_FILE) as fin: - buildno = int(fin.read()) + 1 - except Exception: - log.warning('No build number') - use_buildno_file = False - try: - commitno = subprocess.check_output(COMMITNO_CMD).strip().decode('ascii') - except subprocess.CalledProcessError: - log.warning('No commit number') - commitno = 0 - r = subprocess.call(BUILD_CMD % (buildno, commitno)) - if r != 0: - log.error('Failed to build aboly with error code %d', r) - elif use_buildno_file: - with open(BUILDNO_FILE, 'w') as fout: - fout.write(str(buildno)) - logging.shutdown() - if os.path.isfile(LOG_FILE) and os.stat(LOG_FILE).st_size != 0: - print('Check your log file:', LOG_FILE) - return r - - -if __name__ == '__main__': - sys.exit(main()) +#!/usr/bin/env python3 +# coding: utf-8 + +from __future__ import unicode_literals, print_function +import logging +import os +import subprocess +import sys + +import validate + + +def main(): + BUILD_CMD = ['xelatex', r'\newcommand\buildnoaboly{%d} \newcommand{\lycommitno}{%s} \input{aboly.tex}'] + COMMITNO_CMD = ['git', 'rev-parse', 'HEAD'] + BUILDNO_FILE = 'buildnoaboly.txt' # shabby toy of my own; not included in the GitHub project + LOG_FILE = 'abolylog.txt' + + logging.basicConfig( + format='【%(asctime)s - %(levelname)s】%(message)s', + filename=LOG_FILE, + filemode='w', # or 'a' + level=logging.INFO) + log = logging.getLogger() + log.addHandler(logging.StreamHandler()) # log to file and stderr + + for f in ('autobody.py', 'autocharacters.py', 'autotopics.py'): + if subprocess.call([sys.executable, f]) != 0: + log.error('Failed to run %s', f) + return 1 + + for validator in validate.validators: + if not validator(log): + log.error('Failed validator %s', validator.__name__) + return 1 + + buildno = 0 + use_buildno_file = os.path.isfile(BUILDNO_FILE) + if use_buildno_file: + try: + with open(BUILDNO_FILE) as fin: + buildno = int(fin.read()) + 1 + except Exception: + log.warning('No build number') + use_buildno_file = False + try: + commitno = subprocess.check_output(COMMITNO_CMD).strip().decode('ascii') + except subprocess.CalledProcessError: + log.warning('No commit number') + commitno = 0 + BUILD_CMD[1] = BUILD_CMD[1] % (buildno, commitno) + r = subprocess.call(BUILD_CMD) + if r != 0: + log.error('Failed to build aboly with error code %d', r) + elif use_buildno_file: + with open(BUILDNO_FILE, 'w') as fout: + fout.write(str(buildno)) + logging.shutdown() + if os.path.isfile(LOG_FILE) and os.stat(LOG_FILE).st_size != 0: + print('Check your log file:', LOG_FILE) + return r + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/buildly.py b/buildly.py index 353fbad..04e2723 100644 --- a/buildly.py +++ b/buildly.py @@ -1,38 +1,40 @@ -# coding: utf-8 - -from __future__ import unicode_literals, print_function -import os -import subprocess -import sys - - -def main(): - BUILD_CMD = r'xelatex "\newcommand{\buildnoly}{%d} \newcommand{\lycommitno}{%s} \input{ly.tex}"' - COMMITNO_CMD = r'git rev-parse HEAD' - BUILDNO_FILE = 'buildnoly.txt' # shabby toy of my own; not included in the GitHub project - - if subprocess.call([sys.executable, 'autolybody.py']) != 0: - print("Failed to run autolybody.py", file=sys.stderr) - return 1 - - buildno = 0 - use_buildno_file = os.path.isfile(BUILDNO_FILE) - if use_buildno_file: - try: - with open(BUILDNO_FILE) as fin: - buildno = int(fin.read()) + 1 - except Exception: - use_buildno_file = False - try: - commitno = subprocess.check_output(COMMITNO_CMD).strip().decode('ascii') - except subprocess.CalledProcessError: - commitno = 0 - r = subprocess.call(BUILD_CMD % (buildno, commitno)) - if r == 0 and use_buildno_file: - with open(BUILDNO_FILE, 'w') as fout: - fout.write(str(buildno)) - return r - - -if __name__ == '__main__': - sys.exit(main()) +#!/usr/bin/env python3 +# coding: utf-8 + +from __future__ import unicode_literals, print_function +import os +import subprocess +import sys + + +def main(): + BUILD_CMD = ['xelatex', r'\newcommand{\buildnoly}{%d} \newcommand{\lycommitno}{%s} \input{ly.tex}'] + COMMITNO_CMD = ['git', 'rev-parse', 'HEAD'] + BUILDNO_FILE = 'buildnoly.txt' # shabby toy of my own; not included in the GitHub project + + if subprocess.call([sys.executable, 'autolybody.py']) != 0: + print("Failed to run autolybody.py", file=sys.stderr) + return 1 + + buildno = 0 + use_buildno_file = os.path.isfile(BUILDNO_FILE) + if use_buildno_file: + try: + with open(BUILDNO_FILE) as fin: + buildno = int(fin.read()) + 1 + except Exception: + use_buildno_file = False + try: + commitno = subprocess.check_output(COMMITNO_CMD).strip().decode('ascii') + except subprocess.CalledProcessError: + commitno = 0 + BUILD_CMD[1] = BUILD_CMD[1] % (buildno, commitno) + r = subprocess.call(BUILD_CMD) + if r == 0 and use_buildno_file: + with open(BUILDNO_FILE, 'w') as fout: + fout.write(str(buildno)) + return r + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/characters.tex b/characters.tex index 9d2a99a..a1a4a6d 100644 --- a/characters.tex +++ b/characters.tex @@ -25,7 +25,7 @@ \chapter*{人\quad 物\quad 表} \lycharname{伯牛},\lycharname{冉伯牛}:冉耕,字伯牛,鲁国人,少孔子7岁,\lylink{11.3}{孔门十哲}之一,患病早逝。% TODO: 定陶三冉? \lylabel{fanxu} -\lycharname{樊须},\lycharname{樊迟}:樊须,字子迟,鲁国人,少孔子46岁。在前484年春的\lylink{jiquzhizhan}{稷曲之战}中,\lycharlink{ranqiu}{冉求}统领鲁国左路军,樊迟担任他的车右武士,建议冉求反复申明号令再冲锋,果然士气大振,赢得了胜利。他是孔子晚年返鲁后收取的学生。 +\lycharname{樊须},\lycharname{樊迟}:樊须,字子迟,鲁国人,少孔子46岁,是孔子晚年返鲁后收取的学生。在前484年春的\lylink{jiquzhizhan}{稷曲之战}中,\lycharlink{ranqiu}{冉求}统领鲁国左路军,樊迟担任他的车右武士,建议冉求反复申明号令再冲锋,果然士气大振,赢得了胜利。樊迟墓在今山东省济宁市鱼台县。 % NOTE: 从《孔子家语》及杨伯峻说,非少36岁,史记误;见《左传·哀公十一年》:\lyq{须也弱}。 \lylabel{gongboliao} @@ -36,19 +36,19 @@ \chapter*{人\quad 物\quad 表} % NOTE: 《檀弓上》:\lyq{孔子之丧,公西赤为志焉:……}“志”,钱玄解作主持操办,杨天宇解作墓志铭,似均不确。主持者应为子贡。% TODO: “设计装饰”搭配不顺。 \lylabel{gongyechang} -\lycharname{公冶长}(\lypy{cháng}):字子长,鲁国人。传说他懂鸟语,\lyq{曾读百鸟之书,能闻众鸟之音}(《公冶长听鸟语纲常》),因此蒙冤入狱,见皇侃《论语义疏》引文:\lyq{主问冶长何以杀人,冶长曰:“解鸟语,不杀人。”主曰:“当视之。若必解鸟语,便相放也,若不解,当令偿死。”驻冶长在狱六十日……}这虽然离奇,但历来广为人知,成为典故使用,如白居易《池鹤八绝句》诗序:\lyq{诸禽似有所诮,鹤亦时复一鸣。予非冶长,不通其意。} +\lycharname{公冶长}(\lypy{cháng}):字子长,鲁国人。传说他懂鸟语,\lyq{曾读百鸟之书,能闻众鸟之音}(《公冶长听鸟语纲常》),因此蒙冤入狱,见皇侃《论语义疏》引文:\lyq{主问冶长何以杀人,冶长曰:“解鸟语,不杀人。”主曰:“当视之。若必解鸟语,便相放也,若不解,当令偿死。”驻冶长在狱六十日……}这虽然离奇,但历来广为人知,成为典故使用,如白居易《池鹤八绝句》诗序:\lyq{诸禽似有所诮,鹤亦时复一鸣。予非冶长,不通其意。}公冶长墓在今山东省诸城市贾悦镇。 \lylabel{lao} \lycharname{牢}:《论语》中身份最隐秘的弟子,据《孔子家语》王肃序:孔子\lyq{弟子有琴张,一名牢,字子开,亦字张,卫人也},后世多认为是王肃的伪撰。 \lylabel{minziqian} -\lycharname{闵子骞}(\lypy{qiān}),\lycharname{闵子}:闵损,字子骞,鲁国人,少孔子15岁,\lylink{11.3}{孔门十哲}之一。他是元代编录的童蒙读物《二十四孝》第4个故事“\lylink{danyishunmu}{单衣顺母}”的主角。 +\lycharname{闵子骞}(\lypy{qiān}),\lycharname{闵子}:闵损,字子骞,鲁国人,少孔子15岁,\lylink{11.3}{孔门十哲}之一。他是元代编录的童蒙读物《二十四孝》第4个故事“\lylink{danyishunmu}{单衣顺母}”(又称“鞭打芦花”)的主角。今山东省济南市孝文化博物馆内及河南省濮阳市范县,均有闵子骞墓。 \lylabel{nangongkuo} \lycharname{南宫适}(\lypy{kuò}),\lycharname{南容}:字子容,鲁国人,孔子的\lylink{5.2}{侄女婿}。《孔子家语·弟子行》中,\lycharlink{zigong}{子贡}形容他\lyq{独居思仁,公言言义。} \lylabel{qidiaokai} -\lycharname{漆雕开}:字子若,蔡国人,少孔子11岁,是孔子之后的\lylink{zizhang}{八儒}之一。《孔子家语·七十二弟子解》说他\lyq{习《\lylink{shangshu}{尚书}》,不乐仕。}《韩非子·显学》说他方正刚直,\lyq{不色挠,不目逃,行曲则违于臧获,行直则怒于诸侯,世主以为\lylink{lian2}{廉}而礼之。}(挠:屈。目逃:避视。违:避。臧获:奴婢的贱称,骂奴为臧,骂婢为获。) +\lycharname{漆雕开}:字子若,蔡国人,少孔子11岁,是孔子之后的\lylink{zizhang}{八儒}之一。《孔子家语·七十二弟子解》说他\lyq{习《\lylink{shangshu}{尚书}》,不乐仕。}《韩非子·显学》说他方正刚直,\lyq{不色挠,不目逃,行曲则违于臧获,行直则怒于诸侯,世主以为\lylink{lian2}{廉}而礼之。}(挠:屈。目逃:避视。违:避。臧获:奴婢的贱称,骂奴为臧,骂婢为获。)漆雕开墓在今河南省驻马店市上蔡县。 \lylabel{ranqiu} \lycharname{冉求},\lycharname{冉有},\lycharname{冉子},\lycharname{求}:冉求,字子有,鲁国人,少孔子29岁,\lylink{11.3}{孔门十哲}之一。他多才多艺,精明务实,曾跟随孔子周游,后来成为\lycharlink{jikangzi}{季康子}的得力家臣,不久孔子就被迎接返鲁了。直到前472年(《左传·哀公二十三年》),还有他奉季康子之命赴宋国吊唁的记录。 @@ -60,69 +60,70 @@ \chapter*{人\quad 物\quad 表} \lycharname{司马牛}:司马耕,向氏,字子牛,宋国人,是\lycharlink{huantui}{桓魋}的弟弟,因为桓魋任宋国司马,故又以司马为氏。《仲尼弟子列传》说他\lyq{多言而躁},可能是根据 \lyref{12.3} 的推想。桓魋叛乱失败后,司马牛退还宋国的封地,辗转于齐、吴、宋,最终死在鲁国城外。 \lylabel{tantaimieming} -\lycharname{澹(\lypy{tán})台灭明}:字子羽,鲁国\lylink{wucheng}{武城}人,少孔子39岁。《仲尼弟子列传》说他相貌丑陋,曾被孔子认为资质低劣。他退而修行,南游至楚,有弟子三百,讲究\lylink{4.5}{取予}\lylink{qujiu}{去就},名动诸侯。\lyq{孔子闻之曰:“吾以言取人,失之\lycharlink{zaiyu}{宰予};以貌取人,失之子羽。”}《孔子家语·弟子行》中,\lycharlink{zigong}{子贡}形容他\lyq{贵之不喜,贱之不怒,苟利于民矣,廉于行己。}今江苏省苏州市吴中区的澹台湖,据说就是他曾居住之地。 +\lycharname{澹(\lypy{tán})台灭明}:字子羽,鲁国\lylink{wucheng}{武城}人,少孔子39岁。《仲尼弟子列传》说他相貌丑陋,曾被孔子认为资质低劣。他退而修行,南游至楚,有弟子三百,讲究\lylink{4.5}{取予}\lylink{qujiu}{去就},名动诸侯。\lyq{孔子闻之曰:“吾以言取人,失之\lycharlink{zaiyu}{宰予};以貌取人,失之子羽。”}《孔子家语·弟子行》中,\lycharlink{zigong}{子贡}形容他\lyq{贵之不喜,贱之不怒,苟利于民矣,廉于行己。}今江苏省苏州市吴中区的澹台湖,据说是他曾居之地。 % NOTE: 《韩非子·显学》对子羽之貌、宰予之智有相反的说法:\lyq{澹台子羽,君子之容也,仲尼几而取之,与处久而行不称其貌;宰予之辞,雅而文也,仲尼几而取之,与处久而智不充其辩。故孔子曰:“以容取人乎,失之子羽;以言取人乎,失之宰予。”}相当于绣花枕头中看不中用的意思。 \lylabel{wumaqi} -\lycharname{巫马期}:巫马施,字子期,陈国人,少孔子30岁。《吕氏春秋·开春论·察贤》说他也曾任\lylink{shanfu}{单父}宰,并比较了他与\lycharlink{zijian}{子贱}之政的区别:\lyq{宓子贱治单父,弹鸣琴,身不下堂,而单父治。巫马期以星出,以星入,日夜不居,以身亲之,而单父亦治。巫马期问其故于宓子,宓子曰:“我之谓任人,子之谓任力。任力者故劳,任人者故逸。”宓子则君子矣。……巫马期则不然,弊生事精,劳手足,烦教诏,虽治,犹未\lylink{zhi4e}{至}也。}(事:使,用。) +\lycharname{巫马期}:巫马施,字子期,陈国人,少孔子30岁。《吕氏春秋·开春论·察贤》说他也曾任\lylink{shanfu}{单父}宰,并比较了他与\lycharlink{zijian}{子贱}之政的区别:\lyq{宓子贱治单父,弹鸣琴,身不下堂,而单父治。巫马期以星出,以星入,日夜不居,以身亲之,而单父亦治。巫马期问其故于宓子,宓子曰:“我之谓任人,子之谓任力。任力者故劳,任人者故逸。”宓子则君子矣。……巫马期则不然,弊生事精,劳手足,烦教诏,虽治,犹未\lylink{zhi4e}{至}也。}(以星出,以星入:相当于说披星带月早出晚归。事:使,用。) \lylabel{yanhui} \lycharname{颜回},\lycharname{颜渊},\lycharname{回}:颜回(前521年--前481年),字子渊,鲁国人,少孔子30岁,\lylink{11.3}{孔门十哲}之一。他尊师好学,乐仁守礼,最得孔子推重期许,也受到同门的一致敬佩。可惜天不假年,29岁就熬白了头,41岁赍志而殁(早于孔子2年),未能传承光大师学,令孔子伤痛欲绝。《仲尼弟子列传》载,\lyq{孔子\lylink{11.10}{哭之恸},曰:“自吾有回,门人益亲。”}后世尊其为孔门众贤之首,封为\lykw{复圣}。颜回在古籍中常以孔子代言人的形象出现。唐代名臣、书法家颜真卿是他的40世孙。% NOTE: 不是31岁去世。明朝编纂的颜氏家族志《\lylink{6.11}{陋巷}志》说颜回\lyq{娶宋戴氏,生子歆}。 \lylabel{yanlu} -\lycharname{颜路}:颜无繇(\lypy{yóu}),字路,鲁国人,\lycharlink{yanhui}{颜回}之父,少孔子6岁,是孔子的早期弟子。 +\lycharname{颜路}:颜无繇(\lypy{yóu}),字路,鲁国人,\lycharlink{yanhui}{颜回}之父,少孔子6岁,是孔子的早期弟子。颜路、\lycharlink{yanhui}{颜回}及颜氏后裔,安葬于今山东省曲阜市房山东颜林。 \lylabel{yong} -\lycharname{雍},\lycharname{仲弓}:冉雍,字仲弓,鲁国人,少孔子29岁,\lylink{11.3}{孔门十哲}之一。《孔子家语·弟子行》中,\lycharlink{zigong}{子贡}形容他\lyq{在贫如客,使其臣如借,不\lylink{qiannu}{迁怒},不深怨,不录旧罪。}(如客:形容庄重自持,不因贫降志。如借:形容谨慎有礼,不自居其位。录:记住。)如果《荀子》提到的“子弓”就是冉雍(例同仲由字子路,又称季路),那么他在当时很受尊崇,与孔子并列,被称为\lyq{大儒}、\lyq{圣人之不得势者}。% NOTE: 《荀子》之说,见《非相》、《非十二子》、《儒效》篇。 +\lycharname{雍},\lycharname{仲弓}:冉雍,字仲弓,鲁国人,少孔子29岁,\lylink{11.3}{孔门十哲}之一。《孔子家语·弟子行》中,\lycharlink{zigong}{子贡}形容他\lyq{在贫如客,使其臣如借,不\lylink{qiannu}{迁怒},不深怨,不录旧罪。}(如客:形容庄重自持,不因贫降志。如借:形容谨慎有礼,不自居其位。录:记住。)如果《荀子》屡次提到的“子弓”就是冉雍(例如仲由字子路,又称季路;王先谦《荀子集解》认为:\lyq{曰季曰仲,至五十而加以伯仲也}),那么他在战国时很受尊崇,与孔子并称为\lyq{大儒}、\lyq{圣人之不得势者}。冉雍墓遗址在今山东省聊城市冠县。 +% NOTE: 《荀子》之说,见《非相》、《非十二子》、《儒效》篇。 \lylabel{youruo} -\lycharname{有若},\lycharname{有子}:字子有,鲁国人,少孔子33岁,《孔子家语·七十二弟子解》称他强识好古。《孟子·滕文公上》、《仲尼弟子列传》载,孔子去世后,众弟子思慕不已,因为有若的气质见识与孔子相似,\lycharlink{zixia}{子夏}、\lycharlink{ziyou}{子游}、\lycharlink{zizhang}{子张}等就奉他为师,但有若之才德不足以服众,这种偶像崇拜很快被放弃了。《礼记·檀弓下》载,\lycharlink{aigong}{鲁哀公}曾向他问礼,他去世后,继任的鲁悼公(前467年--前437年在位)亲自前来吊唁。他在《论语》中出现的4次,都是传道授业的口吻,除 \lyref{12.9} 外,称谓都是有子,待遇仅次于\lycharlink{zengshen}{曾参}。 +\lycharname{有若},\lycharname{有子}:字子有,鲁国人,少孔子33岁,《孔子家语·七十二弟子解》称他强识好古。《孟子·滕文公上》、《仲尼弟子列传》载,孔子去世后,众弟子思慕不已,因为有若的气质见识与孔子相似,\lycharlink{zixia}{子夏}、\lycharlink{ziyou}{子游}、\lycharlink{zizhang}{子张}等就奉他为师,但有若之才德不足以服众,这种偶像崇拜很快被放弃了。《礼记·檀弓下》载,\lycharlink{aigong}{鲁哀公}曾向他问礼,他去世后,继任的鲁悼公(前467年--前437年在位)亲自前来吊唁。他在《论语》中出现的4次,都是传道授业的口吻,除 \lyref{12.9} 外,称谓都是有子,待遇仅次于\lycharlink{zengshen}{曾参}。有若墓遗址在今山东省曲阜市南泉村。 \lylabel{yuansi} \lycharname{原思},\lycharname{宪}:原宪,字子思,少孔子36岁。《仲尼弟子列传》载,孔子去世后,他在乡间隐居,生活极清贫。\lycharlink{zigong}{子贡}乘驷马高车来探望他,\lyq{宪\lylink{she4}{摄}敝衣冠见子贡。子贡耻之,曰:“夫子岂\lylink{bing4}{病}乎?”原宪曰:“吾闻之:无财者谓之贫,学道而不能行者谓之病。若宪,贫也,非病也。”子贡惭,不怿而去,终身耻其言之过也。}(怿(\lypy{yì}):喜悦,高兴。)《史记·游侠列传》说他\lyq{读书怀独行君子之德,义不\lylink{gouhe}{苟合}当世,当世亦笑之。……终身空室蓬户,褐衣\lylink{shushi}{疏食}不厌。死而已四百余年,而弟子志之不倦。}(褐衣:粗布衣。) % NOTE: 《列传》说原思隐居于卫,《韩诗列传》、《庄子》说于鲁。 \lylabel{zaiyu} -\lycharname{宰予},\lycharname{宰我},\lycharname{予}:字子我,鲁国人,少孔子29岁,\lylink{11.3}{孔门十哲}之一。他口才出众,甚至超过大名鼎鼎的外交家\lycharlink{zigong}{子贡};思维活跃,不仅\lylink{17.21}{质疑}过三年丧期的必要,还怀疑过黄帝的传说,向孔子追问\lycharlink{wudi}{五帝}的由来(《大戴礼记·五帝德》)。可孔子是反感伶牙俐齿的,也不太欣赏出格的想法和行为,《论语》中宰予总是受到敲打。《孟子·公孙丑上》引用他对孔子的评价:\lyq{以予观于夫子,贤于\lycharlink{yao}{尧}、\lycharlink{shun}{舜}远矣},认为他和\lycharlink{zigong}{子贡}、\lycharlink{youruo}{有若}一样\lyq{智足以知圣人}。 +\lycharname{宰予},\lycharname{宰我},\lycharname{予}:字子我,鲁国人,少孔子29岁,\lylink{11.3}{孔门十哲}之一。他口才出众,甚至超过大名鼎鼎的外交家\lycharlink{zigong}{子贡};思维活跃,不仅\lylink{17.21}{质疑}过三年丧期的必要,还怀疑过黄帝的传说,向孔子追问\lycharlink{wudi}{五帝}的由来(《大戴礼记·五帝德》)。可孔子是反感伶牙俐齿的,也不太欣赏出格的想法和行为,《论语》中宰予总是受到敲打。《孟子·公孙丑上》引用他对孔子的评价:\lyq{以予观于夫子,贤于\lycharlink{yao}{尧}、\lycharlink{shun}{舜}远矣},认为他和\lycharlink{zigong}{子贡}、\lycharlink{youruo}{有若}一样\lyq{智足以知圣人}。宰予墓遗址在今山东省曲阜市古城村。 \lylabel{zengxi} -\lycharname{曾皙}(\lypy{xī}),\lycharname{点}:曾点,字皙,\lycharlink{zengshen}{曾参}之父,鲁国\lylink{wucheng}{南武城}人。《孟子·尽心下》说,他属于孔子眼中的\lylink{kuangjuan}{狂士}。他教子严厉,有一次曾参在瓜田里除草,不小心斩到瓜根,他勃然大怒,操起大棒抡在儿子背上。曾参倒地昏厥良久,醒来后连忙好声好气跟父亲陪不是,还问有没有用力过猛伤到身体。事后,孔子批评曾参之孝\lylink{11.16}{过犹不及}:\lyq{(\lycharlink{shun}{舜}事父)小棰则待过,大杖则逃走。……今参事父,委身以待暴怒,殪而不避,既身死而陷父于不义,其不孝孰大焉?}(棰(\lypy{chuí}):棍棒,用作动词。待过:等着接受责罚。殪(\lypy{yì}):死。)事见《孔子家语·六本》、《吕氏春秋·孟夏纪·劝学》。后人不辨因果,附会出“棍棒底下出孝子”的俗语。 +\lycharname{曾皙}(\lypy{xī}),\lycharname{点}:曾点,字皙,\lycharlink{zengshen}{曾参}之父,鲁国\lylink{wucheng}{南武城}人。《孟子·尽心下》说,他属于孔子眼中的\lylink{kuangjuan}{狂士}。他教子严厉,有一次曾参在瓜田里除草,不小心斩到瓜根,他勃然大怒,操起大棒抡在儿子背上。曾参倒地昏厥良久,醒来后连忙好声好气跟父亲陪不是,还问有没有用力过猛伤到身体。事后,孔子批评曾参之孝\lylink{11.16}{过犹不及}:\lyq{〔\lycharlink{shun}{舜}事父〕小棰则待过,大杖则逃走。……今参事父,委身以待暴怒,殪而不避,既身死而陷父于不义,其不孝孰大焉?}(棰(\lypy{chuí}):棍棒,用作动词。待过:等着接受责罚。殪(\lypy{yì}):死。)事见《孔子家语·六本》、《吕氏春秋·孟夏纪·劝学》。后人不辨因果,附会出“棍棒底下出孝子”的俗语。曾皙墓、曾参墓在今山东省临沂市平邑县曾子山。 \lylabel{zengshen} -\lycharname{曾子},\lycharname{参}(传统读\lypy{shēn},也有根据其\lylink{chenghu}{字},认为应读\lypy{cān},即同“骖”):曾参(前505年--前435年),字子\lylink{yu2b}{舆},鲁国\lylink{wucheng}{南武城}人,少孔子46岁。他是孔子之学的主要\lycharlink{zisi}{传承者},后被封为\lykw{宗圣}。曾参事父母至孝,是《二十四孝》第3个故事“啮指心痛”的主角。\lylabel{xiaojing}儒家十三经之一的《孝经》,就采用他与孔子问答孝道的形式,共18章,约1800字,各章多引《诗经》作为总结。曾参笃于礼义,《礼记·檀弓上》载,他病重卧床的那晚,听侍童说自己睡的是\lylink{qingdafushi}{大夫}之席(曾参为\lylink{qingdafushi}{士}),便挣扎着起身要求换席。两个儿子劝他等到天亮再换,他对儿子说:\lyq{尔之爱我也不如彼。君子之爱人也以德,细人之爱人也以姑息。吾何求哉?吾得正而毙焉,斯已矣。}(彼:指侍童。细人:见识短浅的人。姑息:苟安。)换席后还没躺稳当,他就去世了。《大戴礼记》卷四、五共10篇,是他的语录,朱熹称他是《大学》的作者,但并没有给出根据。 +\lycharname{曾子},\lycharname{参}(传统读\lypy{shēn},也有根据其\lylink{chenghu}{字},认为应读\lypy{cān},即同“骖”):曾参(前505年--前435年),字子\lylink{yu2b}{舆},鲁国\lylink{wucheng}{南武城}人,少孔子46岁。诸弟子中,他是孔子之学的主要\lycharlink{zisi}{传承者},后被封为\lykw{宗圣}。曾参事父母至孝,是《二十四孝》第3个故事“啮指心痛”的主角。\lylabel{xiaojing}儒家十三经之一的《孝经》,就采用他与孔子问答孝道的形式,共18章,约1800字,各章多引《诗经》作为总结。曾参笃于礼义,《礼记·檀弓上》载,他病重卧床的那晚,听侍童说自己睡的是\lylink{qingdafushi}{大夫}之席(曾参为\lylink{qingdafushi}{士}),便挣扎着起身要求换席。两个儿子劝他等到天亮再换,他对儿子说:\lyq{尔之爱我也不如彼。君子之爱人也以德,细人之爱人也以姑息。吾何求哉?吾得正而毙焉,斯已矣。}(彼:指侍童。细人:见识短浅的人。姑息:苟安。)换席后还没躺稳当,他就去世了。《大戴礼记》卷四、五共10篇,是他的语录,朱熹称他为《大学》的作者,但没有给出根据。 % NOTE: 朱熹《四书章句》对《礼记·大学》作了改编与划分,“未之有也”及之前的205字称为“经”,之后的1546字称为“传”,认为是解释“经”的,并加说明:\lyq{右经一章,盖孔子之言,而曾子述之;其传十章,则曾子之意而门人记之也。旧本颇有错简,今因程子所定,而更考经文,别为序次如左。} 除了孔子的话以外,《论语》中对他所有的称谓都是曾子。其他弟子虽也有以\lylink{zi3}{子}相称的,包括\lycharlink{youruo}{有若}、\lycharlink{ranqiu}{冉求}和\lycharlink{minziqian}{闵子骞},但都没有这样的待遇。后世多认为曾参和有若的弟子是编订《论语》的主力。% TODO: 1.2有子,1.4曾子,补充入源流。 \lylabel{zigao} -\lycharname{子羔},\lycharname{柴}:高柴,字子羔,少孔子30岁,\lylink{kangshu}{卫国}人,曾任卫国\lylink{shishi}{士师}。《孔子家语·七十二弟子解》说他\lyq{长不过\lylink{chi3}{六尺},状貌甚恶;为人笃孝而有法正。}《礼记·檀弓上》记载他\lyq{执亲之丧也,泣血三年,未尝见齿,君子以为难。}(见齿:笑。)《孔子家语·致思》载,他在\lylink{kuaikuizhiluan}{蒯聩之乱}出逃时,有位曾被他处以断足之刑的守门人连续3次为他指路,并坦言自己受刑罪有应得,对子羔是心悦诚服。孔子得知后赞许道:\lyq{善哉为吏!其用法一也。思仁恕则树德,加严暴则树怨。公以行之,其子羔乎!} +\lycharname{子羔},\lycharname{柴}:高柴,字子羔,少孔子30岁,\lylink{kangshu}{卫国}人,曾任卫国\lylink{shishi}{士师}。《孔子家语·七十二弟子解》说他\lyq{长不过\lylink{chi3}{六尺},状貌甚恶;为人笃孝而有法正。}《礼记·檀弓上》记载他\lyq{执亲之丧也,泣血三年,未尝见齿,君子以为难。}(见齿:笑。)《孔子家语·致思》载,他在\lylink{kuaikuizhiluan}{蒯聩之乱}出逃时,有位曾被他处以断足之刑的守门人连续3次为他指路,并坦言自己受刑罪有应得,对子羔是心悦诚服。孔子得知后赞许道:\lyq{善哉为吏!其用法一也。思仁恕则树德,加严暴则树怨。公以行之,其子羔乎!}子羔墓遗址在今山东省临沂市兰陵县。 \lylabel{zigong} -\lycharname{子贡},\lycharname{赐}:端木赐,字子贡,少孔子31岁,卫国人,\lylink{11.3}{孔门十哲}之一。《仲尼弟子列传》说,\lyq{子贡利口巧辞,孔子常黜其辩。}(黜:贬抑。)他有杰出的外交才干,\lyq{子贡一出,存鲁、乱齐、破吴、强晋而霸越。子贡一使,使势相破,十年之中,五国各有变。}他有卓越的经商本领,善于观察行情低买高卖,家累千金,是同门中的首富。他是孔子最亲密的弟子之一,老师病重时他赶来探望,孔子问:“\lyq{赐,汝来何其晚也?}”孔子去世后,他是丧礼的主持人,众弟子服丧3年,唯有他筑庐冢边,守丧6年。\lyref{19.21} 至 \lyref{19.25} 反映了子贡对老师的拳拳仰慕之心。 +\lycharname{子贡},\lycharname{赐}:端木赐,字子贡,少孔子31岁,卫国人,\lylink{11.3}{孔门十哲}之一。他机敏善言,《仲尼弟子列传》说,\lyq{子贡利口巧辞,孔子常黜其辩。}(黜:贬抑。)他有杰出的外交才干,\lyq{子贡一出,存鲁、乱齐、破吴、强晋而霸越。子贡一使,使势相破,十年之中,五国各有变。}他有卓越的经商本领,善于观察行情低买高卖,家累千金,是同门中的首富。他是孔子最亲密的弟子之一,老师病重时他赶来探望,孔子问:“\lyq{赐,汝来何其晚也?}”孔子去世后,他是丧礼的主持人,众弟子服丧3年,唯有他筑庐冢边,守丧6年。除了孔子本人,\lycharlink{zilu}{子路}和子贡是《论语》中最常出现的人物。\lyref{19.21} 至 \lyref{19.25} 反映了他对老师的拳拳仰慕之心。子贡墓位于他的故乡,今河南省鹤壁市浚(\lypy{xùn})县。 司马迁特别偏爱子贡,《仲尼弟子列传》用了近1/3篇幅描写他游说齐、吴、越、晋之间,使鲁国免遭战乱的功绩。《货殖列传》评价:\lyq{夫使孔子名布扬于天下者,子贡先后之也。此所谓得势而益彰者乎?} \lylabel{zijian} -\lycharname{子贱}:宓(\lypy{mì},旧读\lypy{fú})不齐,字子贱,少孔子30岁,鲁国人,曾任\lylabel{shanfu}鲁国单父(\lypy{shàn fǔ},也作亶父,今山东省菏泽市单县)邑宰。据《吕氏春秋·审应览·具备》,上任之初,他通过隐喻巧妙地获得了鲁君的信任,使单父大治,流传下“掣肘”的典故。《说苑·政理》载,孔子问他何以\lyq{治单父而众说},子贱说自己爱民:\lyq{父其父,子其子,\lylink{xu4c}{恤}诸孤而哀丧纪},孔子认为是小节:\lyq{小民附矣,犹未足也};子贱说自己待人谦恭推诚,孔子认为是中节;子贱说访求到5位能于自己的贤人协理政务,孔子赞叹:\lyq{欲其大者,乃于此在矣。昔者\lycharlink{yao}{尧}、\lycharlink{shun}{舜}清微其身,以听观天下,务来贤人。夫举贤者,百福之宗也,而神明之主也。不齐之所治者小也,不齐所治者大,其与尧、舜继矣。}《史记·滑稽列传》末尾评论:\lyq{\lycharlink{zichan}{子产}治郑,民不能欺;子贱治单父,民不忍欺;西门豹治邺,民不敢欺。三子之才能谁最贤哉?辨治者当能别之。}(\lylabel{ximenbao}西门豹:战国初期魏国邺县(在今河北省邯郸市临漳县西南)县令,破除陋习,引水灌田,\lyq{名闻天下,泽流后世}。)据《颜氏家训·书证》,今文《\lylink{shangshu}{尚书}》的传人秦博士伏生,就是子贱的后人。% TODO: 解释 博士 in 源流。 +\lycharname{子贱}:宓(\lypy{mì},旧读\lypy{fú})不齐,字子贱,少孔子30岁,鲁国人,曾任\lylabel{shanfu}鲁国单父(\lypy{shàn fǔ},也作亶父,今山东省菏泽市单县)邑宰。据《吕氏春秋·审应览·具备》,上任之初,他通过巧妙的隐喻获得了鲁君信任,使单父大治,流传下“掣肘”的典故。《说苑·政理》载,孔子问他何以\lyq{治单父而众说},子贱说自己爱民:\lyq{父其父,子其子,\lylink{xu4c}{恤}诸孤而哀丧纪},孔子认为是小节:\lyq{小民附矣,犹未足也};子贱说自己待人谦恭推诚,孔子认为是中节;子贱说访求到5位能于自己的贤人协理政务,孔子赞叹:\lyq{欲其大者,乃于此在矣。昔者\lycharlink{yao}{尧}、\lycharlink{shun}{舜}清微其身,以听观天下,务来贤人。夫举贤者,百福之宗也,而神明之主也。}《史记·滑稽列传》末尾评论:\lyq{\lycharlink{zichan}{子产}治郑,民不能欺;子贱治单父,民不忍欺;西门豹治邺,民不敢欺。三子之才能谁最贤哉?辨治者当能别之。}(\lylabel{ximenbao}西门豹:战国初期魏国邺县(在今河北省邯郸市临漳县西南)县令,破除陋习,引水灌田,\lyq{名闻天下,泽流后世}。)《颜氏家训·书证》说,今文《\lylink{shangshu}{尚书}》的传人秦博士伏生,就是子贱的后人。子贱墓在今安徽省淮南市寿县。% TODO: 解释 博士 in 源流。 \lylabel{zilu} -\lycharname{子路},\lycharname{季路},\lycharname{仲由},\lycharname{由}:仲由(前542年--前480年),字子路,又称季路,鲁国\lylink{bianyi}{卞邑}人,\lylink{11.3}{孔门十哲}之一,少孔子9岁。除了\lycharlink{yanlu}{颜路}和\lycharlink{boniu}{伯牛}以外,他是《论语》诸弟子中最年长的。子路忠勇直率,长期追随孔子左右,虽常因为思维简单挨孔子的批评,但也只有这个大龄\lylink{13.3}{野小子}最能让老师放松随意吧!子路少时家贫,成年后热心功名,曾任\lycharlink{jihuanzi}{季桓子}的家宰,后来又任卫大夫\lycharlink{kongkui}{孔悝}的\lylabel{puyi}蒲邑(在今河南省长垣县)邑宰。《孔子家语·辩政》说,子路治蒲三年,孔子路过观察民风,三称其善。\lylabel{weiqinfumi}身处富贵之时,他想起故去的父母,\lyq{乃叹曰:“虽欲食藜藿之食,为亲负米,不可得也!”}(藜藿(\lypy{lí huò}):粗劣的饭菜。见《二十四孝》第5个故事“为亲负米”。)前480年(《左传·哀公十五年》),63岁的子路奋勇\lylink{kuaikuizhiluan}{营救}被\lycharlink{weijun}{蒯聩}挟持的主公孔悝,孤身不敌,帽缨(系在下巴上固定帽子的束带)也被击断了。在生命最后一刻,\lyq{子路曰:“君子死,冠不免。”结缨而死。}死且不忘礼,不愧为孔子的学生。 +\lycharname{子路},\lycharname{季路},\lycharname{仲由},\lycharname{由}:仲由(前542年--前480年),字子路,又称季路,鲁国\lylink{bianyi}{卞邑}人,\lylink{11.3}{孔门十哲}之一,少孔子9岁。除了\lycharlink{yanlu}{颜路}和\lycharlink{boniu}{伯牛}以外,他是《论语》诸弟子中最年长的。子路忠勇直率,长期追随孔子左右。虽常因为思维简单挨孔子的批评,但也只有这个大龄\lylink{13.3}{野小子}最能让老师放松随意吧!子路少时家贫,成年后热心功名,曾任\lycharlink{jihuanzi}{季桓子}的家宰,后来又任卫大夫\lycharlink{kongkui}{孔悝}的\lylabel{puyi}蒲邑(在今河南省长垣县)邑宰。《孔子家语·辩政》说,子路治蒲三年,孔子路过观察民风,三称其善。\lylabel{weiqinfumi}身处富贵之时,他想起故去的父母,\lyq{乃叹曰:“虽欲食藜藿之食,为亲负米,不可得也!”}(藜藿(\lypy{lí huò}):粗劣的饭菜。见《二十四孝》第5个故事“为亲负米”。)前480年(《左传·哀公十五年》),63岁的子路奋勇\lylink{kuaikuizhiluan}{营救}被\lycharlink{weijun}{蒯聩}挟持的主公孔悝,孤身不敌,帽缨(系在下巴上固定帽子的束带)也被击断了。在生命最后一刻,\lyq{子路曰:“君子死,冠不免。”结缨而死。}死且不忘礼,不愧为孔子的学生。子路墓祠在今河南省濮阳市。 % NOTE: “为亲负米”事见《说苑·建本》:\lyq{昔者由事二亲之时,常食藜藿之实,而为亲负米百里之外。亲没之后,南游于楚,从车百乘,积粟万钟,累茵而坐,列鼎而食。愿食藜藿、为亲负米之时,不可复得也!} 《礼记·檀弓上》载,孔子正在院子中间恸哭子路,听说其尸体被施以醢(\lypy{hǎi},剁成肉酱)刑的惨状,立刻让把家里的肉酱倒掉。4年之间,\lycharlink{li}{孔鲤}、\lycharlink{yanhui}{颜回}、子路接连亡故,对孔子的打击可想而知,一年后他也去世了。 \lylabel{zixia} -\lycharname{子夏},\lycharname{商}:卜商,字子夏,晋国温邑(今河南省焦作市温县)人,少孔子44岁,\lylink{11.3}{孔门十哲}之一。他家境清贫,笃学精思,敬谨尚贤,《史记·孔子世家》在记述孔子笔削《春秋》时特别说,\lyq{子夏之徒不能赞一辞}(赞:助),可见他在诸弟子中的理论水平很突出。《后汉书·徐防传》引徐防上疏:\lyq{臣闻《诗》《书》《礼》《乐》,定自孔子;发明章句,始于子夏。}(发明:阐述意旨。章句:分章断句解读。)孔子去世后,他到魏国西河(在今山西、陕西黄河交界地带)讲学,魏文侯(前445年--前396年在位)师事之,咨问国政,《礼记·乐记》记有他们关于古乐和新乐的问答。他所创立的西河学派,常被认为是由儒入法的重要环节。子夏晚年因哭子之丧而失明,事见《礼记·檀弓上》。据说今本《\lylink{shijing}{诗经}》由他而传,《春秋公羊传》、《春秋谷梁传》的作者也都是他的学生。 +\lycharname{子夏},\lycharname{商}:卜商,字子夏,晋国温邑(今河南省焦作市温县)人,少孔子44岁,\lylink{11.3}{孔门十哲}之一。他家境清贫,笃学精思,敬谨尚贤,《史记·孔子世家》在记述孔子笔削《春秋》时特别说,\lyq{子夏之徒不能赞一辞}(赞:助),可见他在诸弟子中的理论水平很突出。《后汉书·徐防传》引徐防上疏:\lyq{臣闻《诗》《书》《礼》《乐》,定自孔子;发明章句,始于子夏。}(发明:阐述意旨。章句:分章断句解读。)孔子去世后,他到魏国西河(在今山西、陕西黄河交界地带)讲学,魏文侯(前445年--前396年在位)师事之,咨问国政,《礼记·乐记》有他们关于古乐和新乐的问答。他所创立的西河学派,常被认为是由儒入法的重要环节。子夏晚年因哭子之丧而失明,事见《礼记·檀弓上》。据说今本《\lylink{shijing}{诗经}》由他而传,《春秋公羊传》、《春秋谷梁传》的作者也都是他的学生。子夏墓在今山东省菏泽市。 % NOTE: 由儒入法的重要环节:子夏的弟子李克,有认为就是法家始祖李悝;据信荀子也与子夏之儒颇有渊源。 \lylabel{ziyou} -\lycharname{子游},\lycharname{言游},\lycharname{偃}:言偃,字子游,\lylink{taibo}{吴国}人,少孔子45岁,\lylink{11.3}{孔门十哲}之一。他是孔子知名弟子中唯一的南方人,今江苏省常熟市留有言子墓等遗迹。他的女婿是\lycharlink{zizhang}{子张}的儿子申祥。 +\lycharname{子游},\lycharname{言游},\lycharname{偃}:言偃,字子游,\lylink{taibo}{吴国}人,少孔子45岁,\lylink{11.3}{孔门十哲}之一。他是孔子知名弟子中唯一的南方人,今江苏省常熟市留有言子墓等遗迹。\lycharlink{zizhang}{子张}的儿子申祥是他的女婿。 \lylabel{lijiliyun} 《礼记·礼运》通过子游与孔子问答的形式,描绘了儒家理想中的\lykw{大同}社会:\lyq{大道之行也,天下为公,选贤与能,讲信修睦。故人不独亲其亲,不独子其子;使老有所终,壮有所用,幼有所长,矜寡、孤独、废疾者皆有所养;男有分,女有归。货,恶其弃于地也,不必藏于己;力,恶其不出于身也,不必为己。}(\lylabel{guan1a}矜:通“鳏”(\lypy{guān}),成年男子无妻或丧妻。)接着指出,在\lyq{天下为家}的时代,如能\lyq{礼义以为纪,以正君臣,以笃父子,以睦兄弟,以和夫妇},仍不失为\lykw{小康}。然后重点论述了礼义对于维系社会的价值:\lyq{故欲恶者,心之大端也。人藏其心,不可测度也。美恶皆在其心,不见其色也,欲一以穷之,舍礼何以哉?……故礼义也者,人之大端也,……故唯圣人为知礼之不可以已也。故坏国、丧家、亡人,必先去其礼。} % TODO: 据传孔子云:“吾门有偃,吾道其南”,但不见于《孔子集语》,未知出处。 \lylabel{zizhang} -\lycharname{子张},\lycharname{师},\lycharname{张}:颛(\lypy{zhuān})孙师,字子张,鲁国人,少孔子48岁。《论语》诸弟子中数他最年轻,其次是\lycharlink{zengshen}{曾参}和\lycharlink{fanxu}{樊须}。《韩非子·显学》称,孔子之后儒分八派,“子张之儒”被排在第一位,超过“\lycharlink{zisi}{子思}之儒”,可惜今已不传。他的祖先是和\lycharlink{chenchengzi}{陈公子完}一同逃往齐国的公子颛孙(《左传·庄公二十二年》),后来又到鲁国定居,就以颛孙为氏。传到子张这一代,已经是\lyq{鲁之鄙家}了(《吕氏春秋·尊师》),还做过马贩子(《尸子·劝学》),想必有不为人知的艰辛,但他志高求进,心气很足,使年纪相仿的同门感到敬畏。据《史记·儒林列传》,孔子过世后他去了陈国居住,就是不曾忘怀遥远的血脉吧?他去世时\lycharlink{zengshen}{曾参}正在服母丧,所以是英年早逝(《礼记·檀弓下》)。病重之时,他把儿子召到身旁,像是自言自语道:\lyq{“君子\lylink{yue1a}{曰}终,小人曰死,吾今日其\lylink{shu4a}{庶几}乎?”}(《礼记·檀弓上》。) +\lycharname{子张},\lycharname{师},\lycharname{张}:颛(\lypy{zhuān})孙师,字子张,鲁国人,少孔子48岁。《论语》诸弟子中数他最年轻,其次是\lycharlink{zengshen}{曾参}和\lycharlink{fanxu}{樊须}。《韩非子·显学》称,孔子之后儒分八派,“子张之儒”被排在第一位,超过“\lycharlink{zisi}{子思}之儒”,可惜今已不传。他的祖先是和\lycharlink{chenchengzi}{陈公子完}一同逃往齐国的公子颛孙(《左传·庄公二十二年》),后来又到鲁国定居,就以颛孙为氏。传到子张这一代,已经是\lyq{鲁之鄙家}了(《吕氏春秋·尊师》),还做过马贩子(《尸子·劝学》),想必有不为人知的艰辛,但他志高求进,心气很足,使年纪相仿的同门感到敬畏。据《史记·儒林列传》,孔子过世后他去了陈国居住,就是不曾忘怀遥远的血脉吧?他去世时\lycharlink{zengshen}{曾参}正在服母丧,所以是英年早逝(《礼记·檀弓下》)。病重之时,他把儿子召到身旁,像是自言自语道:\lyq{“君子\lylink{yue1a}{曰}终,小人曰死,吾今日其\lylink{shu4a}{庶几}乎?”}(《礼记·檀弓上》。)子张墓遗址在今安徽省淮北市朔里镇。 % NOTE: 19.15、19.16古注解说不一,多有贬损子张的偏见,或由11.18臆测。既乏史实,当推以情理,“志高求进,心气很足,使年纪相仿的同门感到敬畏”,以解19.15、19.16皆通。 @@ -175,10 +176,10 @@ \chapter*{人\quad 物\quad 表} \lycharname{林放}:鲁国人,事迹不详。% NOTE: 相传林氏为\lycharlink{biganjiziweizi}{比干}后人,今山东省新泰市放城镇为林放故里。 \lylabel{liuxiahui} -\lycharname{柳下惠}(前720年--前621年):展获,字禽,又字季,亦称展禽或柳下季,鲁国大夫,柳下是他的封邑(在今山东省济南市平阴县),惠是他的\lylink{liuxiahuiqi}{私谥}(“柔质慈民曰惠”)。他以正直著称,事迹流传较少,但在《左传》、《国语》、《孟子》中都受到\lylink{hesheng}{推崇}。他是柳姓始祖,典故“坐怀不乱”的主角。 +\lycharname{柳下惠}(前720年--前621年):展获,字禽,又字季,也称展禽或柳下季,鲁国大夫。柳下是他的封邑(在今山东省济南市平阴县),惠是他的\lylink{liuxiahuiqi}{私谥}(“柔质慈民曰惠”)。他以正直达观著称,在《左传》、《国语》、《孟子》等中都受到推崇。如《孟子·万章下》说他\lyq{不羞污君,不辞小官;进不隐贤,必以其道;遗佚而不\lylink{yuan4b}{怨},\lylink{e4b}{厄}\lylink{qiong2}{穷}而不\lylink{min3b}{悯}。与乡人处,\lylink{youyou}{由由}然不忍去也。……故闻柳下惠之风者,鄙夫宽,薄夫敦。}(不羞污君:不以君主不贤明为耻(而辞官避世,离弃父母之邦)。遗佚:指未能入选为官。敦:厚,笃实。)他是柳姓始祖,典故“坐怀不乱”的主角。 \lylabel{menggongchuo} -\lycharname{孟公绰},\lycharname{公绰}:与孔子同时代的鲁国大夫,\lycharlink{mengshi}{孟氏}族人,为人廉静寡欲。《左传·襄公二十五年》(前517年)载,当年春,\lycharlink{cuizhu}{崔杼}率齐军侵入鲁国北疆,襄公向晋国求救。孟公绰发现齐军不像往常那样大肆劫掠,穷尽民力,认为崔杼别有所图:\lyq{崔子将有大志,不在病我,必速归,何患焉?}果然齐军虚张声势了一阵就回去了,同年5月,齐庄公被弑。 +\lycharname{孟公绰},\lycharname{公绰}:与孔子同时代的鲁国大夫,\lycharlink{mengshi}{孟氏}族人,为人廉静寡欲。《左传·襄公二十五年》(前517年)载,当年春,\lycharlink{cuizhu}{崔杼}率齐军侵入鲁国北疆,襄公向晋国求救。孟公绰发现齐军不像往常那样大肆劫掠,穷尽民力,认为崔杼别有所图:\lyq{崔子将有大志,不在\lylink{bing4}{病}我,必速归,何患焉?}果然齐军虚张声势了一阵就回去了,同年5月,齐庄公被弑。 \lylabel{mengshi} \lycharname{孟氏},\lycharname{孟}:即孟孙氏,鲁国\lycharlink{sanhuan}{三桓}之一,是鲁桓公庶长子庆父的后代,已知的最后一代宗主是第11代的\lycharlink{mengjingzi}{孟敬子}。据说孟子也是庆父的后代,但和孟孙氏不同\lylink{zongzhu}{族}。 diff --git a/ly.tex b/ly.tex index 0f63c86..2586c4b 100644 --- a/ly.tex +++ b/ly.tex @@ -7,6 +7,7 @@ skin=enhanced jigsaw, colback=white, colframe=black!42, boxrule=0.5mm, + after skip=0.5em, phantom={\lyblobmark{\thetcbcounter}}, overlay unbroken and first ={ \node[anchor=north east, inner sep=0pt, outer sep=0pt] at ([xshift=-\marginparsep]frame.north west) {\tcbox[boxsep=0pt, left=1.8mm, right=1.8mm, top=1.8mm, bottom=1.8mm, colback=white, colframe=black!42]{\thetcbcounter}}; diff --git a/rawblobs.py b/rawblobs.py index 7eba4b6..838e80f 100644 --- a/rawblobs.py +++ b/rawblobs.py @@ -1,100 +1,100 @@ -# coding: utf-8 - -from __future__ import unicode_literals -import io -import re -import sys -import subprocess - - -__all__ = ['titles', 'rawblobs', 'rawblobs0'] - -titles = None - -# [('1.1', '...'), ...], without titles. -rawblobs = None - -# Chinese characters only, without punctuation marks. -# sum(len(b[1]) for b in rawblobs0) -> 15916 -rawblobs0 = None - - -def init_rawblobs(): - global titles, rawblobs, rawblobs0 - titles = [] - rawblobs = [] - rawblobs0 = [] - INFILE = 'autolybody.tex' - ENCODING = 'utf-8' - lytitle_re = re.compile(r'\\chapter{(.+?)}') - lyblobraw_re = re.compile(r'\\lyblobraw\{(.+?)\}|\\chapter\{', re.S) - - if subprocess.call([sys.executable, 'autolybody.py']) != 0: - raise RuntimeError('Failed to generate %s' % INFILE) - - with io.open(INFILE, encoding=ENCODING) as fin: - content = fin.read() - - for mat in lytitle_re.finditer(content): - titles.append(mat.group(1)) - - chapter = 0 - section = 0 - for mat in lyblobraw_re.finditer(content): - b = mat.group(1) - if b: - section += 1 - rawblobs.append(('%d.%d' % (chapter, section), b)) - else: - chapter += 1 - section = 0 - - # Remove punctuation marks. Boundaries are manually picked. See below. - LOW, HIGH = ord(u'一'), ord(u'龟') - for b in rawblobs: - label, text = b - arr = [] - for c in text: - if LOW <= ord(c) <= HIGH: - arr.append(c) - rawblobs0.append((label, ''.join(arr))) - - -init_rawblobs() - - -# All characters sorted: -# —‘’“”、。《》一七万丈三上下不与专且世丘东两丧中临为主举乃久义之乎乐乘九乞也 -# 习乡书乱予争事二于云互五井亚亟亡亢交亦产亩享亲亵人亿仁仆今仍从仕他仞代令以仪仰仲 -# 任伊伐众优会传伤伦伯似位体何余佚佛作佞佩佾使侃侍侗依侧侮侯便俎保俟信俨俭修俱倍倚 -# 借倦倩倾偃偏偲偷傩僎儒允兄先克免兕党兢入八公六兮共关兴兵其具兹养兼兽内冉再冕军农 -# 冠冢冯冰冶凋几凤凶出击刀分切刑列则刚创利别到前割力劝功加务动助劳勃勇勉勤勿匏北匡 -# 匹区医匿十千升半华卑卒卓南博卞占卫危即卷卿历厉厌厚原厩去参又及友反发叔取受变口古 -# 叩只召可台史右叶司叹各合吉吊同名后君吝否听启吴吾告呜周味呼命和咎咏咨哀哂哉哭唐唯 -# 商善喜喟喭喻嗅嘉器噫四回因困固国图圃圉土圣在圭地均坏坐坚坠坦坫城域堂堪塞墙壤士壮 -# 声处备复夏夕多夜大天太夫夭失夷夺奔奚奡奢奥女奴好如妇妻始姓姜威媚子孔存孙孝孟季孤 -# 学孰孺宁守安宋完宗官定宜宝实审客室宪宫宰害宴家容宽宾宿寄富寒寝察寡寮对寿封射将尊 -# 小少尔尚尝尤尧就尸尹尺尼尽居屏屡履山岁岂崇崔崩巍川州工左巧巫己已巷巽市布帅师希帛 -# 帝带席帷常干平年并幸幼庄应庙府废度庭庶康庸庾廉廋廷开异弃弈弋式弑弓弗弘弟张弥弦归 -# 当彬彭彻彼往征径待徒得徙御循微德徼心必忍志忘忠忧忮念忽忿怀怃怍怒思怡急性怨怪总恂 -# 恐恒恕恭息恶恸悔患悱悲悾情惑惜惟惠惧惮惰愆愈愉意愚愠愤愬愿慈慎慝慢慧憎憾懿戈戎戏 -# 成我戒或战戚戮户戾所手才托执扫扰扶承抑折报拒拖拜择拱持指挚损据授掌探接揖揭摄摈撤 -# 播撰攘改攻放政故敏救教敛敝敢散敬数文斐斗斯新方施旅族无既日旧旨时昆明易昔星春昭是 -# 昼晋晏晨景暇暑暴曰曲更曾月有朋服朔朕望朝期木未末本朱朽杀权杇材杖杞束来松枉析枕林 -# 果枨柏某柔柙柳柴树栖栗校格桀桑桓桴梁梦棁棘棣棺椁植椟楚樊次欲欺歌止正武死殆残殖殡 -# 殷殿毁毅毋母每比氏民气水永求汉汤汶沂沐沛沟没沮河治沽法泛泥泰洁洋洒津洫流浅济浮浴 -# 海浸涂涅润淫深清渊渎温游溺滔滕滥漆澹灌火灭灵灶点烈焉焕焚然熟燕燧爱父片版牖牛牟牡 -# 牢物犁犬犯犹狂狄狎狐独狱狷猛献玄率玉王琏琢瑚瑟瓜瓢甘甚生用甫由申画畏畔畜疏疑疚疾 -# 病白百皆皇皋皙皦皮盈益盍监盖盗盛目直相盼省瞻瞽矜矢矣知矩短石硁磋磨磬磷示礼社祇祝 -# 神祭祷禄禘禹离禽秀私秉科秦称移稷稻稼穆穷空穿突窃窒窥窬立章童竭端笃笑笾等答策筲简 -# 箕算管箪篑类粟粪粮精系素紫絺緅纠红纣约纯纲纳纵绀绁绅细终绎经绘给绚绝绞绤绥继绰维 -# 缁缊缧缭缺罔罕罚罢罪羊美羔羞群羹羽羿翔翕翼老者而耕耦耰耳耻聚聪肆肉肤肥肩肱肸胜胫 -# 能脍脩脯腥臣臧自臭至致臾舆舌舍舜舞舟良色艺节芸苗苟若荆草荏荐荡荣药荷莅莒莞莫获菜 -# 菲萧葬葸蒉蒙蓧蔡蔽薄薛薨藏藻蘧虎虐虑虚虞虽蛮血行衡衣表衰衽袂袍袗被裁裘裨裳襁襄襜 -# 西要覆见观视觉觌角觚言訚誉譬讦讨让讪议讱讲讷论讼证识诈诔试诗诚诛诬语诱诲说诵请诸 -# 诺读谁谄谅谋谌谏谓谤谨谮谲谷豆豚豹貉貊貌贞负贡责贤败货质贪贫贯贰贱贵费贼贾赉赋赏 -# 赐赤赦赵起趋足路践踖踧蹈蹜躁躩身躬軏輗车轻辂辅辍辞辟辨辰辱达迁迂迅过近进远违连迟 -# 迩述迷迹追退送适逆选通逝逞速造逮逸逾遂遇道遗邑邦邪邻郁郑鄙鄹酒酱醯里重野量釜钓钟 -# 钻铎铿错锦长门问闲间闵闻阈阙防阳阴阶阼附际陈陋降陪陵陶陷隅随隐难雅集雉雌雍雎雕雩 -# 雷霸静非面鞟鞠鞭韫韶顺须顾颂颛颜颠风食餲饐饥饩饪饭饮饰饱饿馁馈馑馔首騧马驷驾骄骈 -# 骍骞骥高鬼魋魏鮀鱼鲁鲜鲤鸟鸡鸣麑麻黄黍默黜黻鼓鼗齐齿龟!,:;? +# coding: utf-8 + +from __future__ import unicode_literals +import io +import re +import sys +import subprocess + + +__all__ = ['titles', 'rawblobs', 'rawblobs0'] + +titles = None + +# [('1.1', '...'), ...], without titles. +rawblobs = None + +# Chinese characters only, without punctuation marks. +# sum(len(b[1]) for b in rawblobs0) -> 15916 +rawblobs0 = None + + +def init_rawblobs(): + global titles, rawblobs, rawblobs0 + titles = [] + rawblobs = [] + rawblobs0 = [] + INFILE = 'autolybody.tex' + ENCODING = 'utf-8' + lytitle_re = re.compile(r'\\chapter{(.+?)}') + lyblobraw_re = re.compile(r'\\lyblobraw\{(.+?)\}|\\chapter\{', re.S) + + if subprocess.call([sys.executable, 'autolybody.py']) != 0: + raise RuntimeError('Failed to generate %s' % INFILE) + + with io.open(INFILE, encoding=ENCODING) as fin: + content = fin.read() + + for mat in lytitle_re.finditer(content): + titles.append(mat.group(1)) + + chapter = 0 + section = 0 + for mat in lyblobraw_re.finditer(content): + b = mat.group(1) + if b: + section += 1 + rawblobs.append(('%d.%d' % (chapter, section), b)) + else: + chapter += 1 + section = 0 + + # Remove punctuation marks. Boundaries are manually picked. See below. + LOW, HIGH = ord(u'一'), ord(u'龟') + for b in rawblobs: + label, text = b + arr = [] + for c in text: + if LOW <= ord(c) <= HIGH: + arr.append(c) + rawblobs0.append((label, ''.join(arr))) + + +init_rawblobs() + + +# All characters sorted: +# —‘’“”、。《》一七万丈三上下不与专且世丘东两丧中临为主举乃久义之乎乐乘九乞也 +# 习乡书乱予争事二于云互五井亚亟亡亢交亦产亩享亲亵人亿仁仆今仍从仕他仞代令以仪仰仲 +# 任伊伐众优会传伤伦伯似位体何余佚佛作佞佩佾使侃侍侗依侧侮侯便俎保俟信俨俭修俱倍倚 +# 借倦倩倾偃偏偲偷傩僎儒允兄先克免兕党兢入八公六兮共关兴兵其具兹养兼兽内冉再冕军农 +# 冠冢冯冰冶凋几凤凶出击刀分切刑列则刚创利别到前割力劝功加务动助劳勃勇勉勤勿匏北匡 +# 匹区医匿十千升半华卑卒卓南博卞占卫危即卷卿历厉厌厚原厩去参又及友反发叔取受变口古 +# 叩只召可台史右叶司叹各合吉吊同名后君吝否听启吴吾告呜周味呼命和咎咏咨哀哂哉哭唐唯 +# 商善喜喟喭喻嗅嘉器噫四回因困固国图圃圉土圣在圭地均坏坐坚坠坦坫城域堂堪塞墙壤士壮 +# 声处备复夏夕多夜大天太夫夭失夷夺奔奚奡奢奥女奴好如妇妻始姓姜威媚子孔存孙孝孟季孤 +# 学孰孺宁守安宋完宗官定宜宝实审客室宪宫宰害宴家容宽宾宿寄富寒寝察寡寮对寿封射将尊 +# 小少尔尚尝尤尧就尸尹尺尼尽居屏屡履山岁岂崇崔崩巍川州工左巧巫己已巷巽市布帅师希帛 +# 帝带席帷常干平年并幸幼庄应庙府废度庭庶康庸庾廉廋廷开异弃弈弋式弑弓弗弘弟张弥弦归 +# 当彬彭彻彼往征径待徒得徙御循微德徼心必忍志忘忠忧忮念忽忿怀怃怍怒思怡急性怨怪总恂 +# 恐恒恕恭息恶恸悔患悱悲悾情惑惜惟惠惧惮惰愆愈愉意愚愠愤愬愿慈慎慝慢慧憎憾懿戈戎戏 +# 成我戒或战戚戮户戾所手才托执扫扰扶承抑折报拒拖拜择拱持指挚损据授掌探接揖揭摄摈撤 +# 播撰攘改攻放政故敏救教敛敝敢散敬数文斐斗斯新方施旅族无既日旧旨时昆明易昔星春昭是 +# 昼晋晏晨景暇暑暴曰曲更曾月有朋服朔朕望朝期木未末本朱朽杀权杇材杖杞束来松枉析枕林 +# 果枨柏某柔柙柳柴树栖栗校格桀桑桓桴梁梦棁棘棣棺椁植椟楚樊次欲欺歌止正武死殆残殖殡 +# 殷殿毁毅毋母每比氏民气水永求汉汤汶沂沐沛沟没沮河治沽法泛泥泰洁洋洒津洫流浅济浮浴 +# 海浸涂涅润淫深清渊渎温游溺滔滕滥漆澹灌火灭灵灶点烈焉焕焚然熟燕燧爱父片版牖牛牟牡 +# 牢物犁犬犯犹狂狄狎狐独狱狷猛献玄率玉王琏琢瑚瑟瓜瓢甘甚生用甫由申画畏畔畜疏疑疚疾 +# 病白百皆皇皋皙皦皮盈益盍监盖盗盛目直相盼省瞻瞽矜矢矣知矩短石硁磋磨磬磷示礼社祇祝 +# 神祭祷禄禘禹离禽秀私秉科秦称移稷稻稼穆穷空穿突窃窒窥窬立章童竭端笃笑笾等答策筲简 +# 箕算管箪篑类粟粪粮精系素紫絺緅纠红纣约纯纲纳纵绀绁绅细终绎经绘给绚绝绞绤绥继绰维 +# 缁缊缧缭缺罔罕罚罢罪羊美羔羞群羹羽羿翔翕翼老者而耕耦耰耳耻聚聪肆肉肤肥肩肱肸胜胫 +# 能脍脩脯腥臣臧自臭至致臾舆舌舍舜舞舟良色艺节芸苗苟若荆草荏荐荡荣药荷莅莒莞莫获菜 +# 菲萧葬葸蒉蒙蓧蔡蔽薄薛薨藏藻蘧虎虐虑虚虞虽蛮血行衡衣表衰衽袂袍袗被裁裘裨裳襁襄襜 +# 西要覆见观视觉觌角觚言訚誉譬讦讨让讪议讱讲讷论讼证识诈诔试诗诚诛诬语诱诲说诵请诸 +# 诺读谁谄谅谋谌谏谓谤谨谮谲谷豆豚豹貉貊貌贞负贡责贤败货质贪贫贯贰贱贵费贼贾赉赋赏 +# 赐赤赦赵起趋足路践踖踧蹈蹜躁躩身躬軏輗车轻辂辅辍辞辟辨辰辱达迁迂迅过近进远违连迟 +# 迩述迷迹追退送适逆选通逝逞速造逮逸逾遂遇道遗邑邦邪邻郁郑鄙鄹酒酱醯里重野量釜钓钟 +# 钻铎铿错锦长门问闲间闵闻阈阙防阳阴阶阼附际陈陋降陪陵陶陷隅随隐难雅集雉雌雍雎雕雩 +# 雷霸静非面鞟鞠鞭韫韶顺须顾颂颛颜颠风食餲饐饥饩饪饭饮饰饱饿馁馈馑馔首騧马驷驾骄骈 +# 骍骞骥高鬼魋魏鮀鱼鲁鲜鲤鸟鸡鸣麑麻黄黍默黜黻鼓鼗齐齿龟!,:;? diff --git a/references.tex b/references.tex index 4e9b95c..984ac65 100644 --- a/references.tex +++ b/references.tex @@ -38,7 +38,7 @@ \chapter*{参\quad 考\quad 材\quad 料} \lylabel{lunyuyizhu}\lybook{《论语译注》}(第2版),杨伯峻\,译注,中华书局,1980年。这应该是解放后中国大陆最流行的《论语》读本,初版于1958年,注释翔实,包含很多对古汉语的独到体会。可惜限于时代,作者谨守语言学家的界限,难以畅达地阐述各章内涵,另外也有一些小错。2006年中华书局出了简体字本,2009年岳麓书社出了杨先生堂侄杨逢彬负责的修订重版。奇怪的是,它们把原本颇具特色的“试论孔子”、“论语词典”等删掉,只留下光溜溜的20篇。我觉得,往往是这样推陈出新的地方,才体现作者的功力,才对读者更有用。幸好2015年中华书局典藏版复其原貌。 % NOTE: 错误辨析可以参考2012年白平的《杨伯峻〈论语译注〉商榷》。其中对译文的一些纠结,似乎不太必要。 -\lybook{《论语新解》},钱穆\,著,三联书店,钱穆作品系列,2002年。本书以浅近精洁的文言文写成,字词的注释要言不烦,着重于“心解”每一章的意义,反复阐述修身治学之道,在现代注本中占有不可替代的地位。 +\lybook{《论语新解》},钱穆\,著,三联书店,钱穆作品系列,2002年。本书以浅近精实的文言文写成,字词的注释要言不烦,着重于“心解”每一章的意义,反复阐述修身治学之道,在现代注本中占有不可替代的地位。 % TODO: 与《论语译注》的立场明显不同,钱先生显然是以……回护,性格。 \lybook{《论语本解》},孙钦善\,著,三联书店,2009年。注释精准,各章之间经常提供交叉引用,5个附论也各有价值。2013年三联书店出了修订版。 diff --git a/style.tex b/style.tex index 010f58f..61a9ea0 100644 --- a/style.tex +++ b/style.tex @@ -303,6 +303,7 @@ colback=white, colframe=lytextbackground, colbacktitle=lytextbackground, coltitle=black, boxrule=0.5mm, segmentation style={solid, line width=0.4mm}, + after skip=1em, phantom={\lyblobmark{\thetcbcounter}}, title=#1, overlay unbroken and first ={ @@ -320,7 +321,7 @@ \end{lybaseblob}% } -% Free style. +% Free (arbitrary) style. \newcommand{\lybloba}[3]{% \begin{lybaseblob}{#1}% #2% diff --git a/topics.tex b/topics.tex index ed60af9..3cc2315 100644 --- a/topics.tex +++ b/topics.tex @@ -4,7 +4,7 @@ \chapter*{主\quad 题\quad 索\quad 引} \addcontentsline{toc}{chapter}{主题索引} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -主题类型的划分并不严谨,只是根据各章的话题与涉及的概念,大致梳理的纲要。每章至少归入一个主题,通常是若干个。为了突出重点,并不是每个词出现在某章,就包罗进来;需要的话,可以用白文版搜索。为了方便查看,还加入了“孔子自评”、“人评孔子”两个主题。 +主题类型的划分并不严谨,只是根据各章的话题与涉及的概念,大致梳理的纲要,按出现频次排序。每章至少归入一个主题,通常是若干个。并不是某个主题词出现在某章,就一定包罗进来。需要的话,可以用白文版搜索。为便于熟悉孔子的人格,还加入了“\lylink{topickongziziping}{孔子自评}”、“\lylink{topicrenpingkongzi}{人评孔子}”两个主题。 \bigskip diff --git a/validate.py b/validate.py index d5c2f10..ec19b48 100644 --- a/validate.py +++ b/validate.py @@ -1,254 +1,254 @@ -# coding: utf-8 - -from __future__ import unicode_literals -import io -import re - -from rawblobs import rawblobs - - -ENCODING = 'utf-8' - - -def validate_lylabels(log): - infiles = ( - 'aboly.tex', - 'autobody.tex', - 'autocharacters.tex', - 'autotopics.tex', - # 'guide.tex', # TODO: uncomment - 'license.tex', - 'preface.tex', - 'references.tex', - 'usage.tex', - ) - label_pat = re.compile(r'\\lylabel\{(.+?)\}') - labelinfo = [] # label, infile index, line no - for i, infile in enumerate(infiles): - lines = io.open(infile, encoding=ENCODING).readlines() - for l, line in enumerate(lines): - mat = label_pat.search(line) - if mat: - labelinfo.append((mat.group(1), i, l)) - labelinfo.sort(key=lambda x: x[0]) - - # Check for duplicates. - nlabel = len(labelinfo) - if nlabel != len(set(x[0] for x in labelinfo)): - i = 0 - while i < nlabel-1: - j = i + 1 - if labelinfo[i][0] != labelinfo[j][0]: - i += 1 - continue - while j < nlabel and labelinfo[i][0] == labelinfo[j][0]: - j += 1 - if labelinfo[i][0] == labelinfo[j][0]: - j += 1 - log.error('Duplicate lylabel "%s" in', labelinfo[i][0]) - for x in range(i, j): - log.error(' line %d of %s', labelinfo[x][2]+1, infiles[labelinfo[x][1]]) - i = j - return False - - # Labels should not start with a digit (reserved for \lyblob). - for i, info in enumerate(labelinfo): - label = info[0] - if not label or label[0].isdigit(): - log.error('Invalid lylabel "%s" on line %d of %s', - label, labelinfo[i][2]+1, infiles[labelinfo[i][1]]) - return False - return True - - -def validate_lylinks(log): - infiles = ( - 'autotopics.tex', - 'body.tex', - 'characters.tex', - # 'guide.tex', # TODO: uncomment - 'license.tex', - 'preface.tex', - 'references.tex', - 'usage.tex' - ) - pat_anchor = re.compile(r'\\lylabel\{(.+?)\}') - pat_link = re.compile(r'\\(?:lycharlink|lylink|lyref)\{(.+?)\}') - - anchors = set() - for infile in infiles: - for lineno, line in enumerate(io.open(infile, encoding=ENCODING)): - lineno += 1 - for x in pat_anchor.finditer(line): - anchors.add(x.group(1)) - blob_labels = set(b[0] for b in rawblobs) - anchors |= blob_labels - - valid = True - for infile in infiles: - for lineno, line in enumerate(io.open(infile, encoding=ENCODING)): - for x in pat_link.finditer(line): - target = x.group(1) - if target not in anchors: - valid = False - log.error('Invalid target: "%s" on line %d of "%s"', target, lineno+1, infile) - return valid - - -def validate_lyrefs(log): - infiles = ( - 'body.tex', - # 'guide.tex', # TODO: uncomment - 'license.tex', - 'preface.tex', - 'references.tex', - 'usage.tex', - ) - special_lyrefs = set(( - r'问\lylink{zhi4d', - )) - special_lyqs = set(( - '吾不试,故艺', - '君子无众寡,无小大', - '君子疾夫舍曰', - )) - labels, texts = zip(*rawblobs) - lyref_tag = r'\lyref' - # Ensure that \lyref is properly surrounded. Generate warnings. - delims = r' ()【】。,、:;!—{}' - re_lyref_before = re.compile(r'(? 0 and line[mat.start() - 1] == '\\': - continue - word = mat.group(1).lower() - if word not in lywords: # TODO: consider plurals - valid = False - log.error('Invalid lycommand: "%s" on line %d, column %d of "%s"', word, lineno+1, mat.start()+1, infile) - return valid - - -def validate_pinyin(log): - infiles = ( # NOTE: exclude covers - 'aboly.tex', - 'body.tex', - 'characters.tex', - 'autotopics.tex', - # 'guide.tex', # TODO: uncomment - 'license.tex', - 'preface.tex', - 'references.tex', - 'usage.tex', - ) - tone_chars = set('āáǎàōóǒòēéěèīíǐìūúǔùüǖǘǚǜ') - pinyin_chars = tone_chars.union(' abcdefghijklmnopqrstuwxyz') - prefix = r'\lypy{' - suffix = r'}' - prefix_len = len(prefix) - special_pinyin = set(('The Rubáiyát of Omar Khayyám',)) - - for infile in infiles: - with io.open(infile, encoding=ENCODING) as f: - lines = f.readlines() - for lineno, line in enumerate(lines): - for tc in tone_chars: - index = 0 - while True: - index = line.find(tc, index) - if index == -1: - break - valid = True - left = line[:index].rfind(prefix) - if left == -1: - valid = False - else: - right = line.find(suffix, index+1) - if right == -1: - valid = False - else: - pinyin = line[left + prefix_len: right] - valid = all(c in pinyin_chars for c in pinyin) - if not valid: - if not any(sp in line for sp in special_pinyin): - log.error('Incorrect pinyin on line %d, column %d of %s', lineno+1, index+1, infile) - return False - break - else: - index = right - return True - - -# All above. -validators = ( - validate_lylabels, - validate_lylinks, - validate_lyrefs, - validate_lywords, - validate_pinyin, -) +# coding: utf-8 + +from __future__ import unicode_literals +import io +import re + +from rawblobs import rawblobs + + +ENCODING = 'utf-8' + + +def validate_lylabels(log): + infiles = ( + 'aboly.tex', + 'autobody.tex', + 'autocharacters.tex', + 'autotopics.tex', + # 'guide.tex', # TODO: uncomment + 'license.tex', + 'preface.tex', + 'references.tex', + 'usage.tex', + ) + label_pat = re.compile(r'\\lylabel\{(.+?)\}') + labelinfo = [] # label, infile index, line no + for i, infile in enumerate(infiles): + lines = io.open(infile, encoding=ENCODING).readlines() + for l, line in enumerate(lines): + mat = label_pat.search(line) + if mat: + labelinfo.append((mat.group(1), i, l)) + labelinfo.sort(key=lambda x: x[0]) + + # Check for duplicates. + nlabel = len(labelinfo) + if nlabel != len(set(x[0] for x in labelinfo)): + i = 0 + while i < nlabel-1: + j = i + 1 + if labelinfo[i][0] != labelinfo[j][0]: + i += 1 + continue + while j < nlabel and labelinfo[i][0] == labelinfo[j][0]: + j += 1 + if labelinfo[i][0] == labelinfo[j][0]: + j += 1 + log.error('Duplicate lylabel "%s" in', labelinfo[i][0]) + for x in range(i, j): + log.error(' line %d of %s', labelinfo[x][2]+1, infiles[labelinfo[x][1]]) + i = j + return False + + # Labels should not start with a digit (reserved for \lyblob). + for i, info in enumerate(labelinfo): + label = info[0] + if not label or label[0].isdigit(): + log.error('Invalid lylabel "%s" on line %d of %s', + label, labelinfo[i][2]+1, infiles[labelinfo[i][1]]) + return False + return True + + +def validate_lylinks(log): + infiles = ( + 'autotopics.tex', + 'body.tex', + 'characters.tex', + # 'guide.tex', # TODO: uncomment + 'license.tex', + 'preface.tex', + 'references.tex', + 'usage.tex' + ) + pat_anchor = re.compile(r'\\lylabel\{(.+?)\}') + pat_link = re.compile(r'\\(?:lycharlink|lylink|lyref)\{(.+?)\}') + + anchors = set() + for infile in infiles: + for lineno, line in enumerate(io.open(infile, encoding=ENCODING)): + lineno += 1 + for x in pat_anchor.finditer(line): + anchors.add(x.group(1)) + blob_labels = set(b[0] for b in rawblobs) + anchors |= blob_labels + + valid = True + for infile in infiles: + for lineno, line in enumerate(io.open(infile, encoding=ENCODING)): + for x in pat_link.finditer(line): + target = x.group(1) + if target not in anchors: + valid = False + log.error('Invalid target: "%s" on line %d of "%s"', target, lineno+1, infile) + return valid + + +def validate_lyrefs(log): + infiles = ( + 'body.tex', + # 'guide.tex', # TODO: uncomment + 'license.tex', + 'preface.tex', + 'references.tex', + 'usage.tex', + ) + special_lyrefs = set(( + r'问\lylink{zhi4d', + )) + special_lyqs = set(( + '吾不试,故艺', + '君子无众寡,无小大', + '君子疾夫舍曰', + )) + labels, texts = zip(*rawblobs) + lyref_tag = r'\lyref' + # Ensure that \lyref is properly surrounded. Generate warnings. + delims = r' ()【】。,、:;!—{}' + re_lyref_before = re.compile(r'(? 0 and line[mat.start() - 1] == '\\': + continue + word = mat.group(1).lower() + if word not in lywords: # TODO: consider plurals + valid = False + log.error('Invalid lycommand: "%s" on line %d, column %d of "%s"', word, lineno+1, mat.start()+1, infile) + return valid + + +def validate_pinyin(log): + infiles = ( # NOTE: exclude covers + 'aboly.tex', + 'body.tex', + 'characters.tex', + 'autotopics.tex', + # 'guide.tex', # TODO: uncomment + 'license.tex', + 'preface.tex', + 'references.tex', + 'usage.tex', + ) + tone_chars = set('āáǎàōóǒòēéěèīíǐìūúǔùüǖǘǚǜ') + pinyin_chars = tone_chars.union(' abcdefghijklmnopqrstuwxyz') + prefix = r'\lypy{' + suffix = r'}' + prefix_len = len(prefix) + special_pinyin = set(('The Rubáiyát of Omar Khayyám',)) + + for infile in infiles: + with io.open(infile, encoding=ENCODING) as f: + lines = f.readlines() + for lineno, line in enumerate(lines): + for tc in tone_chars: + index = 0 + while True: + index = line.find(tc, index) + if index == -1: + break + valid = True + left = line[:index].rfind(prefix) + if left == -1: + valid = False + else: + right = line.find(suffix, index+1) + if right == -1: + valid = False + else: + pinyin = line[left + prefix_len: right] + valid = all(c in pinyin_chars for c in pinyin) + if not valid: + if not any(sp in line for sp in special_pinyin): + log.error('Incorrect pinyin on line %d, column %d of %s', lineno+1, index+1, infile) + return False + break + else: + index = right + return True + + +# All above. +validators = ( + validate_lylabels, + validate_lylinks, + validate_lyrefs, + validate_lywords, + validate_pinyin, +)