主にInDesignによる新聞組版Tips中心です。Mac使いですが業務はWin多め。Win DTP Tipsを増やしたい

【InDesign】右クリック→(リンク)編集ツール のカスタマイズ

Windows DTP屋の皆様、お元気ですか。

Adobeアプリには、右クリック→(元データを編集)編集ツール→ からアプリを指定し直接開ける機能があります。

Mac版は、システムで見つかる関連アプリをメーカーに依らず全Version表示しますが(これはこれで鬱陶しい)、Win版はOS側の関連付けの性質が悪く、直近のAdobeインストールVersionを1~2しか表示しません。

f:id:chocomarine:20210121152404j:plain
(cc2019~cc2021までインストール済み・cc2020で作業中)

毎回「その他...」からドライブ(C:)を一から掘り起こさねばならない。 近いディレクトリをDirect Foldersに登録して使っていましたが、それでも2 touchくらいロスが出る。*.exeそのものの登録実行はできなかった

しかし、ボヤいたら神が降臨して下さいました。あるふぁ(仮)さん。本当に神です、いつも本当にありがとうございますーー!


用意するもの

検証環境:Windows 10(2004、20H2)InDesign CC2020(15.0~15.1.2辺り)Illustrator CC2020(24.2.3)

追記:20H2?のアップデート以降、既に起動中の関連アプリがアクティブウィンドウになりません。(2021.3.10)

記述

  1. ExtendScript Toolkit CCをインストール後、起動。新規ドキュメント(ソース)に以下をコピペ

    ※下記セッション名(targetengine)は、他と被らない名で任意
    ※異versionを同時に立ち上げた時も重複してしまうので注意

      //DESCRIPTION:オブジェクトを右クリック「編集ツール」にadobeアプリを追加する(Startup Scripts)
      /*
          最初のとこのアプリ名のリストは、左側がメニュー名(なんでもいい)、右側がBridgeTalkでアプリを特定する文字列。
          調べるには対象にしたいアプリでalert(BridgeTalk.appSpecifier)というスクリプトを実行する
          */
    
      #targetengine "sessionAppMenu"
      apuriNames=[
      ["Illustrator CC 2019","〓"],
      ["InDesign CC 2019","〓"],
      ];
    
      for(var i=0;i<apuriNames.length;i++)
      {
          var m = app.scriptMenuActions.add (apuriNames[i][00]);
          m.addEventListener("onInvoke", (function (t)
          {
              return function()
              {
                  var gs = [], ls = [], s = app.selection;
                  for(var i=0; i<s.length; i++)
                  {
                      if (s[i].hasOwnProperty("itemLink")) gs.push(s[i]);
                      else gs.push.apply(gs,s[i].allGraphics);
                      }
                  for(var i=0; i<gs.length; i++)
                  {
                      if(gs[i].itemLink.status == LinkStatus.NORMAL) ls.push(File(gs[i].itemLink.filePath) + "");
                      }
                  var bt = new BridgeTalk;
                  bt.target = t;
                  bt.body = "var p='"+ls.join(",")+"'.split(',');for(var i=0;i<p.length;i++)app.open(File(p[i]))";
                  bt.send();
                  }
              })
          (apuriNames[i][1]) );
    
          app.menus.item("レイアウトのコンテキストメニュー").submenus.item("編集ツール").menuItems.add(m);
          }
    

  2. Windowsの隠しファイルを表示=ON

    f:id:chocomarine:20210121173758j:plain
    タスクバー「ここに入力して検索」→ 隠しファイル(入力)→隠しファイルを表示する
  3. PC→ Windows(C:)→ ユーザー→ (ユーザー名)→ AppData→ Roaming→ Adobe→ InDesign→ Version xxxx-J→ ja_JP→ Scripts→

    f:id:chocomarine:20210121174458j:plain

    Startup Scripts 名のフォルダを作り、ここへ保存


対象アプリの文字列を調べる

  1. 対象アプリケーションとAdobe ExtendScript Toolkit CC(以下ESTK)を起動
  2. ESTKで対象アプリケーションを指定
    f:id:chocomarine:20210121161545j:plain
    (ドキュメントの左上→ プルダウンリスト)
  3. 新規ドキュメント(ソース)に下記をコピペ、(メニュー)デバッグ→実行

     $.writeln(BridgeTalk.appSpecifier)
    

    f:id:chocomarine:20210121161254j:plain
    デバッグ→ 実行)

  4. (メニュー)ウインドウ→ JavaScriptコンソール展開

    f:id:chocomarine:20210121162306j:plain

  5. アプリバージョン箇所をコピー、最初の記述内 〓 に差し替え、上書き保存
    例:["InDesign CC 2020","indesign-15.064"],

    文字列が分かれば、もうこのソース.jsxは不要です。


