ethantw / Han

「漢字標準格式」印刷品般的漢字排版框架 Han.css: the CSS typography framework optimised for Hanzi.
https://hanzi.pro/
MIT License
2.42k stars 135 forks source link

Proposal: support "wavy underline" form title mark (甲式書名號) #113

Open ghost opened 5 years ago

ghost commented 5 years ago

Han.css提供的標點符號已在多數情況下足夠取用。然而,在某些情況下,如,通過HTML排列一些古典目錄學圖書的段落時,往往會被「《》」(乙式書名號)佔據不少的空間。

……不著撰人名氏。《宋史藝文志》以爲郭稽中撰。考陳振孫《書錄解題》,稱濮陽李師聖得《產論》二十一篇,有說無方。醫學教授郭稽中爲時良醫,以方附諸論末,遂爲完書。則稽中特因師聖所得舊本,增以新方,非所自撰。《宋史》所載,似未見陳氏說也。然稽中所增,合原論共爲一卷,與此本不合。以卷首諸序考之,蓋括蒼陳言撰《三因方》,嘗取其方論各評得失,婺醫杜荍因採其所評,附入各條之下,後趙瑩得《產乳備要》,增以楊子建《七說》,合於《產論》爲一集。有冀致君者,又掇《御藥院雜病方論》,及《八月產圖》、《體元子借地法》、《安產藏衣方位》綴於其末。是輾轉增益,已非郭氏之舊,特沿其舊名耳。其書世罕傳本。今載於《永樂大典》者得論二十一,陳言評十六,方三十四爲一卷;《產乳備要》暨《經氣妊娠》等證方六十二爲一卷。其《體元子借地法》,《永樂大典》佚不載,今亦闕焉。案胎教之法,古人所重,賈誼《新書》所引青史氏之說,劉向《列女傳》所記太任育文王之事,尚可見其崖略。惟《產育方藥》則罕專書,《唐書藝文志》有昝殷《產寶》一卷,始別立一門。今其書不傳,則講妊育者當以是書爲最古矣。卷中惟陳言之評標識姓名,餘皆不標爲誰說。今以原本體例推之,上卷之方皆出郭氏,下卷娩乳、安產、經氣三條外,殆即楊氏之說,所附方藥,殆即冀致君所採御藥院方也。陳言即撰《三因方》者。

整個章節書目號佔了近四分之一的篇幅,若能提供甲式書名號[1](wavy underline, 取 “wu” 或 "wvu" 為 class name)的支援,想必能為此類內容節省不少螢幕空間。

1: https://language.moe.gov.tw/001/Upload/FILES/SITE_CONTENT/M0001/HAU/h12.htm

weakish commented 4 years ago

甲式書名號在某些場合能更精確地標記一些書名的合稱,比如《前後漢書》可能讓人誤以爲是一本書,用甲式書名號,「前」和「後」之間斷開,就不會讓人誤會是一本書(當然理論上可能讓人誤會是《前·後漢書》,也就是有一本書叫《前》,其中有一卷(章)叫《後漢書》,但就這個例子而言一般人不會誤會有一本書叫《前》)。

ethantw commented 9 months ago

未來會改用 text-decoration 來實作,謝謝您的提議。

ethantw commented 3 months ago

開發新版本時暫時發想的CSS代碼,示例頁面 https://jsbin.com/zepusukaso/edit?html,css,output,歡迎取用並協助測試,若是有發現問題也請留言說明。

Screenshot 2024-07-28 at 00 11 27
/**
 * Add Chinese wavy title marks to `cite` elements.
 */
:where(cite:lang(zh)) {
  font-style: normal;
  quotes: none;
  text-decoration-line: underline;
  text-decoration-style: wavy;
  text-decoration-skip: edges;
  text-underline-offset: .125em;
}

/* Make sure lines between two (or more) adjacent wavy title marks in `cite`
 * elements are visually distinguishable if current UA does not support
 * `text-decoration-skip: edges`.
 */
@supports not (text-decoration-skip: edges) {
  :where(cite:lang(zh) + cite:lang(zh)) {
    margin-inline-start: .125em;
  }
}