FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

今更人に聞けない改行文字のキホン

今更人に聞けないTeXにおける「改行文字」の基本




0.前置き

TeX/LaTeXアドベントカレンダー2015を眺めていたら自分でも記事が書きたくなってしまって,乗り遅れての記事になります。
TeXの基本ということで,やっぱりだれもが使う「改行文字」について。一応LaTeXでの文書作成をやったことがある人なら分かるようには書いているはず。

「改行」の機能についてではなく,「改行文字」についてです。強制改行とか三回以上の改行は効果ないとかそういう話じゃなくて,「改行文字」についてです。




1.二種類の改行文字LF,CR

まず,TeXとか関係なく,一般に改行文字には二種類あることをご存知でしょうか。

LF (LineFeed) ASCIIコード 10(10進法表記),012(8進法表記),0A(16進法表記)
CR (CarriageReturn) ASCIIコード 13(10進法表記),015(8進法表記),0D(16進法表記)

の二種類ですね。こう二種類あるのは歴史的経緯によるものだそうです。そして,OSによってどの改行文字を使っているかが異なるんですね。

改行=LF一文字 : おもにUnix系 Mac OS X を含む
改行=CR+LF : おもにWindows
改行=CR一文字 : かつてのMac OS 9など

これはちょっと考えてみれば,厄介な話であることは容易に想像がつくはずです。

あなたがTeXの開発者だったと想像してください。
Mac OS Xユーザ,Windowsユーザ,Mac OS 9ユーザの三人が,全く同じ見た目のテキストファイルをTeXでコンパイルしたとしましょう(例を以下に示す)。ちなみに,\documentclassも\begin{document}もなくてLaTeXユーザには目新しいソースかもしれませんが,LaTeXではない,生のTeXに通すべきソースファイルっていうのはこんな感じです。文書の始まりを明示する\begin{document}みたいなのはなくて,代わりに\byeで文書の終わりを明示します。

———————————————————
hoge
hage

hige
\bye
———————————————————

3人のテキストファイルは,すべて見た目が上記のようで同じかもしれないけど,そこに含まれている改行文字は異なります。(LF)(CR)を仮想的に可視化して書いてあげると,こんな感じになっているはずです。
Mac OS Xユーザなら,

———————————————————
hoge(LF)
hage(LF)
(LF)
hige(LF)
\bye
———————————————————

Windowsユーザなら,

———————————————————
hoge(CR)(LF)
hage(CR)(LF)
(CR)(LF)
hige(CR)(LF)
\bye
———————————————————

Mac OS 9ユーザなら,

———————————————————
hoge(CR)
hage(CR)
(CR)
hige(CR)
\bye
———————————————————

になっているはずです。

これらに対して,全て同一の出力

===================
hogehage
hige
===================

をGetできなくてはいけません。Knuth氏はどのようにこれを解決したでしょうか。




2.TeXによる改行文字の処理(仮)

それはというと,
「一旦テキストファイル中の改行文字(CRおよびLF)を全て外した上で,一律にCRを入れる」
というものです。

改行文字(CR or LF)に遭遇した瞬間,それを外して,CRを入れるのです。
そして,必ずそのCRにより行を終了します。

先ほどの例では,行末の(LF)ないし(CR)(LF)ないし(CR)をすべて一旦外して,
次のように書き換えてしまいます。

———————————————————
hoge(CR)
hage(CR)
(CR)
hige(CR)
\bye
———————————————————

そして空行(つまり,いきなり(CR)が来る行)があったっらそこで改行します。二行以上空行がつづいても,出力の改行は一回です。

===================
hogehage
hige
===================

と出力されるわけですね。Mac OS Xユーザからしたら,「LFを入力したはずなのに,出力は全部CRになっている!」という事態が発生しているわけで,人によっては気に入らない人もいるかもしれませんが(いないか…?),そういう仕様です。

と,天下り的に説明してきたわけですが,本当にそうなっているのか確かめないことには意味がありませんな!というわけで確かめてみることにしましょう。そのためには,カテゴリコードについて理解し,入力した文字がASCIIコード何番の文字として認識されるかという知識を得る必要があります。というわけで,これからその2点について順に見て行った後,本当に「LF入力が全部CR化するか」を検証していきたいと思います。




3.カテゴリコード

