テキストが後注機能で生成されたものかどうかはStory.isEndnoteStory
で調べることができる、というメモ書き。
当初は文末脚注とかいう不思議な訳語だったんですが、機能としてはCC2018(v13)から実装されています。
それ以前のバージョンでは存在しないプロパティみたいなのでご注意を。
テキストが後注機能で生成されたものかどうかはStory.isEndnoteStory
で調べることができる、というメモ書き。
当初は文末脚注とかいう不思議な訳語だったんですが、機能としてはCC2018(v13)から実装されています。
それ以前のバージョンでは存在しないプロパティみたいなのでご注意を。
2024-02-22:コメントで教えていただきましたが、だいぶ漏れがあるようです。
2024-02-26:ということでコードを更新しました。末尾にちょっとだけ解説を追記しています。
というスクリプトを書きました。Gistのコードをアップデートしています(v2.0.0)。
StartupScripts*1に入れて使ってください。
ぱっと調べた限り、このあたりのオーバーセットテキストを検知できなかったです。
調べる方法がかなり難しいというかややこしかったので、現在調査中です。
前述のスクリプトは、それらを把握したうえでお使いください。
オーバーセットテキストを検知したいだけなら、InDesignのプリフライト機能を使ったり、PDF書き出し前に出る警告を確認するようにしてください。
このスクリプトを作成した経緯はこちらの掲示板からです。「オーバーセットされたテキストがあったら保存できないようにする」というのが大きな仕様でした。
で、職場で使っているプリフライト的なスクリプトでも似たような処理でオーバーセットテキストを検知しているものの、調べたら同じようにザルだったので、きちんとチェックできるようにしたいと思って調べました。その結果を今回のスクリプトに反映して公開した次第です。
TextFrame.overflows
の大きな穴パス上テキストはDocument.textFrames
で取得できないため、v1.0.0のスクリプトでは検知できていませんでした。これを検知するために、ストーリーを基準にオーバーセットテキストを探しています。この処理によって、後注のオーバーセットは検知できるようになります。
ただストーリーからオーバーセットを検知しようとすると、テキストフレームに1文字も収まらない場合はそのテキストフレームを取得するのが面倒っぽいので、全体の流れをテキストフレームの検知→脚注の検知→表組の検知→ストーリーの検知としました。
Footnote
オブジェクトのオーバーセットの調べ方脚注ですが、脚注にはなんとoverflows
プロパティが存在しません。そこでCharacters
コレクションオブジェクトから最後の文字のCharacter.paretTextFrames[0]
を調べます。ここでTextFrame
オブジェクトではなく、undefined
が返ってくるならその文字はオーバーセットしていると判断できます。
Cell
オブジェクトのオーバーセットの調べ方Document.sotires
ではセルの中のストーリーひとつひとつは取得できません。したがって、ストーリーの中の表組や、テキストフレームの中の表組など、どうにかこうにかObject.tables
にアクセスする必要があります。今回はテキストフレーム単位で表組を検知してみました。
オーバーセットテキストの検知だっっっっっる! という印象。素直にプリフライトを利用したり、InDesignの警告を利用したりしましょう。
InDesignの各Preference
にはたいていproperties
という便利なプロパティがいて、例えばこんなふうに使うことができます。
app.findGrepPreferences.properties = { findWhat: "hoge", fillColor: "blue" }; app.changeGrepPreferences.properties = { changeTo: "fuga", fillColor: "green" };
すごく便利で、僕もスクリプトを作る際に何度もお世話になっています。以前このブログで紹介し、InDesign日本語版リリース20周年イベントでも紹介した、InDesignのサンプルスクリプト「FindChangeByList.jsx」にも使われています。
続きを読むドキュメント内の欧文合字設定を全部オフにするInDesign用スクリプトを書きました。
スタイルの中を全部オフ→ドキュメントを検索置換で全部オフ
という処理です。
var doc = app.activeDocument; var pst = doc.allParagraphStyles; for (var i = 1, len = pst.length; i < len; i++) { pst[i].ligatures = false; } app.findTextPreferences = app.changeTextPreferences = null; app.findTextPreferences.ligatures = true; app.changeTextPreferences.ligatures = false; doc.changeText();
用法用量を守ってお使いください。
念のため全ストーリーの再計算とか挟んだほうがいいかもしれません。
昨日公開した記事で、~K
や\u
、\l
のコードポイントの範囲を調べました。
さすがに手作業で文字を入力するわけにもいかず、こんなスクリプトを作ってテキストフレームに文字列を入力→選択して表組に、という流れで資料を作成しました。
あんまり刺さる人はいなさそうですが、放流しておきます。このコードを見て使い方がぼんやりわかる方はどうぞ。
今年もQiitaや他のアドカレを眺めながら、こんな盛り上がるコミュニティにいたら楽しかったなと思うこの頃です。
さて、12月ということで振り返りっぽい記事を書こうかと思います。今回は正規表現について、過去ブログに書いた内容も交えながらTipsとして放流したいと思います。
言わずとしれた大人気フォントのヒラギノシリーズですが、一部の書体ではmacOSとWindowsで(何の警告もなく)濁点の大きさが変わるという鬼畜仕様があります*1。
今回は少し詳しく調べた結果を記事にしました。OSをまたいで作業する可能性がある環境の方はぜひ参考にしてください。
ご存知ない方のためにちょっとだけ説明すると、ヒラギノシリーズはスクリーン(旧大日本スクリーン、正式名称はSCREENホールディングス)がリリースしているフォントです。フォント名に「Pro」や「Pr6N」など、モリサワのフォントと同様の名前で文字セットを区別できますが、モリサワの基準とスクリーンの基準は異なります*2。
ヒラギノフォントをインストールしInDesignで使うためには(僕の理解の範囲では)、下記があります。
これらのうち、スクリーン版以外は利用できるウェイトが限られています。今回取り上げるのはモリサワ版(Morisawa Passport版)とmacOSバンドル版です。
いろいろな事情があってmacOSに搭載されるようになったヒラギノですが、DTP環境ではいま困ったことになっています。冒頭で書いたように、OSによって参照するフォントが異なり、濁点・半濁点の大きさが変わってしまうのです。
濁点の大きさなんて別に問題ないでしょ、と思いません? 僕はそう思いたいw
具体的に業務上どういうケースで困るのか、というのは仕事や案件ごとの判断かと思いますので、この記事では現象だけの説明に留めます*3。
実際に起きる問題としては下記2点です。
1について、印刷物という性質上、文字の送り込みが変わってしまうのは由々しき問題になり得ます。再版では基本的に修正のあるページしか差し替えないので、ページをまたいで本文の送り込みが変わることにより、印刷物で文字が消えてしまったり、ダブってしまったりする可能性があるということです。
2について、「ヒラギノ角ゴ」ではなく「ヒラギノ角ゴシック」と表示されるフォントがそれです。macOSバンドルのttcフォントでのみ提供されるので、Windowsでは利用できません。
OSをまたいで作業する可能性がある環境では、これらのことを把握しておかないと大きなトラブルになる可能性があるのです。
macOSにバンドルされたものはバージョン情報が正しく参照できませんと公式で謳われています*4が、情報を見ると一応それらしいものは確認できます。
どうなんでしょうね?
*1:古くはmacOS間でも起きます。macOS 10.11.2以前かそれ以降かで、システムにインストールされているヒラギノの濁点の大きさが変わります。ただ現状そんなに古いOSを使うはずがないので、今回はmacOSとWindowsという比較にしています。
*2:ヒラギノフォントの文字セット仕様:文字セット仕様(OpenType)|ヒラギノサポート
*3:例えば、macOSとWindowsを使ってドキュメントAとドキュメントBのPDFを出力した際、AとBで濁点の大きさが違うといったことが起こります。これを「問題がある」とするかは仕事や案件の性質や会社の方針、商習慣などによって変わると思うので、それはご自身の環境で判断してくださいということです。
参照:OS X El Capitan(10.11.2)搭載のヒラギノフォントと弊社製品版フォントについて|ヒラギノサポート
*4:参照:OS X El Capitan(10.11.2)搭載のヒラギノフォントと弊社製品版フォントについて|ヒラギノサポート
X(旧Twitter)のInDesignコミュニティで救難信号を受信しました(ご本人に掲載許可はいただいています)。
で、実は僕はこういうスクリプトを普段から書いていまして…。
ほとんど近しいものが手元にあったので、少し手を加えて公開しようと思った次第です。
スクリプトを実行すると、閾値以上のトリミングがあるリンク画像を選択した状態でスクリプトが一時停止します。このままスクリプトを中断するか、スルーして次の画像へ進みます。すべてのリンク画像の巡回が終わったらスクリプトが終了します。
再開したときにまた初めからというのがちょっとまだるっこしいですがご容赦ください。
続きを読むという話がUS版のフォーラムでも度々話題に上がっています*1。
それもそのはず、macOS SonomaはInDesign 2024のシステム要件には入ってないんですね*2。
ちなみに、Big Surは今年で(実質的に)サポート終了*3なので、DTP環境としてはMontereyかVenturaしかありません。
*1:USフォーラムを「sonoma」とかで検索するとすごい数出てきますが、その度にアドビの中の人が説明したり、Community Expertたちが説明したりしています
*3:今年9月のセキュリティアップデート以降、Big Surにはアップデートが入っていません
参考:Apple のセキュリティリリース - Apple サポート (日本)
InDesignでEventListener
なんかを実装していると、例えばInDesign側でダイアログが出ているタイミングで発火してしまうイベントがエラーになることがあります。
そこでInDesignが待機状態かそうでないか調べたいな〜と思ったんですが、BridgeTalk
を使ってすごくシンプルに解決できました。
イベントのコールバック関数にこれを書き加えるだけです。
if (BridgeTalk.getStatus() === "BUSY") { return; }
BridgeTalk.getStatus()
メソッドの戻り値は下記の通り*1。
戻り値(String ) |
詳細 |
---|---|
"BUSY" |
ビジー状態 |
"IDLE" |
待機状態 |
"PUMPING" |
(BridgeTalkメッセージの)処理中 |
"ISNOTRUNNING" |
起動していない(インストールはされている) |
"ISNOTINSTALLED" |
インストールされていない |
"UNDEFINED" |
起動しているが対応していない(CS2などで起きるらしい) |
この戻り値が"BUSY"
ならコールバック関数をreturn
で終了させる、というだけです。
ただし、もし複数のバージョンのInDesignが同時に起動していたらひと手間必要です。
BridgeTalk.getStatus()
メソッドに引数を渡さない場合、動作中のアプリケーションについて状態を調べて返してくれます。特定のアプリケーションとバージョンを指定する場合は、メソッドの引数に特定の書式の文字列を渡します。
InDesign 2021の場合、メジャーバージョンの16
に.064
を付け加えて"indesign-16.064"
となります*2。この.064
というのは、64bit版という意味です。Windows版の少し古いアプリケーションだと32bit版もあるので、その場合は.032
になります。Macの場合は.064
でOKです。
VS Codeからこの値を確認する際は、たいてい"PUMPING"
が返ります。
これはおそらくVS CodeがBridgeTalk
の仕組みを利用しているからでしょうね。EventListener
に登録したり、アプリケーションから直接実行したりすると、ちゃんと"IDLE"
などと値が返ってくるはずです。
*1:「JavaScript Tool Guide CC:BridgeTalk Class」を参照
*2:さらに末尾にロケール表記を続けると言語版まで指定できますが割愛