Fibonacci 数列で TikZ してみた
あべのりさんが [id:abenori:20120422] で、脱 Xy-pic 宣言をしていたので、ぼくも真似してみた。いや、ぼくの場合は、某職場以外で PSTricks を使わない宣言をしたほうがいいな(わら
今日の気分は…、
今日の気分は、目覚めからFibonacci numberなので、なんか #MathGirl テトラちゃんのピッピッピやな。あとで、なにか作ろう :)
2012-04-25 16:26:16 via web
なので、Fibonacci 数列を題材にしました。
ただ単に、Fibonacci 数列をそのまま出力するのはつまらないので、diagram にしてみました。まぁ、某数学分野の K 理論入門書などで、Bratteli diagram wikipedia:en:Bratteli_diagram としてしばしば見かける例だけど(汗
%#!lualatex fibdiag \documentclass{article} %\def\pgfsysdriver{pgfsys-dvipdfm.def} % for dvipdfmx \usepackage{tikz} \usetikzlibrary{arrows} \pagestyle{empty} \begin{document} \makeatletter \newcount\FibDiag@counter \newcount\FibDiag@temp \newcount\FibDiag@F \newcount\FibDiag@G \newcount\FibDiag@oldF \newcount\FibDiag@oldG \def\FibonacciDiagram#1{% \FibDiag@counter=#1 \FibDiag@temp=\z@ \FibDiag@oldF=\@ne \FibDiag@oldG=\z@ \FibDiag@F=\@ne \FibDiag@G=\@ne \begin{tikzpicture}[arrows={->},auto] \node (F1) {1}; \node [right of=F1] (G0) {1}; \FibDiag@loop \end{tikzpicture} } \def\FibDiag@loop{% \let\FibDiag@next=\FibDiag@loop \FibDiag@temp=\FibDiag@F \FibDiag@F=\FibDiag@G \advance \FibDiag@G by \FibDiag@temp % \node [below of=F\the\FibDiag@F] (F\the\FibDiag@G) {\the\FibDiag@G}; \node [right of=F\the\FibDiag@G] (G\the\FibDiag@F) {\the\FibDiag@F}; \draw (F\the\FibDiag@oldF) -- (F\the\FibDiag@G); \draw (G\the\FibDiag@oldG) -- (F\the\FibDiag@G); \draw (F\the\FibDiag@F) -- (G\the\FibDiag@F); % \ifnum \FibDiag@counter=\z@ \let\FibDiag@next=\relax \else \FibDiag@oldF=\FibDiag@G \FibDiag@oldG=\FibDiag@F \advance \FibDiag@counter by \m@ne \fi \FibDiag@next } \makeatother %\FibonacciDiagram{100} \FibonacciDiagram{10} \end{document}
pTeX プリミティブだけを検索しちゃった(てへぺろ
@munepixyz でつぶやいていたコレ↓の雰囲気をまとめてみました。
po4aで翻訳する可能性も考えると、JSONよりもXMLにしたほうがいいな。いそいで、jQueryのところを書き換えなきゃ。
2012-04-22 16:42:32 via web
入力フォームに、たとえば「k」を打ち始めると、最近の検索エンジンでよくあるような候補を先読みします。
さらに、「kan」を打ち続けると、こんな感じで候補が絞られます。
この状態で、ボタン [ Show ] を押しますと、「kan」を含む pTeX プリミティブが出力されます。
いまんところは、私的利用!?
ASCII MEDIA WORKS さんの ASCII Nihongo TeX (Publishing TeX) に掲載されている 拡張プリミティブとレジスタ の文章には、当然、著作権があります。
したがいまして、元文章から XML 化したデータを使って、勝手に公開するわけにいきませんね。サービスに対して、転載、利用の許可を得るか、リンクや引用にして、わたしが解説を書くかしないといけませんね。
このサービスを「辞書ツール」という感じで捉えると、ユーザの方の手元で私的利用の範囲で、うまく活用できないか、ただいま妄想中でございます。
妄想は、大きく持とう!
現状、上記のような簡単なサービス内容ですが、Features は色々と考えられます。
- TeX, eTeX, pdfTeX, LuaTeX などの組版エンジンのプリミティブに対しても、同様に xml データを作成することで、共通する名前などの検索や並べて比較ができる。
- たとえば、TeX Reference Manual を XML 化するなど。
- LaTeX, pLaTeX に対して、latex.ltx などのマクロや amsmath パッケージなどの主要パッケージのマクロに対しても、同様に xml データを作成すると、さらに広がる。ToL(TeX on LaTeX*1)するときに、primitive を意識できて便利!
- XML 化により、翻訳ツール gettext + po4a 経由で、他の言語に翻訳化が追従しやすい。他のアプリケーションなどにも、XSLT により変換が可能。
上記以外にも、アプリにしたり、Chrome 拡張機能などにもできたりと、妄想は膨らみます。
実際に、わたくし自身がちまちまと試作しつつ作りながら、手元で使っていて便利だったので、TeX/LaTeX の Quick Reference をサービスとしてできたら、面白そうですね。TeX ユーザの集い 2012 のネタにもなるし(わら
ではでは、妄想の続きは、そのうちにでも。
続・初めての ConTeXt Mark IV
前々回に、「初めての ConTeXt Mark IV」[id:munepi:20120408:context] を紹介しました。
その後、ZR さん経由で W32TeX 開発者である角藤さんからのお得情報を教えてくださいました。ZR さんの「ConTeXt で日本語する件について」 [id:zrbabbler:20120416:1334595982] で、そのお得情報が言及されていますので、合わせて参照ください。
欧文と和文のフォントを分ける
今日は、前々回に利用した simplefonts モジュールにおいて、欧文と和文のフォントを分けた例を紹介します。例文は、上記の ZR さんのところから、拝借しました。
%#!context hoge-t \mainlanguage[ja] \language[ja] \setscript[hanzi] \usemodule[simplefonts] %%D Default fonts (from t-simplefonts.tex) %\setmainfont [Latin Modern Roman] %\setsansfont [Latin Modern Sans] %\setmonofont [Latin Modern Mono][features=none] %\setmathfont [Latin Modern Math] %\sethandwritingfont [Latin Modern Roman] % neither handwritten nor calligraphic are available %\setcalligraphicfont[Latin Modern Roman] % for Latin Modern but I need a default font for them \setcjkmainfont[ipaexmincho] \setcjksansfont[ipaexgothic] \setcjkmonofont[ipaexgothic] \starttext \def\AboutConTeXtInJapanese{% \ConTeXt(この中の X は /ks/ と読む)は \TeX\ 上に構成された文書生成 システムである。 最新版の「MkIV(マーク4)」は \LuaTeX\ エンジンのみをサポートし、 「MkII(マーク2)」は \pdfTeX\ と \XeTeX\ をサポートする。 (\XeTeX\ に対して「MkIII」が計画されていたが結局作られなかった。)} \stoptext
上記の ConTeXt 文章を適当なファイル名で保存して、context でタイプセットすると、以下のようになります。
これで、欧文と和文のフォントをそれぞれ Latin Modern と IPA ex に指定できました。でも、普通の日本語組版としては程遠いですね :)
それは、またおいおいやっていきます。
形式的なフォント名
simplefonts モジュールを使ったときに、デフォルトで Latin Modern が指定されていました。ここでは、形式的なフォント名に対して、Latin Modern がどのような表示になるかを眺めてみます。
%#!context symbfnt-t \usemodule[simplefonts] %%D Default fonts (from t-simplefonts.tex) %\setmainfont [Latin Modern Roman] %\setsansfont [Latin Modern Sans] %\setmonofont [Latin Modern Mono][features=none] %\setmathfont [Latin Modern Math] %\sethandwritingfont [Latin Modern Roman] % neither handwritten nor calligraphic are available %\setcalligraphicfont[Latin Modern Roman] % for Latin Modern but I need a default font for them \starttext \def\PangramExample{% The quick brown fox jumps over the lazy dog.} \def\SymbolicFontTitle#1{% \leavevmode\framed[frame=off, bottomframe=on, topframe=on]{\vbox{#1}}} \startluacode symbfnt = { -- { name = "Blackboard", sty = "\\bbd", alt = "" }, -- Used by the \\bbd macro -- { name = "Calligraphic", sty = "\\cal", alt = "" }, -- Used by the \\cal macro -- { name = "Fraktur", sty = "\\frak", alt = "" }, -- Used by the \\frak macro -- { name = "Gothic", sty = "\\goth", alt = "" }, -- Used by the \\goth macro -- { name = "OldStyle", sty = "\\os", alt = "" }, -- Used by the \\os macro -- { name = "MPtxtfont", sty = "", alt = "" }, -- The default font for MetaPost { name = "Calligraphy", sty = "\\cg", alt = "\\tf" }, { name = "Handwriting", sty = "\\hw", alt = "\\tf" }, -- { name = "MathRoman", sty = "\\mm", alt = "\\mr" }, -- { name = "MathRomanBold", sty = "\\mm", alt = "\\mr\\bf" }, -- { name = "MathItalic", sty = "\\mm", alt = "\\mi" }, -- { name = "MathItalicBold", sty = "\\mm", alt = "\\mi\\bf" }, -- { name = "MathSymbol", sty = "\\mm", alt = "\\sy" }, -- { name = "MathSymbolBold", sty = "\\mm", alt = "\\sy\\bf" }, -- { name = "MathExtension", sty = "\\mm", alt = "\\ex" }, -- { name = "MathExtensionBold", sty = "\\mm", alt = "\\ex\\bf" }, -- { name = "MathAlpha", sty = "\\mm", alt = "\\ma" }, -- { name = "MathAlphaBold", sty = "\\mm", alt = "\\ma\\bf" }, -- { name = "MathBeta", sty = "\\mm", alt = "\\mb" }, -- { name = "MathBetaBold", sty = "\\mm", alt = "\\mb\\bf" }, -- { name = "MathGamma", sty = "\\mm", alt = "\\mc" }, -- { name = "MathGammaBold", sty = "\\mm", alt = "\\mc\\bf" }, -- { name = "MathDelta", sty = "\\mm", alt = "\\md" }, -- { name = "MathDeltaBold", sty = "\\mm", alt = "\\md\\bf" }, { name = "Mono", sty = "\\tt", alt = "\\tf" }, { name = "MonoBold", sty = "\\tt", alt = "\\bf" }, { name = "MonoItalic", sty = "\\tt", alt = "\\it" }, { name = "MonoBoldItalic", sty = "\\tt", alt = "\\bi" }, { name = "MonoSlanted", sty = "\\tt", alt = "\\sl" }, { name = "MonoBoldSlanted", sty = "\\tt", alt = "\\bs" }, { name = "MonoCaps", sty = "\\tt", alt = "\\sc" }, { name = "Sans", sty = "\\ss", alt = "\\tf" }, { name = "SansBold", sty = "\\ss", alt = "\\bf" }, { name = "SansItalic", sty = "\\ss", alt = "\\it" }, { name = "SansBoldItalic", sty = "\\ss", alt = "\\bi" }, { name = "SansSlanted", sty = "\\ss", alt = "\\sl" }, { name = "SansBoldSlanted", sty = "\\ss", alt = "\\bs" }, { name = "SansCaps", sty = "\\ss", alt = "\\sc" }, { name = "Serif", sty = "\\rm", alt = "\\tf" }, { name = "SerifBold", sty = "\\rm", alt = "\\bf" }, { name = "SerifItalic", sty = "\\rm", alt = "\\it" }, { name = "SerifBoldItalic", sty = "\\rm", alt = "\\bi" }, { name = "SerifSlanted", sty = "\\rm", alt = "\\sl" }, { name = "SerifBoldSlanted", sty = "\\rm", alt = "\\bs" }, { name = "SerifCaps", sty = "\\rm", alt = "\\sc" }, } for i = 1, table.getn(symbfnt) do mmode = string.match(symbfnt[i].name, "^Math") context("\\SymbolicFontTitle{") context(symbfnt[i].sty .. symbfnt[i].alt .. " " .. symbfnt[i].name) context("}") context.par() context(symbfnt[i].sty .. symbfnt[i].alt .. " \\PangramExample") context.par() context("\\vskip\\baselineskip") end \stopluacode \stoptext
上記の ConTeXt 文章を適当なファイル名で保存して、context でタイプセットすると、以下のようになります。
「アレ?変数 mmode とかあるけどー…」というツッコミは歓迎します :) こちらもそのうち、ネタとともにやりませう。
Lua コードの埋め込み方は、Programming in LuaTeX - ConTeXt wiki にも説明があります。\@tfor とかしなくてもいいんですよ(わら
今日は、ここまで。
さて、次回はー、日本語を考慮した体裁など、今日の続きの内容になりますか、もしくは、URW 基本 35 書体についてなにか記しておきましょうか。
いまさらやけど、URW基本35書体 URL って、Adobeフォントの代替として、十分すぐるなーと思い直した!さっき、 #TeXLive 2011で全35書体を並べてみて、グッと涙腺に込み上げてきた :) URL
2012-04-16 14:48:05 via web
あとで、URW基本35書体の拡張であるTeX-GYRE URL も、全書体並べて眺めてみよう。また、グッとくるかもしれないから :)
2012-04-16 14:49:49 via web
お腹が減ってきたので、ではでは。
本日、 #TeXCafe を初開催してみました
今日は、昨日ほど #TeX 日和でありませんが、せっかくなので何かやりませう。そうだ、 #TeXCafe だ! 千葉そごうで本を見る予定があるから、ついでに小一時間ぐらいやってみよう。
2012-04-21 14:36:57 via web
#TeXCafe 今日の15:30--16:30@スターバックス千葉そごうJUNNU店 URL #TeX に関することを語らい合いませう。もちろん、インストールやり方などOK!とりあえず、ぼくはドキュメントの翻訳などを黙々とやっています。
2012-04-21 14:41:24 via web
ということで、思いつきで #TeXCafe を初開催してしまいました。
#TeXCafe のテーマは、利用者、現場、開発者の情報共有がテーマです(キリっ*1 基本的には TeX に関することを何かやろうということを想定しています。
TeX について雑談したり、開発作業をしたり、クラスファイルを設計したり、マクロを書いてスタイルファイルを作ったり、お絵かきしたりなどなど。もちろん、TeX 環境の構築やインストールのやり方、GUI による製作環境なども OK です。
また、組版やフォント、デザイン、印刷に関すること、最近なにかと話題の電子書籍も何でもありです!むしろ、私がいろいろと教わりたいので :)
以下、twitter からいくつか関連の話題を。
@munepixyz うう、同じ千葉県なのですがウチからだと意外と遠いので今日は断念
2012-04-21 15:35:38 via TweetDeck to @munepixyz
本日の #TeXCafe は終了です。ありがとうございます。反響があったので、またやります!乞うご期待くださいませ(^O^)/
@munepixyz わーい。よろしくです! #TeXCafe
2012-04-21 17:49:46 via TweetDeck to @munepixyz
本日の #TeXCafe
本日は、あらかじめ宣言していたとおり、とある TeX 関連ドキュメントの翻訳をやっていました。このネタは、ここらへん po4a を騙して ConTeXt 文章を翻訳する(ネタ) - I’m just another TeXnician. です。
つぎに、今朝届いた Herbert Voss さんの LaTeX Quick Reference*2 を読んでいました。

- 作者: Herbert Voss
- 出版社/メーカー: Uit Cambridge Ltd.
- 発売日: 2011/09
- メディア: ペーパーバック
- クリック: 10回
- この商品を含むブログを見る
まだ、3 章までしか目を通していないので、全章に目を通すには、しばらくかかりそうです。
次回の #TeXCafe ってあるの?
反響があったので、次回もやりましょう!
場所は、どこでもやります。大型連休中に関西へ行くので、関西で #TeXCafe 開催も妄想中です。
#TeXCafe 開催のときは、お気軽にご参加くださいませ。
*1:いつもわたしが言っている言葉です、ハイ。元ネタは texconf09 のときに喋ったスライド http://f.hatena.ne.jp/munepi/texconf09/
*2:余談:LaTeX Quick Reference の表紙にある絵を見て、B-CAS の黒カードに見えたあなた、魔が差していますよ(わら
単項演算子 - に関するちょっとしたメモ
[ruby-list:48703] 単項演算子 - に関する違和感 という投稿に、ちと目が止まった。
気になったので、Ruby, Perl, Python, PHP, GNU bash, GNU bc にて、「-4%3」「(-4)%3」「-(4%3)」を、とりいそぎ調べてみた。
Ruby | Perl | Python | PHP | GNU bash | GNU bc | |
---|---|---|---|---|---|---|
$ irb | $ perl -ne 'print eval($_)."\n"' | $ python | $ php -a | $ echo $(( )) | $ bc | |
-4%3 | 2 | 2 | 2 | -1 | 2 | -1 |
(-4)%3 | 2 | 2 | 2 | -1 | 2 | -1 |
-(4%3) | -1 | -1 | -1 | -1 | -1 | -1 |
Ruby については、 znz さん id:znz から Class: Numeric (Ruby 1.9.3) を教えてもらいました。ありがとうございます。
ぐぐってみると、こんなプログラムはいやだ: 負の剰余 - bkブログ に、C (GCC 3.3.5)、Java (Sun JDK 1.5.0_05), GNU Emacs 22.0.50.2 の結果がありました。
での
の正負を、
か
かのどちらのそれに合わせるかですね。ぶっちゃけ、
となるような
を取ったときに、
の結果が処理系に依って違ったら、大変なことになるわけです(笑
Adobe Reader 9.5.1 日本語版もどきをインストールしてみた
Adobe Systems 社さんが Adobe Reader 9.4.3 以降に日本語版を全然出してくれない (>_<) 2012 年 4 月 14 日現時点で「Adobe Readerの最新バージョンおよび旧バージョンのダウンロード」http://get.adobe.com/reader/otherversions/ を見ても、英語版のみ 9.5.1 がリリースされている。
ということで、Adobe Reader 9.5.1 英語版に、Adobe Reader 9.4.2 日本語版からいくつかのファイルを抜き出して、コピーすることで、Adobe Reader 9.5.1 日本語版もどきにしてみました。
手順は、以下のとおりです。
1. Adobe Reader の RPM を取得します。
wget -N http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.1/enu/AdbeRdr9.5.1-1_i486linux_enu.rpm \ http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.4.2/jpn/AdbeRdr9.4.2-1_i486linux_jpn.rpm
2. Adobe Reader 日本語版を削除して、英語版をインストールします。
sudo apt-get remove AdobeReader_jpn
sudo apt-get install AdbeRdr9.5.1-1_i486linux_enu.rpm
3. AdbeRdr9.4.2-1_i486linux_jpn.rpm を展開して、いくつかのファイルを抜き出して、インストールします。
mkdir AdobeReader_jpn-9.4.2 cd AdobeReader_jpn-9.4.2 rpm2cpio ../AdbeRdr9.4.2-1_i486linux_jpn.rpm | cpio -id for x in \ /opt/Adobe/Reader9/Browser/HowTo/JPN/Browser_Plugin_HowTo.txt \ /opt/Adobe/Reader9/Reader/IDTemplates/JPN/AdobeID.pdf \ /opt/Adobe/Reader9/Reader/IDTemplates/JPN/DefaultID.pdf \ /opt/Adobe/Reader9/Reader/Legal/ja_JP/License.txt \ /opt/Adobe/Reader9/Reader/Messages/ENU/RdrMsgENU.pdf \ /opt/Adobe/Reader9/Reader/Messages/JPN/RdrMsgJPN.pdf \ /opt/Adobe/Reader9/Reader/help/JPN/ReadMe.htm \ /opt/Adobe/Reader9/Reader/intellinux/plug_ins/Annotations/Stamps/JPN/Dynamic.pdf \ /opt/Adobe/Reader9/Reader/intellinux/plug_ins/Annotations/Stamps/JPN/Hanko.pdf \ /opt/Adobe/Reader9/Reader/intellinux/plug_ins/Annotations/Stamps/JPN/SignHere.pdf \ /opt/Adobe/Reader9/Reader/intellinux/plug_ins/Annotations/Stamps/JPN/StandardBusiness.pdf \ /opt/Adobe/Reader9/Reader/help/JPN/ReadMe.htm \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/Accessibility.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/AcroForm.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/Annots.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/DVA.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/DigSig.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/EFS.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/EScript.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/HLS.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/MakeAccessible.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/Multimedia.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/PDDom.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/PPKLite.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/RdLang32.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/ReadOutLoud.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/Reflow.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/SaveAsRTF.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/SearchFind.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/SendMail.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/Spelling.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/SynchronizerApp.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/checkers.JPN \ /opt/Adobe/Reader9/Reader/intellinux/sidecars/wwwlink.JPN \ /opt/Adobe/Reader9/Resource/CIDFont/KozMinPr6N-Regular.otf \ /opt/Adobe/Reader9/Resource/CMap/83pv-RKSJ-H \ /opt/Adobe/Reader9/Resource/CMap/90ms-RKSJ-H \ /opt/Adobe/Reader9/Resource/CMap/90ms-RKSJ-UCS2 \ /opt/Adobe/Reader9/Resource/CMap/90ms-RKSJ-V \ /opt/Adobe/Reader9/Resource/CMap/90msp-RKSJ-H \ /opt/Adobe/Reader9/Resource/CMap/90msp-RKSJ-V \ /opt/Adobe/Reader9/Resource/CMap/90pv-RKSJ-H \ /opt/Adobe/Reader9/Resource/CMap/90pv-RKSJ-UCS2 \ /opt/Adobe/Reader9/Resource/CMap/90pv-RKSJ-UCS2C \ /opt/Adobe/Reader9/Resource/CMap/Add-RKSJ-H \ /opt/Adobe/Reader9/Resource/CMap/Add-RKSJ-V \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-90ms-RKSJ \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-90pv-RKSJ \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-H-CID \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-H-Host \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-H-Mac \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-PS-H \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-PS-V \ /opt/Adobe/Reader9/Resource/CMap/Adobe-Japan1-UCS2 \ /opt/Adobe/Reader9/Resource/CMap/EUC-H \ /opt/Adobe/Reader9/Resource/CMap/EUC-V \ /opt/Adobe/Reader9/Resource/CMap/Ext-RKSJ-H \ /opt/Adobe/Reader9/Resource/CMap/Ext-RKSJ-V \ /opt/Adobe/Reader9/Resource/CMap/H \ /opt/Adobe/Reader9/Resource/CMap/UCS2-90ms-RKSJ \ /opt/Adobe/Reader9/Resource/CMap/UCS2-90pv-RKSJ \ /opt/Adobe/Reader9/Resource/CMap/UniJIS-UCS2-H \ /opt/Adobe/Reader9/Resource/CMap/UniJIS-UCS2-HW-H \ /opt/Adobe/Reader9/Resource/CMap/UniJIS-UCS2-HW-V \ /opt/Adobe/Reader9/Resource/CMap/UniJIS-UCS2-V \ /opt/Adobe/Reader9/Resource/CMap/UniJIS-UTF16-H \ /opt/Adobe/Reader9/Resource/CMap/UniJIS-UTF16-V \ /opt/Adobe/Reader9/Resource/CMap/UniKS-UTF16-H \ /opt/Adobe/Reader9/Resource/CMap/UniKS-UTF16-V \ /opt/Adobe/Reader9/Resource/CMap/V \ //opt/Adobe/Reader9/Resource/Linguistics/LanguageNames2/DisplayLanguageNames.ja.txt \ /opt/Adobe/Reader9/Resource/Linguistics/LanguageNames2/DisplayLanguageNames.ja_JP.txt \ /opt/Adobe/Reader9/Resource/Linguistics/LanguageNames2/DisplayLanguageNames.ja_JP_TRADITIONAL.txt \ ; do sudo mkdir -p $(dirname $x) sudo cp -af .$x $x done
これで本当に良いのかしらん?(笑 CMap ファイルやフォントたちは無害ですが、再び日本語版がリリースされるときは、あらかじめ 3 でコピーしたファイルたちを消しておく方が良いかもしれません。
この手順は、Fedora や CentOS など、RPM パッケージ管理をしているディストリビューションであれば、同様です。
Vine Linux 向けに、上記の手順にそったインストールをおこなう install-assist-AdobeReader_enu パッケージを用意しようかしらん?
おまけ
AdobeReader_jpn-7.0.9 から KozGoPro-Medium.otf も入れとくと、代替フォントとしてウマー\(^o^)/
wget -N ftp://ftp.adobe.com/pub/adobe/reader/unix/7x/7.0.9/jpn/AdobeReader_jpn-7.0.9-1.i386.rpm mkdir AdobeReader_jpn-7.0.9 cd AdobeReader_jpn-7.0.9 rpm2cpio AdobeReader_jpn-7.0.9-1.i386.rpm | cpio -id sudo cp -af ./usr/local/Adobe/Acrobat7.0/Resource/CIDFont/KozGoPro-Medium.otf /opt/Adobe/Reader9/Resource/CIDFont/
po4a を騙して ConTeXt 文章を翻訳する(ネタ)
前回、「初めての ConTeXt Mark IV」 [id:munepi:20120408:context] の最後に、ちらつかせていたネタを少し晒します。
po4a http://po4a.alioth.debian.org/ とは、何でも po を経由して翻訳しちゃえというツールです。これをつかって、ConTeXt 文章を翻訳できないかという、ネタですw 現時点で無理のある作業をしているので、あくまでもネタです。
というのも、現時点の po4a version 0.41 では、「po4a-gettextize -f context」ができません*1。そこで、po4a を騙して ConTeXt 文章をなんとかして po 化して、翻訳します。騙すなんて、ヒドイwww
po4a の騙し方は、以下のとおりです。
- 「po4a-gettextize -f latex」を実行する前に、「\startMARKUP ... \stopMARKUP」を「\begin{MARKUP} ... \end{MARKUP}」に置換します。
- po4a を実行します。
- 「\begin{MARKUP} ... \end{MARKUP}」を「\startMARKUP ... \stopMARKUP」に戻します。
ねっ、po4a を騙しているでしょ? :) まぁ、Locale::Po4a::ConTeXt.pm を書けば (ry :)
簡単に騙せるサンプル
たとえば、以下のような ConTeXt 文章を doc/thisisapen.tex として保存します。
\usemodule[simplefonts] \setmainfont[hiraginominchopronw3] \starttext This is a pen. \stoptext
doc/thisisapen.tex を「\starttext ... \stoptext」を「\begin{text} ... \end{text}」に置換して、Work/thisisapen.tex として保存します。
$ mkdir Work $ perl -p -e 's@\\start([A-Za-z]+)@\\begin\{\1\}@g; \ s@\\stop([A-Za-z]+)@\\end\{\1\}@g' doc/thisisapen.tex > Work/thisisapen.tex
以下の内容を po4a.cfg として保存します。
[po_directory] po
[po4a_alias:latex] latex opt:"-f latex -M UTF-8 -L UTF-8 -o no_wrap=text -k 0"
[type:latex] Work/thisisapen.tex $lang:doc-$lang/thisisapen.tex
ja.po のひな形となる thisiaapen.pot を生成します。
$ po4a-gettextize -f latex -M UTF-8 -L UTF-8 -o no_wrap=text -m thisiaapen.tex -p po/thisiaapen.pot
po/thisiaapen.pot の中身はこんな感じです。
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2012-04-09 22:56+0900\n" "PO-Revision-Date: 2012-04-09 22:56+0900\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: Plain text #: Work/thisisapen.tex:3 msgid "\\usemodule[simplefonts] \\setmainfont[hiraginominchopronw3]" msgstr "" #. type: text #: Work/thisisapen.tex:7 #, no-wrap msgid "This is a pen." msgstr ""
「po/thisiaapen.pot を po/ja.po としてコピーする」または、「$ touch po/ja.po してから $ po4a po4a.cfg する」のどちらかを実行します。
po/ja.po を適当なエディタで開いて、さっそく翻訳します。
#. type: text #: Work/thisisapen.tex:7 #, no-wrap msgid "This is a pen." msgstr "これはペンです。"
po/ja.po を保存してから「$ po4a po4a.cfg」を実行すると、doc-ja/thisisapen.tex に翻訳された文章が生成されています。後処理として、「\begin{text} ... \end{text}」を「\starttext ... \stoptext」に置換します。
$ perl -pi -e 's@\\begin\{([A-Za-z]+)\}@\\start\1@g; \ s@\\end\{([A-Za-z]+)\}@\\stop\1@g' doc-ja/thisisapen.tex
最終的に doc-ja/thisisapen.tex はこのようになります。
% This file was generated with po4a. Translate the source file. % \usemodule[simplefonts] \setmainfont[hiraginominchopronw3] \starttext これはペンです。 \stoptext
できたぉ!
今日は、ここまで!
でも…
実際に ConTeXt 文章を parse するとなると、ConTeXt の表現は、LaTeX のそれと大きく違います。当たり前ですが(笑
試した ConTeXt 文章のうち、うまく po4a を騙せなかったものとして、いくつかあげます。
結局、Locale::Po4a::ConTeXt.pm を書かないと (ry :)
さて、次はー、何を書こうかしらん。「続・初めての ConTeXt MkIV」がよいかしらん? :)
*1:[Po4a-devel] Support for ConTeXt http://lists.alioth.debian.org/pipermail/po4a-devel/2010-December/002006.html No!!!!! See Locale::Po4a::LaTeX.pm and お前がヤレ!:)