「TeX Wiki TeX入門/マクロ作成」のページに詳しいですから,そちらをあわせてお読み下さればと思います。
そこから引用させていただくと,

(引用始め)

TeXはこのように文字の分類をしているわけですが,TeXはコンピュータプログラムなので,「英文字」とか「空白文字」という概念を理解しているわけではなくて,単に11番目のカテゴリーだとか5番目のカテゴリーだとか把握しているのです。例えば「“a”は英文字だ」という代わりに「文字コード97の文字は11番目のカテゴリーの文字だ」という具合です。TeXはある文字コードの文字がどの分類に属するかを記憶しているわけです。

(引用終わり:参照2015/12/29)

そして,その「n番目のカテゴリーの文字」の分類は次のようになっています。























































































カテゴリコード分類名デフォルトでこのカテゴリコードを持つ文字
0エスケープ文字\
1グループ開始文字{
2グループ終了文字}
3数式モードへの移行文字$
4アラインメントタブ&
5行の終了文字(CR):ASCII13
6パラメータ文字#
7上付き文字^
8下付き文字_
9無視する文字(NUL):ASCII0
10空白文字(SP):ASCII32,半角スペースのこと
11英文字A,B,C,…,Z,a,b,c,…,z
12その他文字!”()+-,.:;*<>=@/`[]1234567890の各文字と,(LF):ASCII10
13アクティブ文字~
14コメント文字%
15無効文字(DEL):ASCII127


というわけで,(CR)は通常,カテゴリコード5番の「行の終了文字」に分類されているので,ここで改行が起こせるということです。だから逆に,他にもカテゴリコード5番の文字をつくれば,それで改行が起こせるということですし,(CR)をカテゴリコード5番以外にして仕舞えば,行の終了以外の機能を持たせることができるようになります。

ちなみにカテゴリコード13の「アクティブ文字」について少し触れておきます。通常ここに含まれる文字は~(チルダ)のみです。この「アクティブ文字」というのは,\defによってその定義を変更することができるような文字です。そうして定義を変更しておけば,あたかも「\(バックスラッシュ/円文字)+英文字」で実現されるような,コマンドとして機能させることができます。たとえば,~(チルダ)は,デフォルトでは「改行禁止空白」の意味を持っていますが,たとえば

\def~{iamjatex}

と一旦打っておけば,~を文字列「iamjatex」の別名として定義することができるというわけです。あとでこのアクティブ文字の機能を存分に使っていきます。アクティブ文字については,アドベントカレンダー24人目のgolden_luckyさんの記事に詳しいです。




4.入力した文字がASCIIコードの何番の文字としてTeXに認識されるか

ASCIIコードは10進数表記で0〜127まであります。さっきのカテゴリコードよりもずっと量が多いので,ここに改めて書くようなことはできません。さすがにそんなことしたら疲れるわい。

というわけで,説明のページ(新規ウィンドウで開きます)。

この表を見ながらご覧ください。

見ていただければ分かる通り,ASCII32のスペースから,ASCII126の~チルダまでの文字は,キーボードで入力しやすい,いわゆる「普通の文字」です。だから,たとえば,TeXにASCII77番の文字として認識して欲しい文字を入力するときには,単にMと入力すればよろしいということになります。そうすれば出力もMと出ます。

しかしASCII1〜31と,ASCII127はどうも入力しにくそうなものが多いですね。これらは「制御コード」と呼ばれています。こうした制御コードを打ち込むのはなかなか難しいです。たとえばMac OS X環境だったら,改行はふつうLFになってしまうわけで,CRを打ち込むのかかなり大変です。ではこうした制御コードとTeXに認識して欲しいような文字を入力するためにはどうしたらいいでしょうか。そのために使うのが,^^(ハット2回)です。これは,{^^(ハット2回)に後置された文字のASCIIコード}から64を引いた文字を指定するために使うTeXの機能です。だから,先ほどMがASCII77であるということをお伝えしましたが,^^Mと入力すれば,ASCII13の文字(CRです)をTeXに渡すことができるんです。

同様に,
ASCII0の文字(NUL)=^^@で渡せる
ASCII1の文字(SOH)=^^Aで渡せる

ASCII10の文字(これLFでしたよね)=^^Jで渡せる

ASCII13の文字(これCRでしたよね)=^^Mで渡せる

ASCII31の文字(US)=^^_で渡せる
ASCII127の文字(DEL)=^^?で渡せる
となります。

127だけはちょっと変則的ですけど,?がASCII63なので63-64(mod128)≡127とすれば納得できるでしょう。

この^^Mを用いれば,Mac OS X環境でも簡単に(CR)をTeXに認識させられるわけですね。

ちなみに,そんな需要はないかもしれませんが,tはASCII116なので,^^tと打てばASCII52の文字(つまり4)をTeXに渡すことができます。キーボードの「4」のキーが壊れてしまったけど^のキーとtのキーが生きている場合に使えますね。他にも「5」と打つ代わりに^^uと打ったり,「6」と打つ代わりに^^vと打ったりすることもできます。




5.本当にLF入力が全部CR化するか

さて,カテゴリコード,ASCII文字の何番として認識されるかという二つの予備知識を導入したところで,本題の「本当にLF入力が全部CR化するか」に入っていきたいと思います。

先ほどの例

———————————————————
hoge
hage

hige
\bye
———————————————————

を使っていきます。今,Mac OS X環境だとすると,

———————————————————
hoge(LF)
hage(LF)
(LF)
hige(LF)
\bye
———————————————————

になっているはずですね。なんらかの16進エディタを用いて開けば,改行のところが0D(CRのことでしたね)ではなく0A(LFのことでしたね)になっていることが確かめられます。

さて,出力中に(LF)や(CR)が何回登場しているかをカウントしたいので,(LF)や(CR)の定義を変更します。定義を変更するために,次のように打ちます。

———————————————————
\catcode`\^^J=13
\catcode`\^^M=13
\def^^J{(Here is LF!)}
\def^^M{(Here is CR!)}
hoge
hage

hige
\bye
———————————————————

まず,最初の2行で,改行文字の定義を変更するために,^^J(LF),^^M(CR)のカテゴリコードを一旦13(アクティブ文字)に変えています(3.節で述べた理由による)。カテゴリコードを変えるためのコマンド\catcodeは覚えておくと便利でしょう。
そして,次の2行で,^^J(LF)や,^^M(CR)が出力中に現れると,それぞれ(Here is LF!),(Here is CR!)と叫んでくれるようにしています。

ここで不可視の(LF)を可視化してやると,次のようになっているはずです。

———————————————————
\catcode`\^^J=13(LF)
\catcode`\^^M=13(LF)
\def^^J{(Here is LF!)}(LF)
\def^^M{(Here is CR!)}(LF)
hoge(LF)
hage(LF)
(LF)
hige(LF)
\bye
———————————————————

さて,これがどのような挙動を示すでしょうか。このファイルをlf.texとでもなんらか日本語を含まない名前をつけて保存し,pdftexに通してやると,ほら,このとおり。

===================
(Here is CR!)hoge(Here is CR!)hage(Here is CR!)(Here is CR!)hige(Here is CR!)
===================

LFが全部CRに置き換えられて認識されているのがわかるでしょう。これで検証されましたが,まだまだ話は続きます。「(LF)の機能」の話と,「カテゴリコード5」についての話。




6.では,(LF)はどうなってるのか?

ここまで読んでいただいた根気強い読者の方にはお分かりのことと思いますが,Mac OS X環境ならば,TeXに(LF)を渡す方法は2通りあるわけです。

(1)普通に改行する
(2)^^Jと打ち込む

しかしながら,「TeXに(LF)を渡す」という表現が曖昧なのが原因ではあるのですが,両者の挙動は全く異なります。それぞれについてお話ししていきます。まずざっくりまとめるとこんな感じ。

(1)普通に改行した場合
「行末」と認識されるため,TeXの処理の第一段階で,それを一旦削除して,(CR)に置き換えられます。そして,TeXの処理の第二段階で,「カテゴリコード5の文字(CR)+行末」というふうに認識されます。

(2)^^Jと打ち込んだ場合
TeXの処理の第一段階で,^^Jは「ASCII10の文字を指定する記号」と思われるだけです。そして,TeXの処理の第二段階で,「カテゴリコード12の文字(LF)」というふうに認識されて処理されます。結果出力は…「Ω」になります。

はい。明らか挙動が違いますね…というか「Ω」が出てくるのって結構衝撃ですよね。

たとえば,

———————————————————
^^Japanese Spirit!
\bye
———————————————————

をコンパイルすると,

===================
Ωapanese Spirit!
===================

となってしまいます。これは一体どういうことでしょうか。そのヒントは,(LF)のカテゴリコードが12というところにあります。
カテゴリコードが12,つまり他の記号や数字と一緒なので,同様の処理を受けるわけです。

その処理,とは,ASCIIコードに対応する字形をフォントの中から拾ってくる,という処理です。
たとえば,カテゴリコード12かつASCIIコード52の文字(4のこと)をTeXが処理しようとする場合には,現在のフォントのグリフの中からASCII52に対応する部分を探し出してきて,出力に渡します。TeX標準のcmr10だったら,4の足の部分に出っ張りがあるような字形が渡されるでしょうし,斜体のcmti10だったら,4の足の部分に出っ張りがない字形が渡されるでしょう。だいたいどんなフォントであっても,ASCII52に対応する部分は,4の文字に飾りがついたり,飾りが落とされたりしたものになっています(OT1エンコーディングなら)。

OT1エンコーディングについての詳しい話は割愛しますが,TeX BookのAppendice Fや,このページのAppendice Aにエンコーディングの対応表が載っているので参考にすると良いでしょう。

このような処理を(LF)も受けます。(LF)はカテゴリコード12かつASCIIコード10の文字な訳ですから,たとえばcmr10とかだったらそこに対応する文字…Ωの両足に出っ張りがあるような字形が探し出されて,出力に渡されるわけです。OT1エンコーディングなら,ASCII10は文字Ωに対応しています。

そのせいで,^^Jは出力された文書中では,文字Ωとして現れることがわかります。もちろん,エンコーディングの違うフォントを使ったら違う文字になりますけど。




7.TeX文書中の(LF)と標準出力中の(LF)は違うという話
(12/31&1/2訂正あり through doraTeXさんの情報. 多謝!=新しく追記にしました。)

前節でみたとおり,^^Jを使って改行をするというのは,出力されたTeX文書中では難しいということがわかりました。多くの場合Ωになってしまうということです。

しかしながら,標準出力中では話が違います。標準出力って何?という方は,「標準出力=ターミナル」と思っていていただければいいでしょう(若干不正確ですが)。つまりコンパイル中に上から下へとすごい勢いで流れていくあの文字たちのことです。エラーがあるとその文字たちの動きが止まって警告を出してくれるわけですね。

その標準出力中の改行は,何を隠そう

^^J

で行うのです。試しに,標準出力中にメッセージを書き込む\immediate\write命令を使ってやってみましょう。\immediate\write命令の直後にある数字は本題とは全く無関係なので気にしないでください。

(以下,誤りを含む旧情報 2015/12/31 に書き換えました。)
———————————————————
In Terminal you should use LF
\immediate\write13{After this there is LF. ^^J After this there is CR. ^^M How did it go?}
\bye
———————————————————

これをコンパイルすると,

///////////////////
Runaway text?
After this there is LF.
After this there is CR.
! Forbidden control sequence found while scanning text of \write.
///////////////////

というエラーメッセージが標準出力中に現れてコンパイルがストップします。
After this there is LF.
のあとはちゃんと(LF)で改行されて,
After this there is CR.
のあとは(CR)が入力されてターミナルが「無理でーす」といってきたわけです。
ターミナル中ではあくまで改行は(LF)という原則(ターミナルはUnix系だしね)が働いています。

(ここまで旧情報)
(以下,12/31 追記)

間違いのご指摘を受けましたので訂正いたします。

———————————————————
In Terminal you should use LF
\immediate\write13{After this there is LF.^^J
After this there is CR.^^M
How did it go?}
\bye
———————————————————

これをコンパイルすると,

///////////////////
After this there is LF.
After this there is CR. How did it go?
///////////////////

とターミナル中に出てきます。そして,pdfには

===================
In Terminal you should use LF
===================

と出力されるというわけです。

ターミナル中で,(LF)のあった場所では改行が起こっているのに,(CR)のあった場所では起こっていないことに注意してください。
After this there is LF.
のあとはちゃんと(LF)で改行されて,
After this there is CR.
のあとは改行されていないわけです。
ターミナル中ではあくまで改行は(LF)という原則(ターミナルはUnix系だしね)が働いています。

(ここまで12/31 追記)


そういえばこのあいだのlatex.ltxリーディングでも誰かがエラーメッセージ中の^^Jについて喋っていたような…確か第8回か第9回だっけな…




8.カテゴリコード5の文字の挙動

しばらく(LF)の話をしてきましたが,最後は,(CR)に限らずカテゴリコード5(行末)の文字全般に言える性質について。
え?カテゴリコード5の文字なんて(CR)しかないじゃないかって?いやはい,デフォルトではそうですけど,先ほど紹介したカテゴリコード変更コマンド\catcodeを使えば色々な文字をカテゴリコード5にしてしまうことが可能です。そうした場合にどういうことが起きうるかというと…

~~~~~~~~~~~~~~~~~~~~~
|一行の中に複数行末が来る|
~~~~~~~~~~~~~~~~~~~~~

まいったな…ってかんじですけど,ありうる話です。たとえばこんなコードを書いたとしましょう。

———————————————————
\catcode`f=5
Moderate use of \expandafter makes your life better.

