公開日:2018年12月8日
この記事はDTP Advent Calendar●日目の…ではなくて、それとは別のエントリです。
「原稿にはルビや個別のボールドがたくさん」→「じゃあWordからInDesignにテキストを配置しよう」→「Wordではスタイルを一切使っていなかった」→「しょうがないInDesignに配置した後フォントをキーに検索置換しよう」→「結果必要以上に文字スタイルがあたっている段落が数箇所出てくる」という状態をちょっとでも楽にしたいため、何とかして文字スタイル[なし]をキーボードショートカットで…をスクリプトで作成しました。
まず、スクリプトから文字スタイル[なし]を設定するには、テキストを選択した状態で、
var doc=app.activeDocument;
var sel=doc.selection[0];
var nashi=doc.characterStyles[0];
sel.appliedCharacterStyle=nashi;
//※オブジェクト選択時、挿入点選択時などのエラー処理はしていません
上記のスクリプトを実行します。このエントリでは選択文字列の文字スタイルを[なし]にしたいので、スクリプト3行目のようにcharacterStyles[0];
を指定します。
手動操作で[文字スタイル]パネルから文字スタイル[なし]を設定した場合は、文字スタイルが適用される前の状態に戻ります。
一方、スクリプトで指定した場合、該当箇所の文字スタイルは[なし]になるものの、設定していた書式は残ってしまいます。
つまり、スクリプトで文字スタイル[なし]を設定した場合は、パネルメニューから[スタイルとのリンクを切断する]を選択したときと同じ動作になっています。
通常、文字スタイル[なし]にはキーボードショートカットを設定できないので、スクリプトにショートカットを設定して代用したい、と考えましたが、どうやらスクリプトを使ってもストレートな手段では無理そうです。
じゃあしょうがない別途文字スタイルを作ってそれにショートカットを設定し…としたいところですがどうしても諦めきれないので、どうにかできないものか…ということで、スクリプトでの文字スタイル[なし]は「スタイルとのリンクを切断」であることを利用して、その後に該当スタイル部分のオーバーライドを解除するという処理のスクリプトにしました。
//選択段落の文字スタイルを解除
/*用途:wordからテキスト配置したとき、キャプションなどの文字スタイルを解除するため
・段落スタイルをもとにしているので、オーバーライドが解除されるのが難点
・オブジェクトをうまいこと使えば、オーバーライド属性は一部残したまま解除できるかもと思ったけど
中途半端に残しておくと事故の元なので全解除
・正規表現スタイル、先頭文字スタイルで適用されている文字スタイルは解除されません*/
var sel=app.activeDocument.selection[0];
var pars=sel.paragraphs;
for(var p=pars.length-1; p>-1; p--){
var def=pars[p].appliedParagraphStyle.properties;
for(var i=pars[p].textStyleRanges.length-1; i>-1; i--){
pars[p].textStyleRanges[i].appliedCharacterStyle=app.activeDocument.characterStyles[0];
pars[p].textStyleRanges[i].clearOverrides();
}
}
こちらのスクリプトは、選択している段落の文字スタイルをすべて[なし]にします。ついでにオーバーライドも解除するので、段落スタイルをプレーンな状態にするのに使います。
地味にセールスポイントなのが、「段落にカーソルを立てただけの状態で文字スタイルを解除できる」という点です。
「2.」のスクリプトでは、広範囲かつオーバーライドを解除するので、「ここだけ文字スタイルを解除したい」という用途には向いていません。
こちらのスクリプトは、appliedParagraphStyle.properties
でテキスト選択箇所の段落スタイルの書式を取得しておいて、文字スタイルとのリンクを切断した後にそれを適用する、という処理にしています。
オーバーライドの解除はしないので、「文字ツメ」などの属性は維持されます。
//文字スタイル[なし]を適用
var doc=app.activeDocument;
var sel=app.activeDocument.selection[0];
var pars=sel.paragraphs[0];
var def=pars.appliedParagraphStyle.properties;
sel.appliedCharacterStyle=app.activeDocument.characterStyles[0];
sel.properties=def;