2012年1月4日

ことしこそは よいとしに


昨年も「よいとしに」と書いたら、とんでもない年になってしまいました。ことしこそはみなさんにとって、ほんとうによいとしに!


2011年12月19日

52週はたらく人のカレンダー

自分用のカレンダーをつくりました。

週刊の新聞をつくっているので、普通のカレンダーみたいに月ごとに区切られていると、第一日曜日付の原稿締め切りなどを間違えやすいのです。

それで、一年間切れ目ないものをつくった次第です(用紙の都合で半年二段組みになってますが)。実際、切れ目無く、くるくる仕事してますから…


ちょっと潤いに二十四節気と月の満ち欠け、蝕を書き込んであります。節気には太陽黄経を書き添えました。ぐるんと軌道を回っているのを実感したいのです。蝕も見逃さないよう開始時刻を添えてあります。


私の新聞の号数を記入していない版を次のURLで公開しますので、よろしかったらお使いください。
InDesign CS4版とPDF版を置いておきます。

https://sites.google.com/site/amplexicaule/file_cabinet


2011年11月18日

行連結sedスクリプトを訂正しました

昨年6月に書いた「行連結sedスクリプト」を訂正しました。「ちぇ、動かへんやん」とがっかりされた皆さん、すみません。

スクリプトA: 段落冒頭の字下げを全角空白でしてある原稿用
:loop
$!N
s/\(.\+\)\n\([^ ]\+\)/\1\2/
t loop
P
D