hoge
\bye
———————————————————

すると出力はこうなります。

===================
Moderate use o
hoge
===================

なぜでしょうか?(あんな変なところに某\expandafterがいるのにエラーすら出ませんね…)

それは,カテゴリコード5の文字の隠れた性質によるんです。改行周りでTeXはどういう処理をするかというと,先ほど2.節では次のように述べました。

+++++++++++++++++++
「一旦テキストファイル中の改行文字(CRおよびLF)を全て外した上で,一律にCRを入れる」
というものです。
改行文字(CR or LF)に遭遇した瞬間,それを外して,CRを入れるのです。
そして,必ずそのCRにより行を終了します。
+++++++++++++++++++

これをより正確に述べると,次のようになるのです。

+++++++++++++++++++
テキストファイル中で,カテゴリコード5の文字に遭遇したら,そこを行末として,行末までは無視する。
カテゴリコード5の文字に遭遇しないまま行末まで来てしまったら,行末にある(LF)や(CR+LF)を(CR)に変える。そして(CR)がカテゴリコード5ならばそこが当然行末となる。(CR)のカテゴリコードを変更してしまっていたせいで(CR)のカテゴリコードが5でない場合にはそこは行末とはならず次の行まで連続した行だとみなされる。
+++++++++++++++++++

ということなんですね。

