允许/强制在表意空格处换行

允许/强制在表意空格处换行

我正在制作一套抽认卡来帮助我练习汉字,我想要的格式很简单:正面是汉字,背面是它的含义和读音(带有-阅读和-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

您有几个问题:

  1. \CJKglue防止 CJK 字符之间换行。任何两个 CJK 字符之间都有一个,它最初定义为\hskip 0pt plus 0.08\baselineskip\relax启用换行。您可以重新定义\CJKglue为空宏以防止换行。

    (再次抱歉,仅限中文文档xeCJK。)

  2. 防止前后换行。我们应该将它们视为 CJK 表意字符,而不是全角左标点或右标点。\xeCJKDeclareCharClass中的高级宏xeCJK可以解决问题。

  3. 将全角空格 (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}

相关内容