天空二则
大仲马《基督山伯爵》
这对可怜的孩子幸福极了,他们只感到自己的存在,还有就是那为他们祝福的晴朗的天空。
木下ゆみ「WIND IS HIGH」
あの大空を あげたい君に
好浪漫。
大仲马《基督山伯爵》
这对可怜的孩子幸福极了,他们只感到自己的存在,还有就是那为他们祝福的晴朗的天空。
木下ゆみ「WIND IS HIGH」
あの大空を あげたい君に
好浪漫。
为什么上天不能给我一颗平静的心呢?多么希望自己的心是一潭死水,任何人都不要投石子进来。
高中的语文课除了课本之外,还有一本小说读本,里面收录的一些小说当时给我留下了深刻的震撼,以致现在都还有印象。我把这些小说剪下来,钉起来送给一位同学。如今想起来,好像自己在做什么mixtape。其中一篇小说叫做《河的第三条岸》,故事里的父亲有一天突然抛家弃子,买了一条船,此后终日生活在一条河里。到现在我才明白为什么当初会喜欢这篇小说,因为我的心里也一直存在逃跑的念头,哐当、哐当,逃跑、逃跑、逃跑……
And I’ve been making promises I know I’ll never keep
One of these days I’m gonna leave you in your sleep
I’ll have to go when the whistle blows
The whistle knows my name
Baby, I was born on a train
―The Magnetic Fields, “Born on a Train”
章学诚《文史通义》
六经皆史也。古人不著书,古人未尝离事而言理,六经皆先王之政典也。
Neil Postman, The Disappearance of Childhood
Indeed, prior to the printing press the concept of a writer, in the modern sense, did not exist.
And Mr. Postman proceeded to quote Saint Bonaventure.
A man might write the works of others, adding and changing nothing, in which case he is simply called a “scribe.” … Another writes the work of others with additions which are not his own; and he is called a “compiler.” … Another writes both others work and his own, but with others’ work in principal place, adding his own for purposes of explanation; and he is called a “commentator.” … Another writes both his own work and others’ but with his own work in principal place adding others’ for purposes of confirmation; and such a man should be called an “author.”
注意这里的write不是现代意义上的写作,而是指(抄)写这个动作。
翻老照片看见一张初中同学的艺术照,翻过来看,发现背面左上角写着我名字里的一个字,中间是艺术签名加一个笑脸,右下角写着她的QQ号。可爱捏。
最近写blog的时候又注意到了书名号的问题。中国大陆的标准《标点符号用法》规定的是使用《》表示书名,在嵌套的情况下使用〈〉。我此前一直遵循台湾的《重訂標點符號手冊》,即书名、专辑名用《》,篇名、歌曲名用〈〉,我觉得这样能更好地区分作品类型。但是这两套规定都没有说明引用英文作品的情况,我之前也一直使用书名号来表示英文作品。不过英文以及很多西方语言本身没有书名号,而是以斜体表示书名,引号表示单篇作品。
虽然《用法》没有规定,官方出版的《〈标点符号用法〉解读》里要求用斜体表示英文书名,双引号表示篇名,但没有说明是用全角引号还是半角引号。新闻行业的标准《中文出版物夹用英文的编辑规范》做了同样的规定,并且规定「中文句子内夹有英文文章的标题,该标题使用英文正体字,用中文引号(笔者注:全角引号)标示。」
那英文是怎么做的?这方面英文的格式指南就多了。不过在面对不使用拉丁字母的语言时大体上的规范是这样的:首先是转写(transliterate),中文用拼音,日语用罗马音;转写之后就应用英文的规则,即使用斜体和引号;如果要提供原文,则照录原文,无任何样式,不加任何标点。这是比较正式的写作的要求,实际上我几乎从没在日常的英文文章里见到过直接引用中文标题的。
另外有个问题是,《解读》里只提及了英文的情况,那么面对其他语言的时候应该怎么处理?虽然在标记英文作品时,中文看起来是在遵照英文的习惯,但是:一、斜体不是标点;二、凑巧的是中文的引号和英文的引号实际上是一样的(二者Unicode码位一致),只是全角和半角的区别,所以这套方案并没有用到中文中不存在的标点,也没有使用英文中不存在的标点来标记英文作品,可谓二者兼顾。但是有些语言使用中文中不存在的标点来表示书名1,以俄语为例,俄语用角引号«»来表示书名。很遗憾我没有找到比较正式的相关信息,只找到华东师范大学俄罗斯研究中心的来稿要求,对于俄文文献,要求照录原文,不加任何标点。另外一个比较有意思的例子是日语。日文用双引号『』表示书名,单引号「」表示篇名,中文同样使用直角引号;同时日语也有书名号,不过在日语里叫山括弧,更多用于表强调。这方面同样没有找到什么信息,只有北京日本学研究中心的来稿要求,规定使用『』。
英语对待日语与对待中文一致。日语由于有片假名,所以实际上是在转写,转写之后就是日文,自然应用日文的标点。这是最普遍的做法,不过日语维基上各式各样的情况都有。
以上就是关于如何标记外文作品的一点小小考察。当然了解规范的乐趣就在于,了解规范但是有意不遵守。
P.S. 超链接应该包括标点符号吗?
之前不知道为什么,点开了《迪迦奥特曼》第十九集〈蓝色夜晚的记忆〉看了看,却发现一开始本集主角在舞台上唱的是日语版本的「Be My Baby」。找了一下,根据B站的评论,这应该是须藤瞳为迪迦专门唱的,只有这么一段,没有发行过。「Be My Baby」作为流行音乐史上非常重要的一首歌,日语有不少翻唱。我找了半天,中文版本只找到郑瑞芬的粤语翻唱。
一木努收集被拆除的建筑的碎片,读到此事颇有感触。几年前家里重新装修,生活了十几年的房间不复存在,什么都没有保留下来。如果早几年读到这件事,我就留下一点房间的碎片,以此作为房间存在过的证据。
在车站等车的时候来了一位清洁产品推销人员,我摆摆手拒绝,接着看书。过一会儿,发现这哥们儿还有他同事已经和坐在后面的女孩攀谈起来。小妹妹好脾气,三位小朋友既是同乡又年岁相仿,有说有笑。一会说企业文化,一会说不想被妈妈管,一会说请你喝奶茶。好说歹说小妹妹终于买了一个,又嘱咐明天就可以点一杯奶茶送到她公司。最逗的是,过了一会儿,又来了两个家伙推销。小妹妹说刚才已经来过两个帅哥,不过你比他俩帅。小弟弟说,那是当然,他们是我小弟。小妹妹态度坚决,说可惜你们来得太晚了。听到这里我实在有点想笑。
照我的理解,Unicode为每一个字符指定了一个数字,称为code point。
const cp = 'a'.codePointAt(0)
console.log(cp)
console.log(String.fromCodePoint(cp))
// cp的16进制
console.log('\x61')
JavaScript内部使用UTF-16,每个code point用一到两个16bit的code unit编码。BMP(0–65535)里的code point用一个code unit表示,BMP之外的code point用两个code unit表示,称为surrogate pair。BMP包含绝大部分常用的字符,包括汉字。
const cp = '我'.codePointAt(0) console.log(cp) console.log(String.fromCodePoint(cp))
而emoji则位于BMP之外。许多JavaScript的原生方法作用于code unit,处理emoji时,会产生一些奇怪的结果。
const cp = '😀'.codePointAt(0)
console.log(cp)
console.log(String.fromCodePoint(cp))
console.log('😀'.length)
console.log('😀'.split(''))
console.log('😀'[0])
显然length和split只能处理code unit,😀由两个code unit表示,因此长度为2。Surrogate pair里的code unit单独存在时没有任何意义。一些生僻字同样在BMP之外。
const cp = '𬊈'.codePointAt(0)
console.log(cp)
console.log(String.fromCodePoint(cp))
console.log('𬊈'.length)
codePointAt与String.fromCodePoint作用于code point,以下一些方法也能处理code point。
console.log(Array.from('😀'))
console.log([...'😀'])
for (const a of '😀') {
console.log(a)
}
显然,以index来循环,だめ。
const a = '😀'
for (let i = 0; i < a.length; i++) {
console.log(a[i])
}
另有一些被称为grapheme cluster的字符,这些字符看起来、我们会把它们理解为一个字符,但实际上由多个code point构成。例如🖖🏻即由两个code point构成。
const s = "🖖🏻" console.log(s.length) console.log([...s]) console.log(String.fromCodePoint(s.codePointAt(0), s.codePointAt(2)))
目前JavaScript没有原生的方法可以处理grapheme cluster。
A not so interesting tidbit
在Chrome的控制台里输入🖖🏻,需要按两次删除键才能删掉,第一下只会删掉第二个code point,留下了🖖。