DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

【InDesign】そのテキストが後注かどうかを調べる

テキストが後注機能で生成されたものかどうかはStory.isEndnoteStoryで調べることができる、というメモ書き。

www.indesignjs.de

indesign.cs5.xyz

当初は文末脚注とかいう不思議な訳語だったんですが、機能としてはCC2018(v13)から実装されています。

study-room.info

それ以前のバージョンでは存在しないプロパティみたいなのでご注意を。

【InDesign】ドキュメントにオーバーセットテキストがあったら保存できないようにするイベントリスナー型スクリプト

追記

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の警告を利用したりしましょう。

*1:StartupScripts is 何? という方は、昔の登壇スライドを参照ください

便利なPreference.propertiesプロパティの落とし穴

  • 前段
  • 問題
    • 問題の切り分け
      • 存在しないプロパティ
      • 型違反
      • fillColorがおかしいのか?
      • 取得できても利用できないオブジェクト
      • 試してみよう
  • どうやって回避する?
  • まとめ
  • 余談

前段

InDesignの各Preferenceにはたいていpropertiesという便利なプロパティがいて、例えばこんなふうに使うことができます。

app.findGrepPreferences.properties = {
    findWhat: "hoge",
    fillColor: "blue"
};
app.changeGrepPreferences.properties = {
    changeTo: "fuga",
    fillColor: "green"
};

すごく便利で、僕もスクリプトを作る際に何度もお世話になっています。以前このブログで紹介し、InDesign日本語版リリース20周年イベントでも紹介した、InDesignのサンプルスクリプト「FindChangeByList.jsx」にも使われています。

uske-s.hatenablog.com

続きを読む

テキストの欧文合字を一括でオフにするInDesign用スクリプト

ドキュメント内の欧文合字設定を全部オフにする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();

用法用量を守ってお使いください。
念のため全ストーリーの再計算とか挟んだほうがいいかもしれません。

コードポイントで指定した範囲の文字列を取得するInDesign用スクリプト

昨日公開した記事で、~K\u\lのコードポイントの範囲を調べました。

uske-s.hatenablog.com

さすがに手作業で文字を入力するわけにもいかず、こんなスクリプトを作ってテキストフレームに文字列を入力→選択して表組に、という流れで資料を作成しました。

あんまり刺さる人はいなさそうですが、放流しておきます。このコードを見て使い方がぼんやりわかる方はどうぞ。

2023総まとめ:InDesignの正規表現にまつわるTips振り返り

今年もQiitaや他のアドカレを眺めながら、こんな盛り上がるコミュニティにいたら楽しかったなと思うこの頃です。
さて、12月ということで振り返りっぽい記事を書こうかと思います。今回は正規表現について、過去ブログに書いた内容も交えながらTipsとして放流したいと思います。

  • 選言(|)の扱いがCC2014から変更された?
  • 正規表現スタイルの初見殺し
  • OSで区別される、見た目のわからない文字
  • 囲み数字をコードポイントで制御する
  • メタ文字.に改行文字も含ませるには
  • 肯定後読みと\Kの使い分け
  • 桁区切りのカンマを挿入する正規表現
  • 空白文字・分割文字を示すメタ文字
  • 「漢字」を示す正規表現
  • アルファベットの検索
  • 正規表現検索では検索できない文字
  • まとめ
続きを読む

OSをまたいで作業する際に注意すべきヒラギノフォント

言わずとしれた大人気フォントのヒラギノシリーズですが、一部の書体ではmacOSとWindowsで(何の警告もなく)濁点の大きさが変わるという鬼畜仕様があります*1

今回は少し詳しく調べた結果を記事にしました。OSをまたいで作業する可能性がある環境の方はぜひ参考にしてください。

  • ヒラギノフォントとは?
  • 何が問題なのか
  • 問題の詳細と対策
    • 濁点の大きさが変わるフォントの調査結果
    • macOSバンドルでのみ提供されるヒラギノ
    • なぜOSによってフォント(グリフ)が異なるのか
    • どう対策するか
      • 該当フォントを避ける
      • スクリプトで機械的にチェックする
  • 余談
  • 参考