ESTKを入れられなかった人は、メモ帳などで
$.writeln を
alert に差し替えてScript Panelフォルダへ保存。拡張子を(.jsx)にリネームしInDesignスクリプトパネルから実行、アラートで出た名称を記述内に記入して下さい。雑説明

f:id:chocomarine:20210121160758j:plain


InDesignを再起動して、運用してみましょう

f:id:chocomarine:20210121180534j:plain
(いぇあー)

編集ツール→ その他メニューに、任意のAdobeアプリケーションが追加されましたー

※リンクパネルの同機能に反映・応用はできません


基本機能と違い、編集後リンクバッジのクリックが必要になりますが、なに、そのくらいの手間は甘んじましょう。

f:id:chocomarine:20210121181024j:plain

これでまたひとつ、InDesignをアナタ色に染める事ができました!

※そう、このコメントを送ったのは私でした

Windowsから見えるMacの不可視ファイルを一括削除

※〜MacOS 10.6〜10.14且つHFS+(Mac OS拡張ジャーナリング1 限定。10.15及びAPFSは手元に環境がない為、カスを吐くのか現時点では検証できません(2020.10)

※当方紙媒体DTP戦士なため、基本的に最新OSの運用は致しません。ご了承下さい。

Automator内の説明・記述を再度修正しました orz(2020.11.3)
サポートのHARMAN移管に伴い、Adobe AIR配布Link先を修正しました(2021.3.9)


NASもしくはUSBメモリーなどで、Windowsと直接生データの遣り取りをしている方。

f:id:chocomarine:20201013114027j:plain
Macからは見えない、先頭が「._」で始まる謎のデータが発生

WindowsLinux側からはこういったデータが見えていて、知らずに相手方(もしくはサーバ管理者)に迷惑をかけているかもしれません。事前にMac側から消しておいてあげましょう。まあ目障りなだけで、然程実害ないんですが。 ただプログラムがコレも数としてカウントしてしまうので、困る事はあります

MacからのNAS(smb)接続でデータコピーや移動に失敗したり、互換USBメモリFAT32exFATボリューム)のイジェクトに失敗するのは、この見えないカスが影響している場合があります。試してみて下さい。

これらは俗にAppleDouble 2(のカケラ)、リソースフォークなどと呼ばれます。面倒なので説明はWiki先生に任せて← まず結論から、削除方法。


NAS or 互換USBメモリーに上げた後のフォルダに対して処理して下さい。 それ以前、リソースフォーク生成前には意味ありません。発生条件は下に記載します

MacOS(~10.14)側から削除

