允許/強制在表意空間自動換行

允許/強制在表意空間自動換行

我正在製作一套抽認卡來幫助我練習漢字,我想要的格式非常簡單:在前面,我將有漢字,在背面我將有它的含義和讀法(與- 讀數和- 讀數在單獨的行上)。我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. 防止 CJK 字元之間斷行。任兩個 CJK 字元之間有一個 a \CJKglue,最初定義是為了\hskip 0pt plus 0.08\baselineskip\relax啟用換行。您可以重新定義\CJKglue為空宏以防止換行。

    (再次抱歉,只有中文文件xeCJK。)

  2. 防止前後斷行。我們應該將它們視為 CJK 表意字符,而不是全角左或右標點符號。\xeCJKDeclareCharClass中的高階巨集xeCJK可以解決這個問題。

  3. 製作一個全角空間(U+3000)作為 TeX 粘合,可以進行包裹,但可丟棄的(請參閱 TeXbook 第 14 章)。這對技術人員來說並不困難。

這是完整的工作範例:

在此輸入影像描述

\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}

相關內容