![使用 Babel 纠正日语换行](https://linux22.com/image/387124/%E4%BD%BF%E7%94%A8%20Babel%20%E7%BA%A0%E6%AD%A3%E6%97%A5%E8%AF%AD%E6%8D%A2%E8%A1%8C.png)
平均能量损失
\documentclass{article}
\usepackage{xeCJK}
\usepackage[japanese]{babel}
\begin{document}
\selectlanguage{japanese}
日本語をををををををををををををををををををををををををををかいぎょうします。
\end{document}
在某些日语印刷标准中,有文章规定以下字符不能作为一行的开头:
- 。
- 、
- 」
- )
- ;
- :
- ・
- ぁぃぅぇぉ
- っ
- ゃゅょ
ETC。
类似地,下列语句也不能结束一行:
- 「
- (
ETC。
Babel 对上述内容的覆盖并不完整:例如,行不会以 、 或 。 开头,但会以 ゃ 开头。我完全不知道如何编辑japanese.ldf
Babel 提供的文件,但我想我需要:
- 以某种方式改变连字符规则,并且
- 添加某种异常,这样每次 LaTeX 想要在上述字符之一上换行时,我就不会得到过满的水平盒子。
<EDIT> 正确的解决方案是将像 这样的序列ぎ\nょ
更改为ぎょ\n
。即,将ょ
保留在上一行。这将创建一个溢出的水平盒子,因此必须进行例外处理。 </EDIT>
到目前为止,我只是插入换行符来处理第二种情况。对于第一种情况,我尝试插入零宽度不间断空格使用symbol{"FEFF}
,但(可能是由于我的字体选择)这实际上会产生一个具有一定宽度的空格(并且由于相邻字符是 CJK,因此仍然会中断)。我也尝试将相关字符放在 中\mbox{}
,这可行,但对于大型文档来说,这就像手动换行一样费力。
<EDIT> 另一种方法(仅稍微)更灵活,即\nolinebreak
在不能开始一行的字符前添加,并\linebreak[1]
在不能结束一行的字符前添加。这显然仍然很费力。 </EDIT>
如果相关的话,使用 XeLaTeX(和 BibTex)进行编译。
答案1
您能提供 MWE 或一些示例文本以供实验吗?
有一个几乎可以解决的问题,可能如下:
自bxjsbook
课程 (这个答案)已经很好地完成了标点符号的工作(因为它正在调用xeCJK
),例如使用随机维基百科文章直接复制粘贴,
(相关项目以红色标记)
一个潜在的解决方案可能涉及\XeTeXinterchartoks
(改编自这里),并在字符类之间转换时插入nolinebreak代码。
相比于此
但是:(1)ㇷ゚
会导致问题,(2)字体必须与bxjsbook
实际使用的字体同步,(3)序列 ーター 未被捕获;(4)其他任何情况。
此外,由于小假名因这个原因而被删除,因此观察其对布局其他方面的影响(如果有的话)也是很有用的xeCJK
。
粗糙但成熟的 MWE
%With xelatex, \documentclass[xelatex,ja=standard]{bxjsbook} is the best.
%\documentclass[a4paper,10pt,twoside,draft,xelatex,ja=standard]{bxjsbook}
\documentclass[a5paper,12pt,twoside,xelatex,ja=standard]{bxjsbook}
\usepackage{xcolor}
\usepackage{fontspec}
\newfontface\fjp{Noto Serif JP}
\XeTeXinterchartokenstate=1
\chardef\CharNormal=0
\makeatletter
% Test for old and new versions of the latex kernel
\ifx\e@alloc@intercharclass@top\@undefined
\chardef\CharBound=255
\else
\chardef\CharBound=\e@alloc@intercharclass@top
\fi
\makeatother
%\chardef\CharBound=4095
\newXeTeXintercharclass\CharSKana
\XeTeXcharclass`ゝ=\CharSKana
\XeTeXcharclass`ゞ=\CharSKana
\XeTeXcharclass`ー=\CharSKana
\XeTeXcharclass`ァ=\CharSKana
\XeTeXcharclass`ィ=\CharSKana
\XeTeXcharclass`ゥ=\CharSKana
\XeTeXcharclass`ェ=\CharSKana
\XeTeXcharclass`ォ=\CharSKana
\XeTeXcharclass`ッ=\CharSKana
\XeTeXcharclass`ャ=\CharSKana
\XeTeXcharclass`ュ=\CharSKana
\XeTeXcharclass`ョ=\CharSKana
\XeTeXcharclass`ヮ=\CharSKana
\XeTeXcharclass`ヵ=\CharSKana
\XeTeXcharclass`ヶ=\CharSKana
\XeTeXcharclass`ぁ=\CharSKana
\XeTeXcharclass`ぃ=\CharSKana
\XeTeXcharclass`ぅ=\CharSKana
\XeTeXcharclass`ぇ=\CharSKana
\XeTeXcharclass`ぉ=\CharSKana
\XeTeXcharclass`っ=\CharSKana
\XeTeXcharclass`ゃ=\CharSKana
\XeTeXcharclass`ゅ=\CharSKana
\XeTeXcharclass`ょ=\CharSKana
\XeTeXcharclass`ゎ=\CharSKana
\XeTeXcharclass`ゕ=\CharSKana
\XeTeXcharclass`ゖ=\CharSKana
\XeTeXcharclass`ㇰ=\CharSKana
\XeTeXcharclass`ㇱ=\CharSKana
\XeTeXcharclass`ㇲ=\CharSKana
\XeTeXcharclass`ㇳ=\CharSKana
\XeTeXcharclass`ㇴ=\CharSKana
\XeTeXcharclass`ㇵ=\CharSKana
\XeTeXcharclass`ㇶ=\CharSKana
\XeTeXcharclass`ㇷ=\CharSKana
\XeTeXcharclass`ㇸ=\CharSKana
\XeTeXcharclass`ㇹ=\CharSKana
%\XeTeXcharclass`ㇷ゚=\CharSKana
\XeTeXcharclass`ㇺ=\CharSKana
\XeTeXcharclass`ㇻ=\CharSKana
\XeTeXcharclass`ㇼ=\CharSKana
\XeTeXcharclass`ㇽ=\CharSKana
\XeTeXcharclass`ㇾ=\CharSKana
\XeTeXcharclass`ㇿ=\CharSKana
\XeTeXcharclass`々=\CharSKana
\XeTeXcharclass`〻=\CharSKana
\XeTeXcharclass`ょ=\CharSKana
%\XeTeXcharclass`0=\CharNumbers
%\XeTeXcharclass`1=\CharNumbers
%\XeTeXcharclass`2=\CharNumbers
%\XeTeXcharclass`3=\CharNumbers
%\XeTeXcharclass`4=\CharNumbers
%\XeTeXcharclass`5=\CharNumbers
%\XeTeXcharclass`6=\CharNumbers
%\XeTeXcharclass`7=\CharNumbers
%\XeTeXcharclass`8=\CharNumbers
%\XeTeXcharclass`9=\CharNumbers
%%\newtoks\TokSetfont
%%\TokSetfont={\begingroup\fontspec{Latin Modern Mono}}
%%\XeTeXinterchartoks\CharNormal\CharNumbers=\TokSetfont
%%\XeTeXinterchartoks\CharBound\CharNumbers=\TokSetfont
%%\XeTeXinterchartoks\CharNumbers\CharNormal={\endgroup}
%%\XeTeXinterchartoks\CharNumbers\CharBound={\endgroup}
\newtoks\TokSetfont
%\TokSetfont={\begingroup\fontspec{Latin Modern Mono}}
%\XeTeXinterchartoks\CharNormal\CharNumbers=\TokSetfont
%\XeTeXinterchartoks\CharBound\CharNumbers=\TokSetfont
%\XeTeXinterchartoks\CharNumbers\CharNormal={\endgroup}
%\XeTeXinterchartoks\CharNumbers\CharBound={\endgroup}
%add \nolinebreak immediately before characters that cannot begin a line and add \linebreak[1] immediately before characters that cannot end a line
\TokSetfont={\begingroup\nolinebreak\fjp\color{red}}
\XeTeXinterchartoks\CharNormal\CharSKana=\TokSetfont
\XeTeXinterchartoks\CharBound\CharSKana=\TokSetfont
\XeTeXinterchartoks\CharSKana\CharNormal={\endgroup}
\XeTeXinterchartoks\CharSKana\CharBound={\endgroup}
\begin{document}
\title{題}
\author{作者}
\date{日付}
\maketitle
\clearpage
\tableofcontents
\clearpage
\chapter{章1}
ウェルギリウスの作品。
作品作品作品作品作品作作品作品作品作品作品作品ぎょ
\clearpage
\section{節1.1}
事実両者を区別した。
\clearpage
\section{節1.2}
キケロは上流の家柄の出。
太陽系(たいようけい、英語: Solar System[注 2]、ラテン語: systema solare シュステーマ・ソーラーレ)とは、太陽および、その重力で周囲を直接的、あるいは間接的に公転する天体[注 3]から構成される構造である。主に、現在確認されている8個の惑星[注 4]、5個の準惑星、それらを公転する衛星、そして多数の太陽系小天体などから成る[11]。間接的に太陽を公転している天体のうち衛星2つは、惑星では最も小さい水星よりも直径が大きい\textsuperscript{[注 5]}。
太陽系は約46億年前、星間分子雲の重力崩壊によって形成されたとされている。総質量のうち、ほとんどは太陽が占めており、残りの質量も大部分は木星が占めている。内側を公転している小型な水星、金星、地球、火星は、主に岩石から成る地球型惑星(岩石惑星)で、木星と土星は、主に水素とヘリウムから成る木星型惑星(巨大ガス惑星)で、天王星と海王星は、メタンやアンモニア、氷などの揮発性物質といった、水素やヘリウムよりも融点の高い物質から成る天王星型惑星(巨大氷惑星)である。8個の惑星はほぼ同一平面上にあり、この平面を黄道面と呼ぶ。
他にも、太陽系には多数の小天体を含んでいる[注 6]。火星と木星の間にある小惑星帯は、地球型惑星と同様に岩石や金属などから構成されている小天体が多い。それに対して、海王星の軌道の外側に広がる、主に氷から成る太陽系外縁天体が密集している、エッジワース・カイパーベルトや散乱円盤天体がある。そして、そのさらに外側にはセドノイドと呼ばれる、新たな小惑星の集団も発見されてきている。これらの小天体のうち、数十個から数千個は自身の重力で、球体の形状をしているものもある[16]。そのような天体は準惑星に分類される事がある。現在、準惑星には小惑星帯のケレスと、太陽系外縁天体の冥王星、ハウメア、マケマケ、エリスが分類されている。これらの2つの分類以外にも、彗星、ケンタウルス族、惑星間塵など、様々な小天体が太陽系内を往来している。惑星のうち6個が、準惑星では4個が自然に形成された衛星を持っており、慣用的に「月」と表現される事がある[注 7]。木星以遠の惑星には、周囲を公転する小天体から成る環を持っている。
太陽から外部に向かって放出されている太陽風は、太陽圏(ヘリオスフィア)と呼ばれる、星間物質中に泡状の構造を形成している。境界であるヘリオポーズでは太陽風による圧力と星間物質による圧力が釣り合っている。長周期彗星の源と考えられているオールトの雲は太陽圏の1,000倍離れた位置にあるとされている。銀河系(天の川銀河)の中心から約26,000光年離れており、オリオン腕に位置している。
歴史上の大部分において、人類は太陽系に対して正しい概念を持っていなかった。中世の末期まで、ルネサンスでは、地球を中心に全ての天体が公転しているという天動説の概念が主流であった[注 8]。そんな中、ギリシャの哲学者アリスタルコスは、現在の太陽系に近いモデルを推測し、ニコラウス・コペルニクスが初めてそのモデルを地動説として体系化した[18][19]。17世紀には、ガリレオ・ガリレイ、ヨハネス・ケプラー、アイザック・ニュートンは物理学的観点から地動説を発展させ、惑星が地球と同じ物理法則に従っているという考え方は徐々に受け入れられるようになっていった。この頃に発明された望遠鏡は、月や他の惑星に関する多数の発見に繋がり、そして望遠鏡の改良や無人探査機による探査で、山やクレーターといった地質的特徴や、砂嵐、雲、氷冠などの気象的特徴も知られるようになった。
望遠鏡による観測
ニュートンが観測に用いた望遠鏡のレプリカ。
初期の太陽系の科学的観測は望遠鏡によって行われ、天文学者は、肉眼では観測しにくい天体を星図に書き記すようになった。太陽系の個々の天体について、初めて詳細な物理的観測を行ったのはガリレオ・ガリレイで、月の表面にあるクレーターや、太陽の黒点、木星を公転する4つの衛星を発見した[20]。ガリレオの発見に続いて、クリスティアーン・ホイヘンスは、土星の環と衛星タイタンを発見し[21]、ジョヴァンニ・カッシーニは4つの土星の衛星と、環の中にあるカッシーニの間隙を発見した[22]。
エドモンド・ハレーは1705年に、彗星を繰り返し観測した結果、75〜76年の周期で同じ彗星が回帰している事を発見し、太陽を公転する惑星以外の天体の存在を示す証拠となった[23]。また、前年の1704年には、初めて英語で「Solar System」という単語が用いられるようになった[24]。
1781年、ウィリアム・ハーシェルがおうし座の方向で連星系を探索していた際、彗星とおぼしき天体を発見したと発表したが、後の軌道計算の結果、新惑星の天王星である事が判明した[25]。
1801年にジュゼッペ・ピアッツィが、火星と木星の間を公転する小さな天体ケレスを発見した。発見当初は、新たな惑星とされていたが、その後の観測で、付近に数千個もの似たような小天体が発見されるようになり、ケレスもこうした小天体に再分類された[26]。
詳細は「海王星の発見」を参照
1846年には、天王星の軌道が実際の計算と一致しない事から、外側から影響を与えている新たな惑星があると考えたユルバン・ルヴェリエによる計算を基に観測を行った、ヨハン・ゴットフリート・ガレとハインリヒ・ダレストが新惑星、海王星を発見した[27][28]。
しかし、海王星の発見後も、他の惑星や海王星自身の軌道に依然として誤差が生じていたため、海王星の外側にさらに惑星が存在すると考えられ、パーシヴァル・ローウェルは仮説上の天体を惑星Xと呼んだ[29]。彼の死後、ローウェルの予想を基にローウェル天文台で観測を行っていたクライド・トンボーが新惑星、冥王星を発見した。しかし、その後の観測で、冥王星は他の惑星の軌道に影響を及ぼすには小さすぎる事が判明したため、その発見は偶然によるものであった。ケレスのように、当初は惑星であるとされていたが、周辺に同じような天体が発見されるようになったため、2006年に国際天文学連合によって準惑星に再分類された[28]。
1992年、ハワイ大学のデビッド・C・ジューイットとマサチューセッツ工科大学のジェーン・ルーは冥王星軌道の周辺を公転する小天体アルビオンを発見した。アルビオンは、太陽系外縁天体としては初めて発見された天体である。この発見により、冥王星のような天体は、氷から成る小天体の群れを成していると考えられるようになった[30][31]。
2005年、マイク・ブラウンとチャドウィック・トルヒージョ、デイヴィッド・ラビノウィッツは散乱円盤天体のエリスを発見し、当初は冥王星よりも大きく、海王星以遠にある天体では最大と考えられていた[32]。しかし、2015年7月に冥王星を探査した探査機ニュー・ホライズンズによる観測で、現在は冥王星よりもわずか小さく、質量はやや大きいとされている。
\clearpage
%ゝゞーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇷ゚ㇺㇻㇼㇽㇾㇿ々〻
\chapter{章2.2}
事実両者を区別した。
ITエンジニアを目指す女子高生たちの学園ライフ4コマ漫画 ぱいじょ!
\clearpage
\section{節2.1}
キケロは上流の家柄の出。
\clearpage
\section{節2.2}
ウェルギリウスの作品。
\clearpage
\chapter{章3}
キケロは上流の家柄の出。
\section{節3.1}
ウェルギリウスの作品。
\clearpage
\section{節3.2}
事実両者を区別した。
\texttt{https://tex.stackexchange.com/questions/320021/xelatex-using-japanese-ldf-for-babel-causes-invalid-characters-errors}
\clearpage
\end{document}
或者,
遍历标记列表(使用 DC 的 zz 宏)并对不允许换行的假名进行字符串比较(使用函数expl3
以方便使用),也是可行的 - 但需要将宏应用于文本。(需要将宏应用于每个段落。)
无需担心字体同步;而且ㇷ゚ 可以在桌子底下站稳脚跟,尽管还是有点问题。
平均能量损失
\documentclass[a5paper,12pt,xelatex,ja=standard]{bxjsbook}
\usepackage{titlesec}
\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{}{0pt}{\ifnum\thechapter=0\else 章\thechapter\fi}
\titleformat{\section}[display]
{\normalfont\Large\bfseries}{}{0pt}{節\thesection}
\usepackage{xparse}
\ExplSyntaxOn
\newcommand{\strcase}[1]{%
\str_case:nnTF {#1} {
{ゝ}{}
{ゞ}{}
{ー}{}
{ァ}{}
{ィ}{}
{ゥ}{}
{ェ}{}
{ォ}{}
{ッ}{}
{ャ}{}
{ュ}{}
{ョ}{}
{ヮ}{}
{ヵ}{}
{ヶ}{}
{ぁ}{}
{ぃ}{}
{ぅ}{}
{ぇ}{}
{ぉ}{}
{っ}{}
{ゃ}{}
{ゅ}{}
{ょ}{}
{ゎ}{}
{ゕ}{}
{ゖ}{}
{ㇰ}{}
{ㇱ}{}
{ㇲ}{}
{ㇳ}{}
{ㇴ}{}
{ㇵ}{}
{ㇶ}{}
{ㇷ}{}
{ㇸ}{}
{ㇹ}{}
{ㇷ゚}{}
{ㇺ}{}
{ㇻ}{}
{ㇼ}{}
{ㇽ}{}
{ㇾ}{}
{ㇿ}{}
{々}{}
{〻}{}
}{\nolinebreak}{}
}
\ExplSyntaxOff
%%https://tex.stackexchange.com/questions/364494/whats-the-best-way-to-explode-a-string-into-characters-process-each-character
%\def\zz#1{\def\zzsep{}\zzz#1\relax}
%\def\zzz#1{\ifx\relax#1\else\zzsep\def\zzsep{+}\fbox{#1}\expandafter\zzz\fi}
\def\zz#1{\def\zzsep{}\zzz#1\relax}
\def\zzz#1{\ifx\relax#1\else\def\zzsep{\strcase{#1}}\zzsep#1\expandafter\zzz\fi}
\begin{document}
\title{題}
\author{作者}
\date{日付}
\maketitle
\clearpage
\tableofcontents
\clearpage
\chapter{ Test case}
\section{ Without 禁則 line breaking}
量ぁ 量ぃ 量ぅ 量ぇ 量ぉ 量っ 量ゃ 量ゅ 量ょ 量ゎ 量ゕ量ゖ 量ㇰ 量ㇱ 量ㇲ 量ㇳ 量ㇴ 量ㇵ 量ㇶ 量ㇷ 量ㇸ量ㇹ量ㇷ゚ 量ㇺ 量ㇻ 量ㇼ 量ㇽ 量ㇾ 量ㇿ 量々 量〻
\section{ With 禁則 line breaking}
\zz{量ぁ 量ぃ 量ぅ 量ぇ 量ぉ 量っ 量ゃ 量ゅ 量ょ 量ゎ 量ゕ量ゖ 量ㇰ 量ㇱ 量ㇲ 量ㇳ 量ㇴ 量ㇵ 量ㇶ 量ㇷ 量ㇸ量ㇹ
量ㇷ゚ 量ㇺ 量ㇻ 量ㇼ 量ㇽ 量ㇾ 量ㇿ 量々 量〻}
\clearpage
\vfill
\small
\texttt{https://tex.stackexchange.com/questions/320021/xelatex-using-japanese-ldf-for-babel-causes-invalid-characters-errors}
\end{document}
答案2
这是似乎可以让它发挥作用的序言。它完全衍生自上面的@Cicada 的答案(公认的答案)。
% !TeX root = ./resume.tex
\documentclass[10pt, a4paper, sans]{moderncv}
%% Style of CV.
\moderncvstyle{classic}
\moderncvcolor{blue}
%% CJK support.
\input{cjk_support.tex}
cjk_support.tex
%! TEX root = resume.tex
\usepackage{xeCJK}
\setCJKmainfont{Noto Sans CJK JP}
\setCJKsansfont{Noto Sans CJK JP}
\setCJKmonofont{Noto Sans Mono CJK JP}
%% Provide 禁則 rules!
\input{no_breaks.tex}
no_breaks.tex
%\newfontface\fjp{Noto Sans CJK JP}
%% EDIT: Use this instead so bold, italics, are preserved.
% (Add `ItalicFont={<fontname>}`, etc., as needed.
\setfontface\fjp{Noto Sans CJK JP}[
BoldFont={Noto Sans CJK JP Bold}
]
\XeTeXinterchartokenstate=1
\chardef\CharNormal=0
% Test for old and new versions of the latex kernel
\makeatletter
\ifx\e@alloc@intercharclass@top\@undefined
\chardef\CharBound=255
\else
\chardef\CharBound=\e@alloc@intercharclass@top
\fi
\makeatother
\input{no_break_before.tex}
\input{no_break_after.tex}
no_break_before.tex
\newXeTeXintercharclass\noBreakBefore
\XeTeXcharclass`)=\noBreakBefore
\XeTeXcharclass`]=\noBreakBefore
\XeTeXcharclass`}=\noBreakBefore
\XeTeXcharclass`、=\noBreakBefore
\XeTeXcharclass`〕=\noBreakBefore
\XeTeXcharclass`〉=\noBreakBefore
\XeTeXcharclass`》=\noBreakBefore
\XeTeXcharclass`」=\noBreakBefore
\XeTeXcharclass`』=\noBreakBefore
\XeTeXcharclass`】=\noBreakBefore
\XeTeXcharclass`〙=\noBreakBefore
\XeTeXcharclass`〗=\noBreakBefore
\XeTeXcharclass`〟=\noBreakBefore
\XeTeXcharclass`⦆=\noBreakBefore
\XeTeXcharclass`»=\noBreakBefore
\XeTeXcharclass`ゝ=\noBreakBefore
\XeTeXcharclass`ゞ=\noBreakBefore
\XeTeXcharclass`ー=\noBreakBefore
\XeTeXcharclass`ァ=\noBreakBefore
\XeTeXcharclass`ィ=\noBreakBefore
\XeTeXcharclass`ゥ=\noBreakBefore
\XeTeXcharclass`ェ=\noBreakBefore
\XeTeXcharclass`ォ=\noBreakBefore
\XeTeXcharclass`ッ=\noBreakBefore
\XeTeXcharclass`ャ=\noBreakBefore
\XeTeXcharclass`ュ=\noBreakBefore
\XeTeXcharclass`ョ=\noBreakBefore
\XeTeXcharclass`ヮ=\noBreakBefore
\XeTeXcharclass`ヵ=\noBreakBefore
\XeTeXcharclass`ヶ=\noBreakBefore
\XeTeXcharclass`ぁ=\noBreakBefore
\XeTeXcharclass`ぃ=\noBreakBefore
\XeTeXcharclass`ぅ=\noBreakBefore
\XeTeXcharclass`ぇ=\noBreakBefore
\XeTeXcharclass`ぉ=\noBreakBefore
\XeTeXcharclass`っ=\noBreakBefore
\XeTeXcharclass`ゃ=\noBreakBefore
\XeTeXcharclass`ゅ=\noBreakBefore
\XeTeXcharclass`ょ=\noBreakBefore
\XeTeXcharclass`ゎ=\noBreakBefore
\XeTeXcharclass`ゕ=\noBreakBefore
\XeTeXcharclass`ゖ=\noBreakBefore
\XeTeXcharclass`ㇰ=\noBreakBefore
\XeTeXcharclass`ㇱ=\noBreakBefore
\XeTeXcharclass`ㇲ=\noBreakBefore
\XeTeXcharclass`ㇳ=\noBreakBefore
\XeTeXcharclass`ㇴ=\noBreakBefore
\XeTeXcharclass`ㇵ=\noBreakBefore
\XeTeXcharclass`ㇶ=\noBreakBefore
\XeTeXcharclass`ㇷ=\noBreakBefore
\XeTeXcharclass`ㇸ=\noBreakBefore
\XeTeXcharclass`ㇹ=\noBreakBefore
\XeTeXcharclass`ㇷ=\noBreakBefore
\XeTeXcharclass`゚=\noBreakBefore
\XeTeXcharclass`ㇺ=\noBreakBefore
\XeTeXcharclass`ㇻ=\noBreakBefore
\XeTeXcharclass`ㇼ=\noBreakBefore
\XeTeXcharclass`ㇽ=\noBreakBefore
\XeTeXcharclass`ㇾ=\noBreakBefore
\XeTeXcharclass`ㇿ=\noBreakBefore
\XeTeXcharclass`々=\noBreakBefore
\XeTeXcharclass`〻=\noBreakBefore
\XeTeXcharclass`‐=\noBreakBefore
\XeTeXcharclass`゠=\noBreakBefore
\XeTeXcharclass`–=\noBreakBefore
\XeTeXcharclass`〜=\noBreakBefore
\XeTeXcharclass`~=\noBreakBefore
\XeTeXcharclass`?=\noBreakBefore
\XeTeXcharclass`!=\noBreakBefore
\XeTeXcharclass`‼=\noBreakBefore
\XeTeXcharclass`⁇=\noBreakBefore
\XeTeXcharclass`⁈=\noBreakBefore
\XeTeXcharclass`⁉=\noBreakBefore
\XeTeXcharclass`・=\noBreakBefore
\XeTeXcharclass`:=\noBreakBefore
\XeTeXcharclass`;=\noBreakBefore
\XeTeXcharclass`/=\noBreakBefore
\XeTeXcharclass`。=\noBreakBefore
\newtoks\NoBreakBeforeFont
% \NoBreakBeforeFont={\begingroup\nolinebreak\fjp\color{red}}
\NoBreakBeforeFont={\begingroup\nolinebreak\fjp}
\XeTeXinterchartoks\CharNormal\noBreakBefore=\NoBreakBeforeFont
\XeTeXinterchartoks\noBreakBefore\CharNormal={\endgroup}
\XeTeXinterchartoks\CharBound\noBreakBefore=\NoBreakBeforeFont
\XeTeXinterchartoks\noBreakBefore\CharBound={\endgroup}
no_break_after.tex
\newXeTeXintercharclass\noBreakAfter
\XeTeXcharclass`(=\noBreakAfter
\XeTeXcharclass`[=\noBreakAfter
\XeTeXcharclass`{=\noBreakAfter
\XeTeXcharclass`〔=\noBreakAfter
\XeTeXcharclass`〈=\noBreakAfter
\XeTeXcharclass`《=\noBreakAfter
\XeTeXcharclass`「=\noBreakAfter
\XeTeXcharclass`『=\noBreakAfter
\XeTeXcharclass`【=\noBreakAfter
\XeTeXcharclass`〘=\noBreakAfter
\XeTeXcharclass`〖=\noBreakAfter
\XeTeXcharclass`〞=\noBreakAfter
\XeTeXcharclass`⦅=\noBreakAfter
\newtoks\NoBreakAfterFont
% \NoBreakAfterFont={\begingroup\fjp\color{blue}}
\NoBreakAfterFont={\begingroup\fjp}
\XeTeXinterchartoks\CharNormal\noBreakAfter=\NoBreakAfterFont
\XeTeXinterchartoks\noBreakAfter\CharNormal={\nolinebreak\endgroup}
\XeTeXinterchartoks\CharBound\noBreakAfter=\NoBreakAfterFont
\XeTeXinterchartoks\noBreakAfter\CharBound={\nolinebreak\endgroup}
(我不知道为什么,但我更喜欢把东西放在它们自己的小文件中......)