引数内の空白を認識

引数内の空白を認識

- 匿 名 の投稿
返信数: 4
こんにちは.そもそもTeXでできることなのか分かりませんが質問させていただきます.

例えば,okumacro.styを用いて
\ruby{明}{みん}\ruby{朝}{ちょう}\ruby{体}{たい}
とすれば「明朝体」にルビを付けられると思います.

これは全ての文字にルビをつける際は困難であるため,
\newruby{明 朝 体}{みん ちょう たい}
の様にスペースを挿入することで文字を分離しそれぞれにルビをつけるコマンドを作成することは可能でしょうか?文字数は任意です.

尚,途中で平仮名を含むときにはルビをつけないようにできると理想的ですが,この機能はなくても構いません.

よろしくお願いします.
匿 名 への返信

Re: 引数内の空白を認識

- Akira Kakuto の投稿
\documentclass{jsarticle}
\usepackage{pxrubrica}
\begin{document}
\ruby{明朝体}{みん|ちょう|たい}
\end{document}
Akira Kakuto への返信

Re: 引数内の空白を認識

- 岩熊 哲夫 の投稿
えっと,ご質問とはあまり関係ないのですが,組版の
規則の中で,熟語の場合でルビの語数が多い場合,
個々の漢字に別々のルビを振らなくしてもいいことに
なっています。たとえば「市長」に「しちょう」と
ルビを振るとき,「市」のところに「しち」がきて
「長」のところに「ょう」が来るとかです。
さらに,「明朝体」に「みんちょうたい」と振って,
もし「み」とか「い」が前後の文字にかかるくらいに
はみ出してもいいんだそうです。一応参考まで。

もちろん,
ルビが短いと「知恵」のような場合,「知」のところ
は「ち 」のように「ち」と“スペース”が入り,「恵」
にも「え 」と振るのが基本のようです。なお,「ち」
と「え」をそれぞれ中央揃えにする組み方も可です。
匿 名 への返信

Re: 引数内の空白を認識

- しっぽ 愛好家 の投稿

>スペースを挿入することで文字を分離しそれぞれにルビをつけるコマンドを作成する
下記のサンプルのようなことは可能です. このサンプル内の \@split@by@space@ の定義のように,マクロの引数の書式指定文字列に空白文字を用いても構いません.

\documentclass{jarticle}
\makeatletter
%%% 親文字列とルビの対応がついているかどうかといったチェックは省略.
%%% また,「平仮名を含むときにはルビをつけない」処理については,仕様の見当がつかないため未実装.
\DeclareRobustCommand*\newruby[2]{%
   \ifvmode \leavevmode \fi
   \begingroup
   \@split@by@space\@list@of@bases{#1}%
   \@split@by@space\@list@of@rubys{#2}%
   \let\@elt\@newruby@elt
   \def\@newruby@space{\def\@newruby@space{\hskip\kanjiskip}}%
   \@list@of@bases
   \endgroup}
\def\@split@by@space#1#2{%
%%% [例] \@split@by@space\@list@of@rubys{こ ねこ} の場合,
%%% 第 2 引数「こ ねこ」を空白を区切りとして切り分け「\@elt{こ}\@elt{ねこ}」に変換したものを
%%% 第 1 引数 \@list@of@rubys に格納
   \let\@templist\@empty
   \def\@tempx{\?}%
   \@split@by@space@#2 \? %%% Do NOT remove this space!
   \let#1\@templist}
\def\@split@by@space@#1 {%%% 空白文字を区切りとして引数を取得
   \def\@tempy{#1}%
   \ifx\@tempx\@tempy\else
      \expandafter\def\expandafter\@templist\expandafter{\@templist\@elt{#1}}%
      \expandafter\@split@by@space@
   \fi}
\def\@newruby@elt#1{%
   \@newruby@space
   \@pop@list\@curr@ruby\@list@of@rubys
   \def\@tempa{\ruby{#1}}%
   \expandafter\@tempa\expandafter{\@curr@ruby}}
\def\@pop@list#1#2{%
   \ifx#2\@empty \let#1\@empty
   \else         \expandafter\@pop@list@#2\@nil#1#2%
   \fi}
\def\@pop@list@\@elt#1#2\@nil#3#4{%
   \def#3{#1}%
   \def#4{#2}}
%
%%% 以下の \ruby の定義は暫定版(他の定義を用いてもよい)
%
\DeclareRobustCommand*\ruby[2]{%
   \ifvmode \leavevmode \fi
   \begingroup
   \setbox\z@\hbox{\hfil\@ruby#1\@nil\hfil}%
   \setbox\tw@\hbox{%
      \dimen@\f@size\p@ \divide\dimen@\tw@
      \edef\@ruby@size{\strip@pt\dimen@}%
      \fontsize\@ruby@size\z@\selectfont
      \hfil\@ruby#2\@nil\hfil}%
   \dimen@ \ifdim\wd\z@>\wd\tw@ \wd\z@ \else \wd\tw@ \fi
   \vbox{\offinterlineskip
      \hbox to\dimen@{\unhbox\tw@}%
      \vskip .1zw
      \hbox to\dimen@{\unhbox\z@}}%
   \endgroup}
\def\@ruby#1{%
   \def\@tempa{#1}%
   \ifx\@tempa\@nnil
      \unskip
   \else
      #1\hfill
      \expandafter\@ruby
   \fi}
\makeatother

\begin{document}
\newruby{猫}{ねこ}の子は
\newruby{子 猫}{こ ねこ},
寝ている
\newruby{子猫}{こねこ}%%% グループルビ(単発)
は
\newruby{寝 子 猫}{ね こ ねこ}というのかな?\hspace{1zw}%
寝子猫が集まると
\newruby{寝 子猫 族}{ね こねこ ぞく}%%% グループルビを含む場合
を形成するのかしら?
\end{document}
匿 名 への返信

Re: 引数内の空白を認識

- 匿 名 の投稿
大変お返事が遅くなりましたが,みなさま貴重なご意見ありがとうございました.

どちらも参考にさせていただきます.特に,しっぽ愛好会様のマクロは私の理想通りでした.ありがたく使わせていただきます.