先ほど5.節でコンパイルした

———————————————————
\catcode`\^^J=13(LF)
\catcode`\^^M=13(LF)
\def^^J{(Here is LF!)}(LF)
\def^^M{(Here is CR!)}(LF)
hoge(LF)
hage(LF)
(LF)
hige(LF)
\bye
———————————————————

というソースでは,出力が

===================
(Here is CR!)hoge(Here is CR!)hage(Here is CR!)(Here is CR!)hige(Here is CR!)
===================

となり改行が入っていませんでしたが,これは(CR)のカテゴリコードを13に変更してしまったため\def^^M{(Here is CR!)}〜\byeまでの行がすべて連続しているとみなされてしまった結果というわけなんですね。

また,
———————————————————
\catcode`f=5
Moderate use of \expandafter makes your life better.

hoge
\bye
———————————————————

の出力が

===================
Moderate use o
hoge
===================

になるというのは,二行目最初のfが出てきた時点で\expandafter makes your life better.を無視してしまったのでエラーも出ず出力が得られたということなんですね。

これを逆手にとればあたらしいコメント入力の仕方も開発できますね…そうそう,つまり,普段あまり使わない文字をカテゴリコード5にすれば,それでコメント開始文字として利用できますね。
でもそれをやるんだったらおとなしくカテゴリコード14(コメント文字)に変更したほうが安心だとは思いますが…





というわけで,今更人に聞けない「改行文字」の基本でした。誰もが何気なく使っている改行も奥が,深いわけですね。

この記事の執筆にあたり,doraTeXさんに幾つか質問をしたりしました。この場を借りて感謝いたします。




参考文献

(1)Donald Knuth の TeXBook (Appendix CとAppendix F)

(2)B. Beeton. Controlling ; ruling the depths. TUGboat, 9:182–183, 1988. 30

(3)LATEX2ε マクロ&クラス プログラミング基礎解説 単行本 – 2002/8 ISBN-13: 978-4774115467

参考文献の書き方適当でゴメンなさい。本の特定はできると思います...

続きを読む

スポンサーサイト

decipher

decipher(v) = convert a coded signal into normal language
だが語源を調べてみたらちょっぴり面白かったので。
de- が「外す」
cipher が「謎」
なので解読ってわけだが,
cipherの語源はなんとArabicだった。
صفر(sifa)が語源なんだとか。これは0やemptyを意味する。
cipherは「数字」が原義だから(数字暗号とかがあったのかな?)
まあ語源が「0」なのはなんとか分かる話。

で,صفر(sifa)の語源はさらにこんなかんじらしい
صَفَر(safar)なんだとか。これはイスラム教の太陰暦で二月を表している


じゃ
なんで

って意味になるの

ってかんじだよ

これについては一つ説があって,

「異教徒たちがこの月の間
略奪旅行に出かけて家を空にするから」

らしい

なんじゃそりゃーーー



謎が深まるdecipherのお話でした

「ぱそ」computer

patho-は接頭辞meaning `disease'

