我正在制作一套抽认卡来帮助我练习汉字,我想要的格式很简单:正面是汉字,背面是它的含义和读音(带有在-阅读和坤-readings on different lines)。为此,我使用了一个非常好的文档类flacards
,并且效果很好。
问题是有些卡会有很多读数;太多了,列表必须换行。现在,当下一个字符放不下时,它就会中断(图片中的最后四行):
每个读数之间的空格是 U+3000 表意文字空格 ( ),我希望 XeLaTeX 将该字符视为自动换行的空格,这样它就不会在读数中间断行。换句话说,结果应该更接近这个(手动构建的示例):
...但必须满足以下条件:
- 无需手动包装(如果卡片变宽,生产线必须自动回流)
- 为了换行而删除的空间必须不是被渲染(在上图中,它们是)
- 各个条目之间呈现的空格必须与表意空格具有完全相同的宽度(即使字体发生变化),但它不必是生成的 PDF 中的实际表意空格字符(不过,最好在其中包含正确的字符)
确切的输入格式不是固定的,可以根据需要进行更改,只要达到所需的间距即可。
梅威瑟:
\PassOptionsToPackage{a4paper}{geometry}
\documentclass[frontgrid,backgrid]{flacards}
\usepackage{xeCJK}
\setCJKmainfont{MS Gothic}
\renewcommand{\cardtextstylef}{\Huge}
\renewcommand{\cardtextstyleb}{}
\begin{document}
\card{明}{bright, clear\\ メイ ミョウ\\ あ(かり) あか(るい) あか(るむ) あか(らむ) あき(らか) あ(ける) -あ(け) あ(く) あ(くる) あ(かす)}
\end{document}
答案1
您有几个问题:
\CJKglue
防止 CJK 字符之间换行。任何两个 CJK 字符之间都有一个,它最初定义为\hskip 0pt plus 0.08\baselineskip\relax
启用换行。您可以重新定义\CJKglue
为空宏以防止换行。(再次抱歉,仅限中文文档
xeCJK
。)(
防止前后换行)
。我们应该将它们视为 CJK 表意字符,而不是全角左标点或右标点。\xeCJKDeclareCharClass
中的高级宏xeCJK
可以解决问题。将全角空格 (U+3000) 设为 TeX 胶水,这样可以实现换行,但可丢弃(见 TeXbook 第 14 章)。这对于 TeXnician 来说并不难。
以下是完整的工作示例:
\documentclass[frontgrid,backgrid]{flacards}
\renewcommand{\cardtextstylef}{\Huge}
\renewcommand{\cardtextstyleb}{}
\usepackage{xeCJK}
\setCJKmainfont{MS Gothic}
% Prevent line breaking between CJK characters
\xeCJKsetup{CJKglue=} % or \def\CJKglue{} for old version of xeCJK
% Prevent line breaking before ( and after )
\xeCJKDeclareCharClass{CJK}{`(, `)}
% Define a full-width space to be a \quad, which is a TeX glue
\catcode"3000=\active
\def^^^^3000{\quad}
\begin{document}
\card{明}{bright, clear\\
メイ ミョウ\\
あ(かり) あか(るい) あか(るむ) あか(らむ) あき(らか) あ(ける) -あ(け) あ(く) あ(くる) あ(かす)}
\end{document}