Automatorに登録

  1. Automatorを起動、新規「サービス」選択
    f:id:chocomarine:20201028182110j:plain

  2. 検索「シェル」→ 「シェルスクリプトを実行」をつかみ、右へドラッグ
    f:id:chocomarine:20201024120039j:plain

  3. 次の選択項目を受け取る:フォルダ
    検索対象:Finder
    シェル:/bin/bash
    入力の引き渡し方法:引数として
    f:id:chocomarine:20201028182445j:plain

  4. 記述「do ~ done」の間に、下記コマンドを入力

     find "$f" \( -name '.DS_Store' -or -name '._*' -or -name '.Bridge*' -or -name 'Thumbs.db' \) -delete -print
    

    f:id:chocomarine:20201028182044j:plain

  5. 検索窓に「リスト」→ 出てきた「リストから選択」を右下へドラッグ→ メッセージに文言を入力(削除されたファイル)
    f:id:chocomarine:20201104154650j:plain
    リストから選択→ シェルスクリプトの下へドラッグ

  6. 名前をつけて保存。
    f:id:chocomarine:20201024132006j:plain

    ここに保存される(ユーザ→ [ユーザー名]→ ライブラリ→ Services
    f:id:chocomarine:20201024132031j:plain

    これで登録完了。


削除の実行

  1. 対象フォルダを右クリック→ サービス
    f:id:chocomarine:20201024132356j:plain
    先ほど作った設定を選択

  2. find( )の条件(名称指定)で見つかった削除リストが表示される
    f:id:chocomarine:20201024132600j:plain
    ※このウインドウが出る前にもうdelete済みなので、ここで実行・拒否を選びたい場合は構造と記述を少し変えないといけません(面倒臭い)← 

  3. →OKで閉じる。


ターミナルからの直接実行も可能ですが、パス指定の楽な乙女ちゃんの方が断然お勧め。

シェルスクリプト部分は、ここまで冗長でない

dot_clean --keep=dotbar "$f"

※通常ターミナルでは最後を対象フルパス or .(ピリオド=今いる場所) と書きますが、Automatorでは最初に for f in "$@"と変数宣言する様です

とするやり方もありますが、どうもデータフォーク側にも影響があるようで、新規保存し直すまで一部アプリでサムネイルが見えなくなります。やめておいた方が無難。

f:id:chocomarine:20201026135256j:plain
ドキュメントアイコンが半透明に

f:id:chocomarine:20201026135338j:plain
Bridgeウインドウ内で見えない

カスどもが確実に消えたかどうかMac OS GUI上から視認する事はできないので、ターミナルから

find [フォルダをターミナルウィンドウにドロップ] \( -name '.*' -or -name 'Thumbs.db' \) -print

→enter で確認してみましょう。 ※スクエアブラケット[]はトル

※フルパスの中にスペースがある場合、フォルダードロップではなく、
対象を右クリック→ パスをコピー→ 記述「find(半角スペース)」の後にカーソルを立て、(ターミナルメニュー)編集→「テキストをエスケープしてペースト」
で指定して下さい。

・・・USBメモリーの

.fseventsd .Spotlight-V100 .Trashes

を消していないのは分かると思いますが、これらは互換ドライブがマウントしただけでMacOSが生成する性質なためMac側から消す意味がなく、Windows上で手動削除するしかありません ←

この3つは削除してなんの問題もありませんが、Macからマウントするたびに復活します。


デキる人であれば、cronKeyboard Maestro[^3] などで自動削除スケジュールが作れると思いますが、後述の様にclientでの大量処理は負荷がキツい以上、狭い範囲の固定ディレクトリに対してのスケジュールでは、あまり意味ないのではないかと。そういう処理はサーバ側に組ませる方がいいと思います。

[^3]: Mac用キーボードユーティリティ。有償 Keyboard Maestro


ネット上でこの削除方法を探すと、'.AppleDouble' 指定のみのものをよく見ますが、複数の環境で試していずれも失敗しました。 ※10.10、10.14で検証

例え属性指定できたとしても、消さない方がいい種類のある可能性もあるので、愚直に名称でひとつひとつ指定した方がいいのではないかなと、私は思ってます。

因みにNASの場合、AFP(Apple Filing Protocol)[^4] 接続する事でAppleDoubleリソースフォーク生成(分離)は回避できます。afp対応しないnetatalk 3.x[^5] 以外のNASでは不可。NAS以外の事情は知りません

将来的にAppleが悔い改めデータフォーマットを見直す時が来れば、これらは解消するのかもしれません。 apfsはどうなってますのやろ

[^4]: AFP Wikipedia

[^5]: netatalk Wikipedia


「ネットワークボリューム・USBメモリーに最初から.DS_Storeを作らない方法(コマンド)」は広く紹介されていますが(※Macボリューム上は不可能)、AppleDouble(リソースフォーク)及び「. fseventsd .Spotlight-V100 .Trashes」を作らない方法というのは、理論上不可能。ですよね


Windowsから削除

コマンドプロントから「.AppleDouble」で削除するエントリーを見かけましたが、私が検証した限りではPowerShellコマンドプロンプトは、例え名称決め打ち指定であっても、CUI上でApple独自のリソースフォークを認識できない様です。何かしらやりようはあるんでしょうか。

GUI側ではしっかり選択・deleteできるクセに、、

Mac OSと同様に他言語からの削除はできますが、まだアプリ化する能力が私にはない為、今回は断念。  ESTKだとドキュメント・フォルダ両方削除できる再帰処理がちっと面倒だった← のもあるし、わざわざESTK起動してパスを選択しにいって、、あまり効率的ではありませんよね

なので、Windowsではカス削除くんを利用するのが一番手っ取り早いです。

カス削除くんのインストール・実行

カス削除くん

Adobe AIR(Runtime)必須。

※カス削除くん公式内のAdobe AIRはリンク切れになっています。
Adobe AIRは、2021.1よりサポート及び開発をHARMANに移管しました。2021.3.8現在

f:id:chocomarine:20201026132517j:plain
フォルダをドロップ→ カスファイルを削除する

カス削除くんMacでは、AppleDoubleカスを消す事はできませんMacからは、先に説明したAutomatorかターミナルコマンドを。

更に、ご覧になって分かるように.fseventsd .Spotlight-V100 .Trashesには対応していません←←

この3つは手動で削除して下さい、、


不可視ファイル類が発生する条件:


注意事項(共通)

  • ボリューム丸ごと突っ込まない 数が多いと処理しきれません

  • ボリューム直下・ユーザーディレクトリ直下を丸ごと突っ込まない 必須不可視データまで消してしまう危険が(あるかもしれない)


不可視ファイルの種類(削除可)

  • .DS_Store
    Winのdesktop.iniと同等。手動配置の位置、ウインドウサイズ、アイコンサイズ等、フォルダオプション情報を記録。Macデスクトップ上以外は消してOK

  • ._.DS_Store
    .DS_Store自体をMacOS側から他へコピーした事で、そのリソースフォークとして作られたもの(多分)

  • .fseventsd
    MacOSのFile System Event log。ファイルが作成、変更、または削除されるたびに通知され、実行中のMacプログラムが情報を知るために参照する

  • .Spotlight-V100
    スポットライトインデックス(database)
    MacOSが検索するためのインデックスを作成する …そういえば、これを今後作成しないターミナルコマンドが確かありましたよね

  • .Trashes
    MacOS固有の「仮ゴミ箱」システム。

  • Thumbs.db
    Windows上のアイコンプレビューを高速化するためのキャッシュ。

捨てない方がいい不可視ファイル

  • .localized
    (カラム・アイコン表示以外で)フォルダ・データ名の日本語表示に必要

  • デスクトップ上の.DS_Store
    アイコン表示での配置・アイコン等の情報が初期化されます

  • Windowsデスクトップ上のdesktop.ini
    Winのデスクトップ情報。表示オプション→ 表示→ 保護されたオペレーティングシステムファイルを表示しない→ OFF で見える(非推奨)


最後に

何か間違えてたら、ご指摘お願いします←

ちゃんとエディタでチェックしてないので、脚注3以降の表示がおかしい・・(泣

11.30 追記

次期MacOSではAFPを切り捨て、SMB接続に絞る様ですね。

カス問題も、そちらに合う様にデータ構造が改良されるのでしょう。まだまだ読めませんが。


  1. ディスクユーティリティでフォーマットできるファイル・システム・フォーマット Appleサポート

  2. AppleSingleとAppleDouble Wikipedia

【Windows】【xdoc2txt】Wordファイルをテキスト保存 ※Word不要

2020.9.25 追記あり

会社の使用PCが本格的にMac→Winになってきたので、テキスト処理の方もぼちぼち Jedit秀丸への移行を進めています。


xdoc2txt

ワンクリックでWord→txt。テキストボックスも含めてくれます(順不同、注意あり)※Win専用
EB series support page
ダウンロード→ xdoc2txt→ x64版

f:id:chocomarine:20200923170917j:plain これ、知人の小川さんがDTP東京勉強会で紹介した気もします(忘れた)。PDFやExcel一太郎も対応ですが試していません。

こんなもの作る方はまあコマンドオタクなので、READMEを読んでも使い方はワケが分からない。というわけで。


インストール&セッティング

システム要件:Microsoft Visual C++及びVisual Studio(2015,2017,2019)必須

タスクバー「ここから入力して検索」→ アプリと機能→ 下へスクロール

zip解凍後、好きな場所へ。Commandフォルダ内にある→ xdoc2txt.exeのショートカットを作成。※ショートカット作成後は、本体の場所を移動しないで下さい もちろんプロパティからパスを直せばいいんだけど、便宜上

Windows(C;)→ 表示(タブ)→ 隠しファイル ON

f:id:chocomarine:20200923171703j:plain
これをしないとユーザーからAppDataへ入れません

Windows(C:)→ ユーザー→ (ユーザー名)→AppData→ Roaming→ Microsoft→ Windows→ SendTo へ入れる

f:id:chocomarine:20200923172031j:plain
右クリックメニュー「送る」へ入ります

xdoc2txtショートカットのプロパティ(Alt + enter)→ ショートカット→ リンク先

*.exeの後にオプションを追記

f:id:chocomarine:20200923173359j:plain
(末尾に [半角スペース]-f[半角スペース]-u)
-f… ファイルに書き出す

-u… UTF-16 LE(BOM付き)
参照→ コマンドオプション


変換処理

Wordドキュメントを用意

f:id:chocomarine:20200923173625j:plain

※実際はドキュメントを開く必要はありません

Wordドキュメントを右クリック→ 送る→ xdoc2txt
f:id:chocomarine:20200923174923j:plain
f:id:chocomarine:20200923174946j:plain
f:id:chocomarine:20200923175004j:plain

元と同じディレクトリに、*.txtができる
f:id:chocomarine:20200923175108j:plain

結果

f:id:chocomarine:20200923175137j:plain
テキストボックス文が重複していますね


  • 複数選択して一括実行もできます。

  • 書き出されたテキストボックス部分は、移動させるなり改行で区切るなり、好きに編集して使って下さい。

  • コマンドオプションは、公式のリストを見て好きな組み合わせにして下さい。

  • ルビ文字は 親文字(ルビ文字) 丸パーレンに囲まれます

  • 校正機能などを使っているドキュメントの場合、Word上で見えていない文章なども書き出される(と思います)

  • まだ使い始めて間がないので、テキストボックスがある場合にどんな結果になるか検証不足です。文章が消えていたりする危険もあるので、よく注意を。(多分、何かしら崩れます)


…つまり、オリジナルがどんなレイアウトなのか保障がないため、結局はOfficeを持っていた方がベスト ちょ

モバイル版とブラウザ版Officeが無償で提供されているので、最低限それらでチェックを。※モバイル版は2021.1.12に提供及びサポート1が終了しました 但しこれらも、有料版と同等のレイアウト表示が担保されるわけではなさげ。

support.microsoft.com

ま有料版も、バージョン変わると結局アレですけど

間違っても、OpenOfficeLibreOfficeで書き出し・体裁チェックなどしない様に。


Macの方は、タクトシステムさんからWordドキュメントをテキストに変換を利用できます。

こちら私が長年利用した限りでは、テキストボックスがある場合本文がカケる・重複する・テキストボックス文が本文の変な所に差し込まれるという現象を確認しています。Officeのバージョンにより症状は異なります。昔のWordバージョンでは、テキストボックス箇所が丸々消えるだけだったんですが

これは、xdoc2txtでも同様ではないかと予想します。


まあ結局「Wordの変態仕様による見た目上を最も忠実に再現しつつ書き出し」できるのは、ネイティブOfficeからの直接書き出しに勝るものはなく、xdoc2txtとて余程プレーンな作りのWordでない限り、積極的にお勧めはしません。

何という結論

…それでも、圧倒的に早くストレスがない方法ではあるので、素直な構造の物であればよく活用しています。

要はモノを見極め、使い分けること。


2020.9.25 追記

一部*.docで、文章中に半角スペースが大量挿入される現象を確認(テキストボックスなしドキュメント。エディタでスペースだけ一括削除すれば、問題なさそう)

【InDesign】EDICOLOR機能を再現(4)オブジェクト作成後、自動で選択ツールに切り替え(2)

その(1)の続編です。

※停止スクリプト向けに内容を修正しました(2020.9.1)

※停止スクリプトの元ネタ・てんせーのLinkを、新サイトに修正(2021.12.11)


昨年4月に(1)の方法で一旦挫折した表題ですが、弊エントリーを見かけたあるふぁ(仮)さんが、Twitterでサクッと書いて下さいました。

素晴らしい、ズバリそのものです。転載を許可して頂きありがとうございます。今後もよろしk ←

Startup Scriptsなどに入れてお使い下さい。毎回自動で稼働するようになります。 Mac版はエイリアス

スクリプトパネル→ ユーザー(右クリック)→ エクスプローラー(Finder)で表示→ ここにStartup Scriptsフォルダを作成


長方形ツール等を使ったあと選択ツールになるようにする

※オブジェクト属性(パスオープン・クローズ等含む)が変化しないものは対象外(拡大縮小、回転、シアー、自由変形、スムーズ、グラデーション系、アンカーポイントの追加・切り替えツールなど)

※避けた方がいいもの:
文字=テキストツール(入力モードにした瞬間、選択ツールへ持ち替えてしまうよ)
ペンツール(新規アンカーを打つごとに選択ツールになってしまう)
アンカーの削除(いつ実行されるか予測が難しい)

//DESCRIPTION:何か作ったあと選択ツールになる

#targetengine tool1_v2022
f_= false;
t_= "|線ツール|長方形ツール|楕円形ツール|多角形ツール|長方形フレームツール|楕円形フレームツール|多角形フレームツール|横組みグリッドツール|縦組みグリッドツール|鉛筆ツール|"

app.toolBoxTools.addEventListener ("afterAttributeChanged", function(ev)
{
    if (t_.indexOf ("|" + ev.attributeValue + "|") >-1)
f_= true
    });
var listner = app.addEventListener("afterSelectionChanged", function(ev)
{
    if (f_)
    app.toolBoxTools.currentTool = UITools.SELECTION_TOOL, f_= false;
    });
listner.name = 'toolEvent';

EventListener afterAttributeChanged=属性が変更された時(after)のイベント

app.toolBoxTools.currentTool = UITools.SELECTION_TOOL=ツールのカレント(現在)を選択ツールにする

という内容。

この仕様を停止するには、下記のスクリプトを別途用意し

#targetengine tool1_v2022
app.eventListeners.itemByName('toolEvent').remove();

実行すると、デフォルトの仕様に戻ります。再度走らせるには、元のスクリプトをまた実行すればOK。

参考:てんせー

停止は以下でもOK。ちゃんと動きました

いずれもバージョンを同時に複数立ち上げる時には、#targetengine名の重複を避けて下さい(例の様に、バージョン名を末尾に追加するなど)

#targetengine tool1_v2022
listner.remove();

removeEventListeners というメソッドもあるらしいのですが、調べるとこれ少し面倒らしく、断念します。


あるふぁさん、ご指南ありがとうございます。多謝!

【InDesign】EDICOLOR機能を再現(4)オブジェクト作成後、自動で選択ツールに切り替え(1)

しばらく放置状態でした・・・すっかりMarkDownも忘れました

毎日なんとなく訪問者様があります、ありがとうございます。


Adobeさんは新規オブジェクトを作成後、ずっとそのツール(長方形ツールなど)に留まります。

そのままctrl(cmd)を押下すると一時的に選択ツールになり(※)、作成・移動(変形)の連続操作をシームレス且つ迅速に行えるというわけで、イラスト描きさんにはこの方が楽なのかもしれません。

※正確には、選択・ダイレクト選択のうち【前回使用した方】になる

ここが「一回作ったら即掴んで移動」で身についている人は、ツールの持ち替えにいちいち「全/半角キー→(半角Mode)V」と手順を踏まねばならず、更にWindowsはキーのフォーカスをいちいち奪われやすいため、時に「escのマッハ二度押し」も必要。マジイラつきます。マジ憎い、アクセラレーターキー。やや脱線


EDICOLORは新規作成後、必ず自動で選択ツールに戻る仕様となっています。意識せず即編集・移動作業へ移行できる。

逆に留めたい場合、Alt押下しながらツールをクリックでおけ。初級ユーザーを考慮し、且つユーザー側に選択権もある親切設計。素晴らしい設計思想だネッ!← いやマジで

InDesignのeventListnerでどうにか仕込めないか…と、2019.4開催DTPerのスクリプトもくもく会にてビッグ3、Yusukeさんこうちゃんさんお〜まちさんに相談しました。

が、上記のeventは「ちょっと現実的ではない」「他の方法は思いつかない」という回答。

結果、以下が妥協点です。


F1ショートカットキーに「選択ツールに持ち替え」スクリプトを割り当てる

(menuAction:選択ツールを選ぶ)

//DESCRIPTION:F1ショートカットキーに「選択ツールに持ち替え」スクリプトを割り当てる(らーで閣下)
// このスクリプトに、ショートカットキー「F1」を割り当てて下さい。
//(メニュー)編集→ キーボードショートカット→ 機能エリア=スクリプト→(このスクリプトに新規ショートカット)F1割当→ 保存(Myセットを保存)

#target "InDesign"
app.menuActions.item('$ID/Selection Tool').invoke();

要するにほぼ敗北ですが、仕方ない orz

因みに私はIllustratorも、選択を解除=F1にしています(escと連携しやすい)。

F1デフォルトはいわゆる「ヘルプ」ですが、単一で使え且つ扱いやすい位置というと、これが無難かなと。…Windowsは有効キーが少なくていけない。 escは選択トグル関係で外せないため、却下。WIN/変換/無変換はユーティリティを導入しないと使えない。


余談ですが、テキスト入力モードからフレーム選択状態へ(選択ツール)ショートカットは、デフォルトでesc。

これを一歩進んで、

選択を解除= esc(割り当て追加)
セル/テキストの選択へトグル= 削除(空欄)

f:id:chocomarine:20200821150155j:plain
機能エリア:テキストと表

で、escを完全に「入力モードのトグル」&「選択解除」に限定させてしまうと、世界が変わったかの様に色々と捗ります。

Yusukeさん、教えてくれて本当に感謝します!

あと個人的な悩みなんですが、表のセル内でタブ入れるのに適したショートカットキーって、何がいいでしょうかねえ。


※その2 に続きます

【InDesign】EDICOLOR機能を再現(3)【オブジェクトを均等アキに分布】

今回は、自作ではなくご紹介です。



こういうオブジェクト群があるとき、

f:id:chocomarine:20200529165125j:plain

我々が望む等間隔の整列(分布)とは

f:id:chocomarine:20200529165157j:plain

大体こうだろうと思うんですが、整列パネルの「分布」を使うと

f:id:chocomarine:20200529165236j:plain
整列(パネル)→(選択範囲に揃える)→ 分布(左)

f:id:chocomarine:20200604152205j:plain

結果はこうなります。違う、そうじゃない・・

そりゃま算数で数値を出したりひと手間加えれば出来ますが、速攻でやって欲しいわけです。



EDICOLORでは出来ます

f:id:chocomarine:20200529171358j:plain
公式ユーザーズガイド(v10)
も、もういいよね?出しちゃっても

で、これをInDesignで実現するには、スクリプトという事になります

dtptokadensyo.blog.fc2.com DTPとか電書(ゆう様)

この結果を得たい時は、整列パネルが必ずこうである必要があります

f:id:chocomarine:20200529172641j:plain
(チェック)選択範囲に揃える 間隔を指定=OFF

スクリプトを実行

属性

結果 ↓

f:id:chocomarine:20200529165157j:plain
だーーーーーーん
ただ配布のままだとctrl + Z一回で「実行前」までに戻れないので、下記にdoScript追加版を記します。


doScript(ctrl + Zで処理前まで戻れる)版(水平)

//DESCRIPTION:水平(左右)方向:均等アキ整列(CS6以降)
(function()
{
    app.doScript (Main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
    function Main()
    {
        var 
        mD = app.activeDocument,
        mS = app.selection,
        selKey = mD.selectionKeyObject;
        if (dType)
        {
            var dType = mS[0].constructor.name;
            }
        if(mS == 0 || dType =="Text"|| dType =="Paragraph"|| dType =="TextColumn"|| dType =="Character")
        { //選択オブジェクトが左記以外ならなにもしない
            } else {  //何か選択していて、
                if (selKey == null)
                { //キーオブジェクトが選択されていなければ選択範囲内で、
                    mD.distribute (
                    mS,
                    DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                    // DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                    AlignDistributeBounds.ITEM_BOUNDS,);
                    } else {  //キーオブジェクトを起点に、
                        var dis = prompt("左右何ミリ空きにしますか?","0","間隔を指定して、水平方向に等間隔に分布");
                        if(dis != null)
                        {
                            mD.distribute (
                            mS,
                            DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                            // DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                            AlignDistributeBounds.KEY_OBJECT,
                            true,
                            dis+"mm",
                            mD.selectionKeyObject ,);
                            }else{
                                }
                            }}
                    }
                })();

doScript(ctrl + Zで処理前まで戻れる)版(垂直)

//DESCRIPTION:垂直(天地)方向:均等アキ整列(CS6以降)
(function()
{
    app.doScript (Main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
        function Main()
        {
            var
            mD = app.activeDocument,
            mS = app.selection,
            selKey = mD.selectionKeyObject;

            if (dType)
            {
                var dType = mS[0].constructor.name;
                }
            if (mS == 0 || dType =="Text"|| dType =="Paragraph"|| dType =="TextColumn"|| dType =="Character"){ //選択オブジェクトが左記以外ならなにもしない
                } else {  //何か選択していて、
                    if (selKey == null)
                    { //キーオブジェクトが選択されていなければ選択範囲内で、
                        mD.distribute (
                        mS,
                        //DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                        DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                        AlignDistributeBounds.ITEM_BOUNDS,);
                        } else {  //キーオブジェクトを起点に、
                            var dis = prompt("上下何ミリ空きにしますか?","0","間隔を指定して、垂直方向に等間隔に分布");
                            if (dis != null)
                            {
                                mD.distribute (
                                mS,
                                //DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                                DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                                AlignDistributeBounds.KEY_OBJECT,
                                true,
                                dis+"mm",
                                mD.selectionKeyObject ,);
                                }else{
                                    }
                                }}
                        }
                    })();




因みに、「等間隔に分布」の使い方だけさらっと。

属性

f:id:chocomarine:20200529175337j:plain
「選択範囲に揃える」チェック時

【InDesign】条件テキストで文字校正 2/2(ブックのインジケーターを一括変更)

1/2より続き。(2020.6.17 スクリプト記述を修正)



前項で、条件テキストの使い方と実行スクリプトを説明しました。

この条件テキストとインジケーターを変更する事で、後からちまちまちまちまAcrobatでハイライトと注釈を書き込んだり(※ツラい)、そもPDF注釈機能など見てもらえない層の方々(涙)への質問事項などを、データに変更を与えず安全に可視化させる事ができるわけですが、

f:id:chocomarine:20200526012342j:plain
インジケーターの変更
f:id:chocomarine:20200526012615j:plain
「表示と印刷」にすると、PDFにも反映されます

インジケーター変更が、ドキュメントの「別名で保存」でないと更新されないことは前項に書きましたが、これがブックだった場合。

f:id:chocomarine:20200526103301j:plain
ドキュメントが数十統合されたブック

ひとつひとつ開いて全て別名保存。つらいしバカバカしい。

同期オプションの「条件テキスト設定」を実行してみましたが、

f:id:chocomarine:20200529094315j:plain

インジケーターはこの「条件テキスト設定」に含まれません。(なんでや)

ということで、えっちらスクリプトを書いてみました。



フォルダ内inddドキュメントのインジケーターを一括変更

//DESCRIPTION:条件テキストインジケーターを変更+上書き保存(らーで閣下)

(function(){
    var folderObj = Folder.selectDialog ("処理するInDesignファイルのあるフォルダを選択");
    if (! folderObj)
    { alert ("キャンセルが押されました。終了します"); exit(); }
    else
    {
        makeList (folderObj); // Dialog pathに対して、下の関数を実行
        function makeList (folderObj) // inddファイルを求める関数
        {
            // ファイルとフォルダを取得
            var fileList = folderObj.getFiles ("*.indd");
            var array = [];
            for (i=0; i<fileList.length; i++)
            // Windowsから見えるAppleDouble(._xxxx.indd)を除外
            if (fileList[i].name.match ("^[^\.]"))
            {
                array.push(fileList[i]);
                var arrayFile = app.open(array);

    /////////////////ここに処理を書く/////////////////////////
    app.activeDocument.conditionalTextPreferences.showConditionIndicators = ConditionIndicatorMode.HIDE_INDICATORS;
    /*
    HIDE_INDICATORS 1698908520 (隠す)
    SHOW_AND_PRINT_INDICATORS   1698908528 (表示と印刷)
    SHOW_INDICATORS 1698908531 (表示のみ)
    */
    /////////////////////////////////////////////////////////////

                for (j=arrayFile.length-1; j>=0; j--)
                {
                    var arrayFilePath = arrayFile[j].fullName;
                    var saveINDD = new File (arrayFilePath) ;
                    arrayFile[j].save(saveINDD);
                    arrayFile[j].close(SaveOptions.no);
                    }
                }
            }

        }
    })();

※不可視ファイル(AppleDouble)除外版に差し替えました(2020.6.17)


単純なものしか書けませんごめんなさい

これだと別名保存と同じ意味合いになり、インジケーター変更も更新されます。

適用したくないドキュメントは、別フォルダを作り一時退避させて下さい。(子フォルダ内は処理しません)


フォルダ内の一括処理、また再帰処理などのテンプレには、いつもこちらを参考にしています。

rokuyan.hatenablog.com

tu-kazu.jp nakatoji.lolipop.jp

下記のは、1年前の私には紐解くに能力不足だった・・・・

uske-s.hatenablog.com

cs5.xyz

今ならもう少し理解できそう。

 

追記:

鯵ぼんさんが、「ブックのドキュメントからパスを取得する」という指定にしたら再帰処理要らないやろ、とアドバイスを!

さあ、続きを待て!←

 

-----------翌日談------------

鯵ぼんさん、Uskeさんのお叱りを受けながら()頑張ってみました。

ブックコンテンツの条件テキスト・インジケーターを一括変更

//DESCRIPTION:Bookの条件テキストインジケーターを変更(らーで閣下)

(function(){
    if (app.books.length == 0)
    { alert ("処理するブックを開いて下さい。終了します"); exit(); }
    else
    {
        var myBook = app.activeBook;
        var myBookContents = myBook.bookContents;

        for (i=0; i<myBookContents.length; i++) 
        {
            var fileObjPath = myBookContents[i].fullName;
            app.open(File(fileObjPath));
            var myDoc = app.activeDocument;
            myDoc.conditionalTextPreferences.showConditionIndicators = ConditionIndicatorMode.HIDE_INDICATORS;
            /*
            HIDE_INDICATORS 1698908520 (隠す)
            SHOW_AND_PRINT_INDICATORS   1698908528 (表示と印刷)
            SHOW_INDICATORS 1698908531 (表示のみ)
            */
            var saveINDD = new File(fileObjPath) ;
            myDoc.save(saveINDD);
            myDoc.close(SaveOptions.no);
            }
        }

    })();

 

これなら不可視ファイルも、ブック対象外inddも拾わずに済みますね。

毎度至らない永遠の末弟子(ぇ?)ですが、いつもいつもありがとうございます!!

試行錯誤しながらのエントリーだったので、散漫になってしまいましたね。(反省)

※エラー処理を追加しました
※細かい記述ミスを修正しました(ごべんなさい)
※不可視ファイルについて文章と記述を修正しました

不可視ファイルについては、そのうち別に纏めたいと思っています。