pathogen = 病原体
pathology = 病理学

「パソ」コンはどうしよう。
病気的計算機。

備忘録:sanction

sanction(n)について絶対に忘れたくないことがあるのでここに,
NOADの記述を転載します。外交的文脈しか知らなかったんで
ちょっと自責の念にかられるばかり

usage: Sanction is confusing because it has two meanings that are almost opposite.
In most domestic contexts, sanction means ‘approval, permission’:
voters gave the measure their sanction.
In foreign affairs, sanction means ‘penalty, deterrent’:
international sanctions against the republic go into effect in January.

まじ!

調べてみるとsanctionは「公的に有効にすること」が原義らしい。
許可も制裁も公的発動の一種ってことか。

同じ単語の中でも正のNuanceと負のNuanceが発動されて
意味が変わることがあるわけだね。これはおとついの話とも繋がってて
なんか,
うれしい
かも
しれない。

atrocity

atrocity(n) an extremely cruel act
Latin atrox
が語源らしいが,そういえば
atroxが語源の単語が思い当たらない...
頑張って調べてみると,

ヒシモンガラガラヘビ Crotalus atrox
が持っているインスリンB鎖の切断酵素の名前が
atroxase
なんだとか。

そんなに恐ろしい毒なんすかね。extremely cruelって...
うーん。でも血清を急いで打てば大丈夫かな!

