投稿日:2021年11月27日
Illustratorで誌面を作成しています。
行頭にスペースを入力し、行頭のアキを調整していました。
同じロジックと、入稿データの規則性を鑑み、自動化できるようにしました。
Illustratorの条件として以下の処理を行います。
※実際の仕事ではなく、再現です。
▲テキストを流し込んだら、タイトルには行頭に3つ、著者名には2つ、本文には1つの全角スペースを入力します。
今回は、全角スペースの数により段落スタイルを適用するソースにしています。
作業者各位で相談し、相応しいマークダウン記法をしましょう。
最後の段落には改行を入力しないようにします。
▲今回作成した段落スタイル。
▲「1_タイトル」の詳細。
▲「2_著者名」の詳細。
▲「3_本文」の詳細。
行頭のスペースが3つだったら「1_タイトル」、
2つだったら「2_著者名」、
1つだったら「3_本文」を適用し、適用後スペースを削除するロジックにしています。
JSXのソースコードです。
var myDoc = app.activeDocument, //アクティブドキュメント
mySel = myDoc.selection; //選択しているフレーム
// ▼▼▼ 段落スタイル
var myParaStyle01 = myDoc.paragraphStyles[1], //タイトル
myParaStyle02 = myDoc.paragraphStyles[2], //著者名
myParaStyle03 = myDoc.paragraphStyles[3]; //本文
MAIN: { //ラベル
try { //エラー処理
if (mySel.length == 0 || mySel.constructor.name == "TextRange") { //テキストフレームを選択していない場合
alert("テキストフレームを選択してください。");
break MAIN; //処理を抜ける
}
} catch (e) {
break MAIN; //処理を抜ける
}
// ▼▼▼ スペース検索、段落スタイル適用、スペース削除
for (var i = 0, paraLen = mySel[0].paragraphs.length; i < paraLen; i++) {
if (mySel[0].paragraphs[i].contents.match(/^\s{3}/)) { //スペースが3つだったら
myParaStyle01.applyTo(mySel[0].paragraphs[i]); //段落スタイル「1_タイトル」を適用
mySel[0].paragraphs[i].contents = mySel[0].paragraphs[i].contents.replace(/^\s{3}/g, ''); //スペース削除
} else if (mySel[0].paragraphs[i].contents.match(/^\s{2}/)) { //スペースが2つだったら
myParaStyle02.applyTo(mySel[0].paragraphs[i]); //段落スタイル「2_著者名」を適用
mySel[0].paragraphs[i].contents = mySel[0].paragraphs[i].contents.replace(/^\s{2}/g, ''); //スペース削除
} else if (mySel[0].paragraphs[i].contents.match(/^\s{1}/)) { //スペースが1つだったら
myParaStyle03.applyTo(mySel[0].paragraphs[i]); //段落スタイル「3_本文」を適用
mySel[0].paragraphs[i].contents = mySel[0].paragraphs[i].contents.replace(/^\s{1}/g, ''); //スペース削除
}
}
}
コメントを記述しておきましたが説明します。
var myParaStyle01=myDoc.paragraphStyles[1];
▲myDoc.paragraphStyles[1]
で作成した段落スタイルの「1_タイトル」を取得しています。
paragraphStyles[0]
だと「標準段落スタイル」を取得します。
MAIN: { //ラベル
try { //エラー処理
if (mySel.length == 0 || mySel.constructor.name == "TextRange") { //テキストフレームを選択していない場合
alert("テキストフレームを選択してください。");
break MAIN; //処理を抜ける
}
} catch (e) {
break MAIN; //処理を抜ける
}
▲MAIN: {
で、以降の処理にラベルを付与します。
InDesignではexit();
で処理を抜けることができますが、Illustratorではできないので、ラベルを付与しbreak MAIN;
のような記述で処理を抜けます。
mySel.length == 0 || mySel.constructor.name == "TextRange"
▲テキストフレームが未選択、もしくはテキスト自体を選択しているとアラート表示します。
// ▼▼▼ スペース検索、段落スタイル適用、スペース削除
for (var i = 0, paraLen = mySel[0].paragraphs.length; i < paraLen; i++) {
if (mySel[0].paragraphs[i].contents.match(/^\s{3}/)) { //スペースが3つだったら
myParaStyle01.applyTo(mySel[0].paragraphs[i]); //段落スタイル「1_タイトル」を適用
mySel[0].paragraphs[i].contents = mySel[0].paragraphs[i].contents.replace(/^\s{3}/g, ''); //スペース削除
// 〜以下、略〜
▲選択しているテキストフレーム内の段落の数だけ繰り返します。
contents.match(/^\s{3}/))
は、正規表現で「行頭のスペース3つ」を表します。
myParaStyle01.applyTo(mySel[0].paragraphs[i]);
で段落スタイルを付与します。
最後にmySel[0].paragraphs[i].contents= mySel[0].paragraphs[i].contents.replace(/^\s{3}/g, '');
で3つのスペースを削除します。
注意として、スペースの数が多い行から処理をするようにしましょう。
でないと、全てのスペースを削除できません。
JSXを実行しましょう。
VS Codeで実行してもいいのですが、少々手間なのでIllustratorのアクションとして登録し、キーボードショートカットで呼び出すようにしてみましょう。
▲上記のディレクトリにJSXを置きます。
Illustratorを再起動すると ファイル > スクリプト メニューに表示されるようになります。
もちろん、これでも実行することができます。
▲アクションに登録します。
「新規セットを作成」「新規アクションを作成」でそれぞれ任意の名前を付けます。
ファンクションキーとコンビネーションキーを任意で選択します。
OSのショートカットや他のシュートカットと重複しないように注意しましょう。
設定したら記憶をクリックします。
▲パネルのサブメニューから「メニュー項目を挿入…」を選択します。
▲配置したJSXの名前「段落下げ」と入力し検索をクリックします。
ペーストすると「ペースト」というメニューが追加されるので注意しましょう。
検索にヒットしなかったら ファイル > スクリプト > 段落下げ とたどっても入力できます。
検索をクリックし、メニュー項目に表示されたらOKをクリックします。
▲設定したキーボードショートカットから実行します。
バッチリ動作します。
少ない作業量でも、自動化すると手数が減り、積もれば相当の時間が節約できるようになります。
注意として、ExtendScript Toolkitは32bitアプリなので、macOS Catalina(v10.15)以降では使用することができなくなりました。
Visual Studio Codeで動作するExtendScript Debuggerを使用するようにしてください。
以前の記事で紹介しています。
最後まで読んでくださりありがとうございました。