ヒラギノフォントとは?

ご存知ない方のためにちょっとだけ説明すると、ヒラギノシリーズはスクリーン(旧大日本スクリーン、正式名称はSCREENホールディングス)がリリースしているフォントです。フォント名に「Pro」や「Pr6N」など、モリサワのフォントと同様の名前で文字セットを区別できますが、モリサワの基準とスクリーンの基準は異なります*2

ヒラギノフォントをインストールしInDesignで使うためには(僕の理解の範囲では)、下記があります。

  • スクリーン版
  • モリサワ版
  • macOSバンドル版
  • Adobe Fonts版

これらのうち、スクリーン版以外は利用できるウェイトが限られています。今回取り上げるのはモリサワ版(Morisawa Passport版)とmacOSバンドル版です。

何が問題なのか

いろいろな事情があってmacOSに搭載されるようになったヒラギノですが、DTP環境ではいま困ったことになっています。冒頭で書いたように、OSによって参照するフォントが異なり、濁点・半濁点の大きさが変わってしまうのです。
濁点の大きさなんて別に問題ないでしょ、と思いません? 僕はそう思いたいw
具体的に業務上どういうケースで困るのか、というのは仕事や案件ごとの判断かと思いますので、この記事では現象だけの説明に留めます*3

実際に起きる問題としては下記2点です。

  1. オプティカルカーニングを使用している場合、文字の字幅情報が変わり、文字の送り込みが変わる可能性がある
  2. macOSでしか提供されないフォントが存在するのでWindowsではフォントが利用できない

1について、印刷物という性質上、文字の送り込みが変わってしまうのは由々しき問題になり得ます。再版では基本的に修正のあるページしか差し替えないので、ページをまたいで本文の送り込みが変わることにより、印刷物で文字が消えてしまったり、ダブってしまったりする可能性があるということです。
2について、「ヒラギノ角ゴ」ではなく「ヒラギノ角ゴシック」と表示されるフォントがそれです。macOSバンドルのttcフォントでのみ提供されるので、Windowsでは利用できません。

OSをまたいで作業する可能性がある環境では、これらのことを把握しておかないと大きなトラブルになる可能性があるのです。

macOSにバンドルされたものはバージョン情報が正しく参照できませんと公式で謳われています*4が、情報を見ると一応それらしいものは確認できます。

著作権情報に「ver.」の表記がある…?

どうなんでしょうね?

*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コミュニティで救難信号を受信しました(ご本人に掲載許可はいただいています)。

で、実は僕はこういうスクリプトを普段から書いていまして…。
ほとんど近しいものが手元にあったので、少し手を加えて公開しようと思った次第です。

概要

スクリプトを実行すると、閾値以上のトリミングがあるリンク画像を選択した状態でスクリプトが一時停止します。このままスクリプトを中断するか、スルーして次の画像へ進みます。すべてのリンク画像の巡回が終わったらスクリプトが終了します。

動作イメージ

再開したときにまた初めからというのがちょっとまだるっこしいですがご容赦ください。

続きを読む

InDesign 2024とmacOS Sonomaの相性が最悪らしい

という話がUS版のフォーラムでも度々話題に上がっています*1
それもそのはず、macOS SonomaはInDesign 2024のシステム要件には入ってないんですね*2

記事執筆時点での対応macOS

ちなみに、Big Surは今年で(実質的に)サポート終了*3なので、DTP環境としてはMontereyかVenturaしかありません。

NOTES

2023-11-06 16:01 追記

InDesign 2023で不具合が起きるため、macOS Venturaはv13.6以上にしてくださいというスレッドがありました。ご参考まで。

*1:USフォーラムを「sonoma」とかで検索するとすごい数出てきますが、その度にアドビの中の人が説明したり、Community Expertたちが説明したりしています

*2:参照:InDesign の必要システム構成

*3:今年9月のセキュリティアップデート以降、Big Surにはアップデートが入っていません
参考:Apple のセキュリティリリース - Apple サポート (日本)

InDesignが待機状態かビジー状態か調べたい

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:さらに末尾にロケール表記を続けると言語版まで指定できますが割愛