5−6行目が必要でした。スクリプトBも同様です。(実は、ずーっと以前にこのスクリプトを書いた時には、この形だったのですが、しばらくsedを使わないうちに、すっかり頭がなまっていて、昨年6月にはPとDがどう動くかを忘れていたのです。

 は全角空白です。

次の段落の1行目を読み込んだ時、3行目の置換は失敗し、loopを抜けます。
この時、パターンスペースの中身は、
 現在の段落\n 次の段落の1行目
という形になってます。

5行目のコマンドPはパターンスペースの「\n」までの部分を出力します。
つまり、2−3行目でつなげられた部分のうち、
 現在の段落\n
が出力される訳です。

次いで6行目のコマンドDでパターンスペースの「\n」までの部分を削除します。
この時、パターンスペースには、
  次の段落の1行目
が残ります。

コマンドDは処理をスクリプトの先頭に戻します。


sedスクリプトを書く時は、パターンスペースに何が入っているか、よっく考えなければなりませんね。あ〜、難しかった (*_*;

2011年10月23日

似非羅甸語:EX BLOGO

「ブログから」って、どう訳せばいいのか?

とりあえず、前置詞EXを使って、BLOGの語尾を奪格風にしてみた。もちろん似非羅甸語に違いない。


20:15 追記:logos -i  に倣って語尾を修正しました。

Lionのテキスト読み上げ:そこの君、ちょっと読んでくれない?

Lionのテキスト読み上げは多国語対応になったんだけど、読み上げさせる言語を自動的に切り替えてはくれません。

環境設定の「スピーチ」でそれぞれの言語をしゃべってくれる「声」を切り替えないといけないんだけど、いちいち環境設定を起動するのはけっこう面倒。

そこで、Automatorでこんなサービスをつくって、「声を指定して読み上げる」とでも名前を付けて保存しておくといいかも。


「実行時にこのアクションを表示」にチェックをいれておくのがミソ。


これで、テキストを扱えるアプリケーションで読み上げさせたい部分を選択して、アプリメニューからこのサービスを呼び出せばよし。


でも、Lionの「声」は言語によって出来不出来の差がけっこうありますね。日本語担当のkyokoさんは、なんだか懐かしい感じがしますよ^^



2011年10月20日

不可視旗:母さん、僕のあのファイルどうしたでせうね

他のOSでつくったZipなどアーカイブファイルをMacで展開すると、展開は成功しているらしいのに、Finderではファイルが見つけられないことが、ままあります(「一太郎Ark」のパッケージでそんなことがありました)。

Terminalでls を実行すると目当てのファイルが見つかる場合、そのファイルにhiddenフラグがついているのです(もとのOSでは別の役割を果たしていたんでしょうけど)。

そのhiddenフラグを取るには、
chflags nohidden ファイル名
とすればOKです。直ちにFinderにそのファイルが現れますよ。





2011年9月27日

ウェブでもvi

わたしのような偏屈もののために、こんなのを開発してくれている人がいます。


では、さっそく試してみましょう^^



まだまだ、一部しか実装されていないようですけど、
ありがたいことです。

2011年9月21日

モールス符号

つまらないsedスクリプトをふたつ…

k2m.sed
#!/usr/local/bin/sed -f
y/いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせすん/イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセスン/
y/ぁぃぅぇぉっゃゅょ/アイウエオツヤユヨ/
y/ァィゥェォッャュョ/アイウエオツヤユヨ/
y/がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ/ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ/
s/ガ/カ゛/g
s/ギ/キ゛/g
s/グ/ク゛/g
s/ゲ/ケ゛/g
s/ゴ/コ゛/g
s/ザ/サ゛/g
s/ジ/シ゛/g
s/ズ/ス゛/g
s/ゼ/セ゛/g
s/ゾ/ソ゛/g
s/ダ/タ゛/g
s/ヂ/チ゛/g
s/ヅ/ツ゛/g
s/デ/テ゛/g
s/ド/ト゛/g
s/バ/ハ゛/g
s/ビ/ヒ゛/g
s/ブ/フ゛/g
s/ベ/ヘ゛/g
s/ボ/ホ゛/g
s/パ/ハ゜/g
s/ピ/ヒ゜/g
s/プ/フ゜/g
s/ペ/ヘ゜/g
s/ポ/ホ゜/g
s/イ/・- /g
s/ロ/・-・- /g
s/ハ/-・・・ /g
s/ニ/-・-・ /g
s/ホ/-・・ /g
s/ヘ/・ /g
s/ト/・・-・・ /g
s/チ/・・-・ /g
s/リ/--・ /g
s/ヌ/・・・・ /g
s/ル/-・--・ /g
s/ヲ/・--- /g
s/ワ/-・- /g
s/カ/・-・・ /g
s/ヨ/-- /g
s/タ/-・ /g
s/レ/--- /g
s/ソ/---・ /g
s/ツ/・--・ /g
s/ネ/--・- /g
s/ナ/・-・ /g
s/ラ/・・・ /g
s/ム/- /g
s/ウ/・・- /g
s/ヰ/・-・・- /g
s/ノ/・・-- /g
s/オ/・-・・・ /g
s/ク/・・・- /g
s/ヤ/・-- /g
s/マ/-・・- /g
s/ケ/-・-- /g
s/フ/--・・ /g
s/コ/---- /g
s/エ/-・--- /g
s/テ/・-・-- /g
s/ア/--・-- /g
s/サ/-・-・- /g
s/キ/-・-・・ /g
s/ユ/-・・-- /g
s/メ/-・・・- /g
s/ミ/・・-・- /g
s/シ/--・-・ /g
s/ヱ/・--・・ /g
s/ヒ/--・・- /g
s/モ/-・・-・ /g
s/セ/・---・ /g
s/ス/---・- /g
s/ン/・-・-・ /g
s/゛/・・ /g
s/濁点/・・ /g
s/゜/・・--・ /g
s/半濁点/・・--・ /g
s/ー/・--・- /g
s/、/・-・-・- /g
s/」/・-・-・・ /g
s/(/-・--・- /g
s/)/・-・・-・ /g
s/本文/-・・--- /g
s/訂正/・・・-・ /g
s/終了/・・・-・ /g


m2k.sed
#!/usr/local/bin/sed -f
s/ / /g
s/-・--・- /(/g
s/・-・-・- /、/g
s/・-・-・・ /」/g
s/・-・・-・ /)/g
s/---・- /ス/g
s/--・-- /ア/g
s/--・-・ /シ/g
s/--・・- /ヒ/g
s/-・--- /エ/g
s/-・--・ /ル/g
s/-・-・- /サ/g
s/-・-・・ /キ/g
s/-・・-- /ユ/g
s/-・・-・ /モ/g
s/-・・・- /メ/g
s/・---・ /セ/g
s/・--・- /ー/g
s/・--・・ /ヱ/g
s/・-・-- /テ/g
s/・-・-・ /ン/g
s/・-・・- /ヰ/g
s/・-・・・ /オ/g
s/・・--・ /゜/g
s/・・-・- /ミ/g
s/・・-・・ /ト/g
s/---- /コ/g
s/---・ /ソ/g
s/--・- /ネ/g
s/--・・ /フ/g
s/-・-- /ケ/g
s/-・-・ /ニ/g
s/-・・- /マ/g
s/-・・・ /ハ/g
s/・--- /ヲ/g
s/・--・ /ツ/g
s/・-・- /ロ/g
s/・-・・ /カ/g
s/・・-- /ノ/g
s/・・-・ /チ/g
s/・・・- /ク/g
s/・・・・ /ヌ/g
s/--- /レ/g
s/--・ /リ/g
s/-・- /ワ/g
s/-・・ /ホ/g
s/・-- /ヤ/g
s/・-・ /ナ/g
s/・・- /ウ/g
s/・・・ /ラ/g
s/-- /ヨ/g
s/-・ /タ/g
s/・- /イ/g
s/・・ /゛/g
s/- /ム/g
s/・ /ヘ/g
s/カ゛/ガ/g
s/キ゛/ギ/g
s/ク゛/グ/g
s/ケ゛/ゲ/g
s/コ゛/ゴ/g
s/サ゛/ザ/g
s/シ゛/ジ/g
s/ス゛/ズ/g
s/セ゛/ゼ/g
s/ソ゛/ゾ/g
s/タ゛/ダ/g
s/チ゛/ヂ/g
s/ツ゛/ヅ/g
s/テ゛/デ/g
s/ト゛/ド/g
s/ハ゛/バ/g
s/ヒ゛/ビ/g
s/フ゛/ブ/g
s/ヘ゛/ベ/g
s/ホ゛/ボ/g
s/ハ゜/パ/g
s/ヒ゜/ピ/g
s/フ゜/プ/g
s/ヘ゜/ペ/g
s/ホ゜/ポ/g
y/イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセスン/いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせすん/
y/ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ/がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ/

GNU Sedで動きます。

2011年6月23日

OpenTypeフォントって組版情報てんこ盛り

大阪DTPの勉強部屋主催の「InDesign組版教室」を受講しはじめました。
大石十三夫さんのよい組版への蘊蓄とこだわりがたっぷりの講義がとても面白いのです。(http://www.osakadtp.com/

その第1回(6/17)はAdobe Illustratorの文字組版の不自由さが検討されたのですが、その中に、サイズが異なる文字を1行に混植する場合などで、個々のフォントの欧文ベースラインが分からないと、文字の並び具合や行間をきれいに揃えられないという話がでてきました。

大石さんのblog『なんでやねんDTP』だとこのあたりの話:
http://d.hatena.ne.jp/works014/20110623

そこで、欧文ベースライン位置を調べる方法をちょいと調べてみました。

フォントの仕様書を読む

まずは、OpenTypeフォントの仕様を勉強。仕様書の在処はもちろん、開発元Microsoft社です;
『OpenType specification』
http://www.microsoft.com/typography/otspec/

うわっ、といいたいぐらい、OpenTypeフォントには組版のための情報が盛り込まれてますね。

他の情報はおいおい勉強することにして、まずは、ベースラインについての項目は?と探してみると、「BASE表」あたりのようです。
「BASE - Baseline Table」
http://www.microsoft.com/typography/otspec/BASE.htm
「Baseline tags」
http://www.microsoft.com/typography/otspec/baselinetags.htm

ideo
これが欧文ベースライン位置を示すもの。ベースラインから仮想ボディの地(下辺)までの距離で示してあります(単位は1/1000)。
icfb
平均字面の地の位置。
icft
平均字面の天の位置。

これらをフォントファイルから読み出せばいい訳です。実際、InDesignにしてもIllustratorにしてもこうした組版情報をフォントから読み出して文字を並べているのです。人間にできない訳はありません。

たしかに、フォントファイルをxxdやhexdumpで16進ダンプして、仕様書と首っ引きで、読んでいけば読めます。

AFDKOTのインストール

でも、もっと楽な方法はないのか? いろいろ試してみたところ、Adobe提供のフォント開発ツールに含まれているものが使い易そうです。Mac・Windows両版が用意されています。

「Adobe Font Development Kit for OpenType」
http://www.adobe.com/devnet/opentype/afdko.html

インストールは、配布物をunzipして出てきた「FDK」フォルダを適当な場所(恒常的に置いておける場所:私は自分のホームディレクトリ下のライブラリフォルダに置きました)に移動して、フォルダ中のシェルスクリプトFinishInstallOSXをTerminalにドロップして実行するだけ。FDKフォルダへのリンクが~/bin/内に作られ、シェルの設定ファイルに必要な環境変数設定が追加記入されます。詳しくは、Read_Me_First.htmlに書いてあります。

spotコマンドをつかってBASE表を読み出し

AFDKOはフォントをつくるためのキットなので、こちらにも沢山の機能・コマンドが入ってます。

組版のための情報はその中の「spot」コマンドで読み出せます。Terminal上での操作になります。

使用法は「-h」オプションで表示されます。


moria: tac$ spot -h
Usage: spot [-u|-h|-ht|-r] [-n|-nc|-G|-T|-F] [-f] [-V] [-m] [-d][-i] [-o] [-t|-P] [-p] [-@ ]  +
OR: spot  -X 

Options:
    -u  print usage information
    -h  print usage and help information
    -ht print table-specific usage information
    -r  dump Macintosh resource map
    -n  dump glyph id/name mapping (also see '-m' below)
    -nc dump glyph id/name mapping, one per line (also see '-m' below)
    -T  list table-directory in sfnt table
    -F  list features in GPOS,GSUB tables
    -G  proof glyph synopsis
    -f  proof GPOS features in font order instead of GID order
    -V  proof glyphs in Vertical writing mode (same as -p6 below)
    -m  map glyph names into Adobe 'friendly' names, not AGL/Unicode names
    -d  suppress header info from proof
    -br proof glyph synopsis one per page
    -i  sfnt resource id list (see help)
    -o  TTC directory offsets list (see help)
    -t  table dump list (see help)
    -P  , e.g 'P cswh,frac,kern'  (use '-Proof' for all)
    -p  set proofing policies: 
        1=No glyph name labels
        2=No glyph numeric labels
        4=Show KanjiStandardEMbox on glyph
        5=Show GlyphBBox on glyph
        6=Show Kanji in Vertical writing mode
        7=Don't show Kanji 'kern','vkrn' with 'palt','vpal' values applied
    -@  set proofing glyph point-size (does not apply to certain synopses)
    -X  execute a series of complete command-lines from  [default: OTFproof.scr ]


BASE表を表示するには、オプションを「-tBASE=5」とすると見やすい表になります。(実行結果は左の図の前半)

moria: tac$ spot -tBASE=5 KozMinPro-Regular.otf 





































BASE表を持たないフォント

ところが、OpenTypeフォントでもBASE表をもたないものがあります。例えばダイナフォントの平成明朝など。

そういうフォントの場合、ベースライン位置についてはHHEAD表に記載されています。それを表示するにはオプションを「-thhea」とします。

moria: tac$ spot -thhea DFHSMinchoStd-W3.otf

descenderとascenderが分かります。



なお、縦組みの場合のベースライン位置などもBASE表に記載されています。しかし、縦組みの場合、たいていは「仮想ボディの中央揃え」でしょうから欧文ベースライン位置は欧文混植の場合以外は問題になることは少ないと思います。spotコマンドの出力には縦組の場合も出ていますがご参考まで。


2011年6月14日

複数のテキストフレームをひとつずつ別文書にコピー

わたしがつくっている新聞では「新年あいさつ」と「暑中見舞い」、年2回の名刺広告を掲載してます。

1枠の料金は年間購読料よりも高く、全体でけっこうな収入になるのですが、募集事務の手間がたいへんなのです。かつては編集部に4人もいて、財政部門も手伝ってくれていたのですが、ここ10年ぐらいはわたしひとりで作業をしています。
  1. 前回の降版データから、個々の名刺広告(ひとつひとつがテキストフレームに入っています)をコピーし、
  2. 1枚の募集要綱にひとつずつペースト(内容の確認や今回の掲載に向けての変更を広告主にしてもらうためです)、
  3. 広告主を照合しながら、募集要綱を宛名ラベルを貼った封筒に詰めて発送しています。
これをなんとか省力化しようと、大組ゲラ上の前回データを募集要綱(小組ゲラ)へコピー&ペーストするという作業をInDesignで自動化させてみました。

CS2なので複数文書の取り扱いに不便なところがあります。CS2ではcopy()とpaste()でしか文書間のコピー&ペーストができないようなのです。しかも、copy()とpaste()は前面のlayoutWindowにしか作用しない。

そこでlayoutWindowを切り替えてやらねばならないのですが、その際、documents[0]とdocuments[1]とが指し示す文書まで入れ替わってしまいます(そのためオブジェクト名の表記を変数をもちいて簡略化できません)。

CS4だとduplicateでコピー元やペースト先が明確に指示できるし、layaoutWindowを切り替える必要もないので、もっと楽にできそうです。

とりあえず動くようになったスクリプトはこんな具合です(エラー処理その他は未実装)。

var ohgumi = File.openDialog ("大組ゲラを開く");
app.open(ohgumi);
var kogumi = File.openDialog ("小組ゲラを開く");
app.open(kogumi);
 /*document[1]は大組ゲラ*/
var numTF = app.documents[1].textFrames.length;
for (i=0; i<numTF; i++){
 /*前面を大組ゲラに切り替え*/
 app.layoutWindows[1].bringToFront();
 app.select(NothingEnum.nothing);
 /*documents[0]は大組ゲラ*/
 app.documents[0].textFrames[i].select();
 app.copy();
 /*前面を小組ゲラに切り替え*/
 app.layoutWindows[1].bringToFront();
 app.paste();
 app.select(NothingEnum.nothing);
 /*documents[0]は小組ゲラ*/  
 app.documents[0].pages[i].textFrames[0].move(["0mm","0mm"]);
 if (i<numTF-1){
 /*documents[0]は小組ゲラ*/
  app.documents[0].pages.add(1701733408);
  }
 }