Permitir/forçar quebra automática de palavras em espaços ideográficos

Permitir/forçar quebra automática de palavras em espaços ideográficos

Estou fazendo um conjunto de flashcards para me ajudar a praticar meus kanji, e o formato que quero é bem simples: Na frente terei o caractere, e no verso terei seus significados e leituras (comsobre-leituras ekun-leituras em linhas separadas). Estou usando uma classe de documento muito boa flacardspara isso e funciona bem.

O problema é que alguns cartões terão ummuitode leituras; tantos que a lista precisa ser encerrada. No momento, está quebrando quando o próximo caractere não cabe (quatro últimas linhas na imagem):

quebra automática de palavras indesejável

Os espaços entre cada leitura são U+3000 ESPAÇO IDEOGRÁFICO ( ), e eu gostaria que o XeLaTeX tratasse esse caractere como um espaço para quebra de linha, para não quebrar a linha no meio de uma leitura. Em outras palavras, o resultado deve ser mais próximo deste (exemplo construído manualmente):

quebra automática de palavras desejável

...mas deve satisfazer estes critérios:

  • Sem embalagem manual (se o cartão ficar mais largo, a linha deverá refluir automaticamente)
  • Os espaços que são removidos para embrulho devemnãoser renderizado (na imagem acima, eles são)
  • Os espaços renderizados entre entradas individuais devem ter exatamente a mesma largura que o espaço ideográfico teria (mesmo se a fonte for alterada), mas não precisa ser um caractere de espaço ideográfico real no PDF resultante (no entanto, seria preferível ter o caractere correto aí)

O formato exato de entrada não é fixo e pode ser alterado se desejado, desde que o espaçamento desejado seja alcançado.

MWE:

\PassOptionsToPackage{a4paper}{geometry}
\documentclass[frontgrid,backgrid]{flacards}
\usepackage{xeCJK}
\setCJKmainfont{MS Gothic}
\renewcommand{\cardtextstylef}{\Huge}
\renewcommand{\cardtextstyleb}{}
\begin{document}
\card{明}{bright, clear\\ メイ ミョウ\\ あ(かり) あか(るい) あか(るむ) あか(らむ) あき(らか) あ(ける) -あ(け) あ(く) あ(くる) あ(かす)}
\end{document}

Responder1

Você tem várias perguntas:

  1. Evite quebra de linha entre caracteres CJK. Existe um \CJKglueentre quaisquer dois caracteres CJK, que é inicialmente definido para \hskip 0pt plus 0.08\baselineskip\relaxpermitir o empacotamento. Você pode redefinir \CJKgluecomo uma macro vazia para evitar quebra automática.

    (Desculpe novamente pelo documento chinês xeCJKapenas.)

  2. Evite quebras de linha antes e depois . Devemos tratá-los como caracteres ideográficos CJK, em vez de pontuações à esquerda ou à direita em largura total. A macro avançada \xeCJKDeclareCharClassresolve xeCJKo problema.

  3. Faça um espaço de largura total (U+3000) para ser uma cola TeX, que permite embrulhar, mas édescartável(ver TeXbook Capítulo 14). Isto não é difícil para um TeXnician.

Aqui está o exemplo completo de trabalho:

insira a descrição da imagem aqui

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

informação relacionada