Replicating the Rosters in《现代汉语词典》(details updated)

I’ve just tried to replicate the rosters in《现代汉语词典》(The Contemporary Chinese Dictionary).



It’s used as a test case for a package:

2 Likes

Yesterday I didn’t have time. Now I’ll add some (hopefully interesting) details.

The rhythm of three characters

Most Chinese names contains three and only three characters. Moreover, all Han characters have the same width. Therefore, A Chinese name list can be easily aligned with a rhythm of three characters. This convention applies to both horizontal and vertical writing modes.

Source of the above image: The Type — 文字 / 设计 / 文化 » 中文排版网格系统的五大迷思.

And yes, there are exceptions.

  • For longer names, they can span across two or more columns.
  • For two-character names, the convention is put a space in between. For example, 王力 will become 王 力. (Here I put a U+3000 CJK Symbols and Punctuation IDEOGRAPHIC SPACE.)
  • No Chinese name is single-character, at least in modern ages.

I guess this layout is unique? I can’t image how to align names like Nyota Uhura, James Tiberius Kirk, Montgomery Scott, or Beverly Crusher.
Please let me know if I am wrong. It would be fun to compare cross-cultural differences.

The annotation

In the first page, there is a annotation(主任)after 曹先擢.

图片

In normal cases, Han characters and punctuation are squares with the ratio of 1:1. However, (主任) is severely shrunk because of the lack of space. This can be achieved in typst by the following steps.

  1. Turn and from 1:1 squares into 2:1 rectangles by inserting negative horizontal spacings.

    show "(": it => h(-0.5em) + it
    show ")": it => it + h(-0.5em)
    
  2. Scale the whole annotation.

    box(scale(x: 50%, reflow: true)[(主任)])
    
    • reflow: true is necessary. Otherwise, the next name 晁继周 would think the annotation is still holding 4 em space, and move to the next column.

    • The box is also inevitable. scale creates a block-level container. If we do not wrap it in an inline box, then we’ll get the following.

      图片

  3. Render it in subscript.

  4. Allow the cell of 曹先擢 to overflow into the column gap.

    In my package tricorder, (overflow: true) does the job.

To wrap up:

#tricorder(
  ((overflow: true), [曹先擢#sub(box(scale(x: 50%, reflow: true)[(主任)]))]),
  .."晁继周、陈原、……、周明鉴".split("、"),
)

The annotation, an alternative method

Besides, there is another way to annotate: just write as if it is a part of a long name. In the following image, (女)and (回族) are annotations.

Source of the above image: The newspaper People’s Daily on 2012-11-08.

Note that and are shrunk into 1:2 rectangles, even though there’s enough space for 1:1 squares.

I didn’t understand the purpose before I replicate it: If I don’t shrink them, the annotation would be placed at the midpoint between two names, leading to ambiguity! For example, 王正伟(回族)王东明 is 王正伟 (回族) + 王东明 or 王正伟 + (回族) 王东明?

2 Likes

Letterspace to justify texts

Compare 主要修订人员 with 资料人员 in the second page, and you will find there are additional spaces between the characters in 主要修订人员.

未标题-4

The implementation is simple in typst:

let it = "主要修订人员"
let n = it.clusters().len()

// https://typst.app/docs/reference/text/text/#parameters-tracking
set text(tracking: 1em / (n - 1))
it

The motivation of putting additional spaces is to align 主要修订人员 with 主编 丁声树 and 协助 李 荣.
All Han characters are squares, and there isn’t any space between words. As a result, increasing the tracking is acceptable in this case.

However, it’s unusual for Latin texts.

Anyone who would letterspace lower case would steal sheep.


Page 70, Stop Stealing Sheep and find out how type works, CC BY-ND 4.0.

2 Likes