投稿日:2021年11月27日

 

Illustratorで誌面を作成しています。
行頭にスペースを入力し、行頭のアキを調整していました。
同じロジックと、入稿データの規則性を鑑み、自動化できるようにしました。
 

Illustratorの条件として以下の処理を行います。
※実際の仕事ではなく、再現です。
Illustrator JSX
▲テキストを流し込んだら、タイトルには行頭に3つ、著者名には2つ、本文には1つの全角スペースを入力します。
今回は、全角スペースの数により段落スタイルを適用するソースにしています。
作業者各位で相談し、相応しいマークダウン記法をしましょう。
最後の段落には改行を入力しないようにします。
 

Illustrator JSX
▲今回作成した段落スタイル。
 

Illustrator JSX
「1_タイトル」の詳細。
 

Illustrator JSX
「2_著者名」の詳細。
 

Illustrator JSX
「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のアクションとして登録し、キーボードショートカットで呼び出すようにしてみましょう。
 

Illustrator JSX
▲上記のディレクトリにJSXを置きます。
Illustratorを再起動すると ファイル > スクリプト メニューに表示されるようになります。
もちろん、これでも実行することができます。
 

Illustrator JSX
▲アクションに登録します。
「新規セットを作成」「新規アクションを作成」でそれぞれ任意の名前を付けます。
ファンクションキーとコンビネーションキーを任意で選択します。
OSのショートカットや他のシュートカットと重複しないように注意しましょう。
設定したら記憶をクリックします。
 

Illustrator JSX
▲パネルのサブメニューから「メニュー項目を挿入...」を選択します。
 

Illustrator JSX
▲配置したJSXの名前「段落下げ」と入力し検索をクリックします。
ペーストすると「ペースト」というメニューが追加されるので注意しましょう。
検索にヒットしなかったら ファイル > スクリプト > 段落下げ とたどっても入力できます。
検索をクリックし、メニュー項目に表示されたらOKをクリックします。
 

Illustrator JSX
▲設定したキーボードショートカットから実行します。
バッチリ動作します。
 

まとめ

少ない作業量でも、自動化すると手数が減り、積もれば相当の時間が節約できるようになります。
注意として、ExtendScript Toolkit32bitアプリなので、macOS Catalina(v10.15)以降では使用することができなくなりました。
Visual Studio Codeで動作するExtendScript Debuggerを使用するようにしてください。
以前の記事で紹介しています。 
 

最後まで読んでくださりありがとうございました。
 

関連記事



 

Pocket