
Я делаю набор карточек, которые помогут мне практиковать кандзи, и формат, который мне нужен, довольно прост: на лицевой стороне у меня будет иероглиф, а на обороте — его значение и прочтение (сна-чтения икун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
У вас есть несколько вопросов:
Предотвратить перенос строк между символами CJK. Между любыми двумя символами CJK есть
\CJKglue
, который изначально определен как\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}