ちなみに
インスリンってホルモンはA鎖とB鎖がジスルフィド結合で
繋がった形してるんだよ〜

完全転換

完全転換ということばに
正のNuanceを感じ取るか,
負のNuanceを感じ取るかは
人それぞれだと思う

良い方に転換するか
悪い方に転換するか
という
前提条件を与えていないのだから
そこで意見が食い違うのはあたりまえだ

「完全」を表す接頭辞として,per-とcon-を考える。
perfectやcompleteを考えれば両者とも
「完全」
を表す接頭辞として自然と納得されることだろう

「転換」を表すことばとして,Latin vertere 由来のvertを考える

これらをくっつけてみよう

pervert
convert

さて,これらは「完全転換」を表す動詞だが,
どういう意味だろうか

pervert(vt) distort or corrupt the original course (負のNuance)
perverted people といえば性的倒錯者

convert(vt) change in form, character, or function (中立Nuance)
宗教的には,convertして入信してくれることが喜びだ。
正のNuanceが入ることも多かろう

こうしてスタートは同じ「完全転換」でも
正負のNuanceが込められて意味が変わってくる
というわけだ

さて
昆虫の
「完全変態」
はいかに。

やぶへび

ambush = swoop from a concealed place
ex) there must be terrorists waiting in ambush

from embusche(old French) = em + boscum(Vulgar Latin meaning `wood')
= placing in the wood

茂みからの急襲。

ぞわっ。

情景

...といえば,白鳥の湖でもっとも有名な曲でしょう(たぶん)

ちゃらららららーんららーんららーん てぃりりりぃ
らーんららーんららーん てぃりりりぃり...

てか空耳ひどいな笑

そんな情景ですが,曲名としてはScèneですね。

映画のワン・「シーン」的な感じのノリでね。

それと関連付ければ,フランス語のcygneは覚えやすいのかなぁとちょっと思ったのよね。

しーにゅ。



cygneはラテン語系。

ちなみに英語のswanはインド・ヨーロッパ祖語由来なんだそうな。
ラテンやギリシャ由来ばっかりだと思っていると足をすくわれることがあるんだねぇ汗
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。