4

I'm typesetting a text from a 17th century Chinese woodblock print. The original text is printed vertically, and I'm printing it horizontally. The text has the same number of Chinese characters per line. It also has punctuation marks, which are in the lower right corner of every character. These marks take up no space, so that although there are an uneven number of punctuation marks in every line, the lines remain of the same length. However, if I use the CJK punctuation mark 。 for punctuation, that counts as one character, creating lines of uneven length.

Is it possible to create a punctuation mark to be placed in subscript in the lower right corner of a Chinese character, which will not take up any space on the line, keeping the lines of uniform length?

  • 2
    What about \rlap{${}_.$}, or whatever you use for punctuation. – Werner Dec 4 '13 at 3:07
  • I don't quite understand. Punctuation goes where . is, and the character that precedes the punctuation mark goes where _ is? – Mårten Dec 4 '13 at 3:25
  • How do you support Chinese chars in your LaTeX document? XeTeX with the package xeCJK or (pdf)TeX with the package CJK? In addition, could you draw a diagrammatic sketch that shows where should a certain punctuation mark be placed, since I haven't saw any Chinese ancient writings place its punctuation marks as subscript, although I am a Chinese. – Ch'en Meng Dec 4 '13 at 3:27
  • BTW, if you want to typeset Chinese chars vertically, have a look at this answer. – Ch'en Meng Dec 4 '13 at 3:29
  • Sure. I use xeCJK. An example of the punctuation is seen here: db.tt/3QPRq5vW – Mårten Dec 4 '13 at 3:34
8

Here is an answer inspired by qingkuan@bbs.ctex.org.

You can set a punctuation mark as \active, and then justify its position.

Code:

%!TEX program = xelatex
\documentclass{article}

\usepackage{xeCJK}

\setCJKmainfont{SimSun}

\makeatletter
\begingroup
\catcode`\,=\active
\@firstofone{\endgroup\protected\def,}{%
  \hskip -.4ex\rlap{\raise -.9 ex \hbox{,}}\hskip .4ex\ignorespaces}
\makeatother

\def\ActivePunct{\catcode`\,=\active}
\def\InactivePunct{\catcode`\,= 12 }

\begin{document}

\ActivePunct
中文之间的逗号,不占位置

\InactivePunct
中文之间的逗号,恢复原状

\end{document}

And the output:

enter image description here

You can amend any other punctuation marks as your wish.

However, there are some disadvantages:

  • Could not break a line when the specific punctuation mark is at the end of line;
  • Could be out of alignment when the specific punctuation mark is at the end of line.

It's NOT perfect, and use it carefully.

  • There can be other solutions without changing the catcodes for this particular problem. BTW, 句读只有、和。 – Leo Liu Dec 6 '13 at 9:31
  • @LeoLiu I wonder if I should communicate with you in Chinese.. Could you give an alternative which is robuster and more convenient than my answer, and I will be glad to see that (hope the OP will also be). To your 'BTW', you're right. :) – Ch'en Meng Dec 6 '13 at 9:43
3

This may be simpler:

\documentclass{article}

\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\punctstyle{plain}
\def\CJKpunctsymbol#1{\raise-1ex\hbox to 0pt{\kern-.1em#1}}

\begin{document}

道、可道也。非恒道也。

\end{document}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.