jlreq だと、和文ゴーストが効かない

jlreq だと、和文ゴーストが効かない

- O Kay の投稿
返信数: 4
https://doratex.hatenablog.jp/entry/20160611/1465601758
を参考に、下記のソースとタイプセットすると、
jsarticle と jlreq で異なります。
jlreq でも和文ゴーストが効くようにはできないでしょうか。

\documentclass[uplatex,jafontscale=0.924690]{jlreq}
%\documentclass[uplatex]{jsarticle}

\chardef\zenkakuSpace=\jis"2121\relax %% 全角スペース

\def\squarestar{%
  \zenkakuSpace % 全角スペースを出力
  \kern-1zw\relax % 1文字分戻る
  \begingroup
  \fboxsep=0pt
  \fboxrule=.5pt
  \framebox[1zw][c]{★}%
  \endgroup
  \kern-1zw\relax % 1文字分戻る
  \zenkakuSpace % 全角スペースを出力
}

\begin{document}

あいう★えお\par
あいう\squarestar えお

\fboxsep=0pt
\framebox[10zw][s]{あいう★えお}\par
\framebox[10zw][s]{あいう\squarestar えお}

ABC★XYZ\par
ABC\squarestar XYZ

\end{document}
O Kay への返信

Re: jlreq だと、和文ゴーストが効かない

- O Kay の投稿
手がかりを発見しました。

下記のソースの通り、jlreqだと、全角スペースは通常の和字扱いされていないからと思われます。

では、どうすればいいのか……というのがわかりません。

解決策をご教示いただければと思います。


\documentclass[uplatex,jafontscale=0.924690]{jlreq}
%\documentclass[uplatex]{jsarticle}


\begin{document}

\fboxsep=0pt
\framebox[10zw][s]{あいうえお}

\framebox[10zw][s]{あいう お}

\end{document}
O Kay への返信

Re: jlreq だと、和文ゴーストが効かない

- 本田 知亮 の投稿
こんな感じで行けると思います.

jlreqは独自のjfmを使うので
和文の扱いがちょっと違って,
全角空白がその違う部分に入っています.
ですので,全角空白だけ
「普通」に戻してみました.




\documentclass[uplatex,jafontscale=0.924690,narrow_kanjiskip]{jlreq}
%\documentclass[uplatex]{jsarticle}


\makeatletter

\chardef\zenkakuSpace\ucs"3000\relax %% 全角スペース
\def\jghost@jis@begin{\bgroup
\usekanji{\k@encoding}{jismin}{m}{n}
\zenkakuSpace
\kern-1zw
\egroup}

\def\jghost@jis@end{\bgroup
\usekanji{\k@encoding}{jismin}{m}{n}
\kern-1zw
\zenkakuSpace
\egroup}


\DeclareFontFamily{JY2}{jismin}{}
\DeclareFontFamily{JT2}{jismin}{}
\DeclareFontShape{JY2}{jismin}{m}{n} {<-> s*[0.92469] upjisr-h}{}
\DeclareFontShape{JT2}{jismin}{m}{n} {<-> s*[0.92469] upjisr-v}{}

\def\squarestar{%
\jghost@jis@begin
\begingroup
\fboxsep=0pt
\fboxrule=.5pt
\framebox[1zw][c]{★}%
\endgroup
\jghost@jis@end
}
le}

\makeatother

\begin{document}


あいう\char\ucs"3000 えお

ABC★XYZ\par

ABC\squarestar XYZ

ABC XYZ\par



\fboxsep=0pt
\framebox[10zw][s]{あいう★えお}\par
\framebox[10zw][s]{あいう\squarestar えお}



ABC★XYZ\par
ABC\squarestar XYZ

\end{document}

本田 知亮 への返信

Re: jlreq だと、和文ゴーストが効かない

- O Kay の投稿
ありがとうございます。うまくいきました。

回答を待っている間もいろいろ試していました。\kcatcode` =16 としてもうまくいきません。
jlreq.cls をのぞいてみると、全角スペースに関して何かをされているようですが、読み取れませんでした。

さて、早速ご回答を試させていただきました。

なるほど、全角スペースを使う部分だけ upjisr にしているわけですね。


最初、
! LaTeX Error: Missing \begin{document}.
と出たので、消し忘れと思われる
le}
を削除しました。そうすると今度は
! LaTeX Error: Font JT2/jismin/m/n/10 not found.
と出て、「なぜ縦書きでないのにJT2?」と思い、
\DeclareFontShape の使い方を検索し、
s* の前に <-> を置くとうまくいきました。

おかげさまで解決しました。ありがとうございました。
O Kay への返信

Re: jlreq だと、和文ゴーストが効かない

- 本田 知亮 の投稿
ありゃ,なんか変なコピペミス・編集ミス
やらかしてますね.
適宜,読み替えていただけたようでよかったです.

>\kcatcode` =16 としてもうまくいきません。
jlreq.cls をのぞいてみると、全角スペースに関して何かをされているようですが、読み取れませんでした。


最初に考えたのが \kcatcode でしたが,これははずれでした.
全角空白まわりで
\kanjiskip/\xkanjiskjipの入り方が違うので
\inhibitspcodeかと思ったのですが,はずれ.
ここまできて,jlreqはjfmが違うことを思い出して,
jlreqのjfmを読んで,全角空白がtype 12になってるのをみて納得,
という流れでした.

自分でも事情に合わせたオレオレjfmを作ることがあるので,今回のghostの件は,このパターンがありうるかと思いました.