2

MWE

\documentclass{article}

\usepackage{xeCJK}
\usepackage[japanese]{babel}

\begin{document}
   \selectlanguage{japanese}
   日本語をををををををををををををををををををををををををををかいぎょうします。
\end{document}

In some typographical standards for Japanese, there are articles which state that the following characters cannot begin a line:

  • ぁぃぅぇぉ
  • ゃゅょ

etc.

Similarly, the following cannot end a line:

etc.

Babel's coverage of the above is incomplete: lines won't begin with 、 or 。, but will with ゃ, for example. I'm completely ignorant of how to edit the japanese.ldf file provided with Babel but I suppose that I need to:

  • change the hyphenation rules somehow, and
  • add some sort of exception so I don't get an overfull hbox every time LaTeX wants to break a line on one of the above characters.

<EDIT> A correct solution would be one where sequences like ぎ\nょ are changed to ぎょ\n. I.e., where the is kept on the previous line. This would create an overfull hbox, so an exception would have to be made. </EDIT>

Up to this point, I've just been inserting linebreaks to handle the second case. For the first case, I've tried inserting a zero width no-break space using symbol{"FEFF}, but (perhaps due to my font choice) this actually produces a space with some width (and still breaks due to the neighbouring characters being CJK). I've also tried putting the relevant characters in a \mbox{}, which works but is as laborious as manual linebreaking for large documents.

<EDIT> Another way to do this that is (only slightly) more flexible, is add \nolinebreak immediately before characters that cannot begin a line and add \linebreak[1] immediately before characters that cannot end a line. This is clearly still quite laborious. </EDIT>

Compiling with XeLaTeX (and BibTex), if that's relevant.

  • 1
    I'm a maintainer of japanese.ldf; it does not contain any settings related to Japanese typographical standards (called "kinsoku"). – Hironobu YAMASHITA Dec 9 '18 at 12:07
  • @HironobuYAMASHITA Thank you for letting me know what it's called (禁則)! It would seem like fixing this problem requires me to edit something other than japanese.ldf. Do you know where? – jamesh625 Dec 10 '18 at 5:13
  • The problem lies in xeCJK's feature, and there is no easy way to add such a setting. In fact, the previous version of xeCJK contained kinsoku parameters for small kana characters ("ょ" etc.), but those were removed to avoid a bug in inter-character spacing. (-> continue) – Hironobu YAMASHITA Dec 10 '18 at 11:40
  • (-> continue) In xeCJK, characters which require a special handling for typographic requirements are categorized into character classees. And, the individual character classes are associated with some parameters (including kinsoku, inter-character spacing, etc). Currently there is a class for punctuations ("、", "。", ...), but no class is pre-defined for small kana ("ょ", "っ", ...). I don't know how to add one, and I don't know even this is the right solution, sorry. – Hironobu YAMASHITA Dec 10 '18 at 11:46
  • @HironobuYAMASHITA Thanks, it's good to know that Babel is not the correct file to edit, at least. I suppose I should think about making some sort of macro which just inserts the \[no]linebreak commands silently before compilation. I'll post it here if I get around to it. – jamesh625 Dec 11 '18 at 7:40
1

Can you supply an MWE or some example text to experiment with?

There is an almost-solution, possibly:

Since bxjsbook class (this answer) already does a pretty good job with punctuation (because it is calling xeCJK), example with a random Wikipedia article just raw copy-pasted in,

Sample text

(relevant items marked in red)

a potential solution could involve \XeTeXinterchartoks (adapting from here), and inserting the nolinebreak code when transitioning between character classes.

This (not starting a line) not starting a line

compared to this

at the end of the line

But: (1) ㇷ゚ causes problems, (2) the font has to be synchronized with the one bxjsbook actually uses, and (3) the sequence ーター is not being captured; (4) anything else.

Also, it would be useful to see the effect, if any, on other aspects of layout, since the small kana were removed from xeCJK for that reason.

Rough-and-ready-sortof-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}

Alternatively,

Iterating through the token list (with DC's zz macro) and string-comparing to the kana not allowed to break lines (using an expl3 function for ease of use), also works - but requires applying the macro to the text. (Need something to apply the macro to every paragraph.)

zz macro

No need to worry about synching fonts; and ㇷ゚ gets a foot under the table, although still acting up a bit.

List of rules is here (English) and here (Japanese).

MWE

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.