본문 바로가기

인디자인 InDesign/스크립트 작성 scripting

기준선 격자 설정, 간단하게 하기

동북아시아 문화권의 인디자인, 이른바 'CJK' 환경의 인디자인에서 문서를 만들면서 판면을 짤 때는 그 방식이 두 가지다. 하나는 [여백 및 단]이고, 다른 하나는 [레이아웃 격자]다. [여백 및 단]은 상하안팎의 여백을 직접 입력하는 방식으로, 보다 간편하지만 엄정하게 계산된 판면(예를 들어 판면의 마지막 줄은 행간 값이 제외된 오롯이 폰트 크기만큼 줄인 경우)을 원한다면 산수를 해야해서 오히려 복잡해진다. [레이아웃 격자]는 다소 적어야 할 게 많지만 엄정하게 계산된 판면을 지향할 때 쓰기 좋다. 폰트와 행간 값을 기반으로 하여 (한줄 당)문자 수와 줄 수로 판면과 여백을 결정하기 때문에 나름대로 근거 있는 판면짜기를 할 수 있다. 네모꼴로 모아쓰기를 하는 한글과 한자 조판에 좀더 특화된 판면 제작 체계라는 생각도 든다.

 

레이아웃 격자 대화상자

 

어떤 과정을 밟든, 판면을 만들면 격자와 관련된 설정을 하지 않을 수 없다. 일단 기준선 격자가 보여야 하고1, 환경설정 [격자] 탭에서 '기준선 격자'에 관한 설정들을 바꿔줘야 한다. 나는 시작 값을 0으로 하고 기준을 '위쪽 여백', 간격을 행송(폰트 크기 + 행간) 값으로 지정하곤 한다. 그러고 나서 이제 단락의 '격자 정렬'을 '전각 위쪽'으로 해줘야 격자 관련 설정을 마무리 지을 수 있다. 정말이지 마스터 페이지에 페이지 번호를 얹는 일이나 기본적인 단락 스타일을 만드는 일만큼이나 반복적인 루틴이다.

그래서 이번에도 한번 만들어봤다. '기준선격자_조정.jsx'는 기준선 격자를 알아서 세팅해주는 스크립트다. 행송 값을 계산하는 게 중요한데, 잘 해결이 안 돼서 임의로 행송 값(예를 들어 21pt)을 정해서 한동안 사용하기도 했다. 금칙이 그렇듯, CJK에서만 쓰이는 기능들에 대해선 유용한 설명을 찾기가 어렵다. 레이아웃 격자도 마찬가지다. 그렇게 해매다가 API 인디자인 객체 모델을 훑으면서 계산을 시킬 수 있을 것 같은 데이터를 찾았다. LayoutGridDataInformation이 그것이다. 이것의 속성 중 폰트 크기(pointSize)와 행간 값(lineAki)을 더해서 행송 값을 구할 수 있었다. 작동하는 스크립트를 보고, 임의 행송 값을 더는 쓸 필요가 없어져서 꽤나 기뻤다. 

 

기준선 격자 조정 스크립트 예시 영상

 

기준선격자_조정.jsx
0.00MB

 


코드 해설

더보기
#targetengine 'Session'
app.doScript(start, ScriptLanguage.JAVASCRIPT , [], UndoModes.ENTIRE_SCRIPT);
function start(){
    if (app.documents.length != 0){
        if(app.activeDocument.stories.length != 0){
            main() 
            return;
        } else { 
            alert("텍스트 프레임이 하나 이상 있어야 합니다.");
        } 
    } else {
        alert ("문서가 하나 이상 열려 있어야 합니다.");
    } 
}

 

#targetengine을 굳이 쓸 필요는 없다. 아직 그에 대해 아는 게 많지 않은데도, 허영심에 session을 써보고 싶었다. session이 공통 변수를 선언할 수 있게 해준다는 점 외에 main과 크게 다른 점은 없어서, 첫행은 굳이 적지 않아도 실행에 지장이 없다. doScript로 시작하는 코드가 익숙해졌다. 실행취소가 한번에 되는 게 장점이 많다(app.doScript(start, ScriptLanguage.JAVASCRIPT , [], UndoModes.ENTIRE_SCRIPT);). 그렇게 시작하는 함수는 역시나 검사다. 문서가 하나라도 켜져 있는지(if (app.documents.length != 0){), 스토리가 하나라도 있는지(if(app.activeDocument.stories.length != 0){), 검사함으로써 스크립트 중심 기능이 실행될 수 있는 조건을 따지는 것이다. 스크립트를 만들수록 오류에 바로 노출시키지 않고, 경고 알림으로 우회하도록 하여 빈틈을 메우는 게 중요하단 것을 느낀다.

 

unction main(){
    app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS
    var doc = app.activeDocument;
    var currleading = doc.layoutGridData.pointSize + doc.layoutGridData.lineAki;
    
    with(doc.gridPreferences){
        baselineStart = 0; 
        baselineGridShown = true; 
        baselineDivision = currleading; 
        baselineGridRelativeOption = BaselineGridRelativeOption.TOP_OF_MARGIN_OF_BASELINE_GRID_RELATIVE_OPTION;
        baselineViewThreshold = 25; 
       }
    with(doc.cjkGridPreferences){
        showAllFrameGrids = false;
        showAllLayoutGrids = false;
    }
    doc.stories.everyItem().gridAlignment = GridAlignment.ALIGN_EM_TOP;
}


검사가 끝났으면 이제 중심 기능이다. 행송 값은 포인트(pt)이므로, 우선 스크립트 측정 규격을 포인트로 바꾼다(app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS). 식을 단출하게 하기 위해 현재 활성화된 문서에 대해 변수를 선언한다(var doc = app.activeDocument;). 그리고 현재의 행송 값을 계산하는 행이다. 현재 활성화된 문서의 레이아웃 그리드 데이터에서 폰트 크기와 행간 값을 더한 결과다(var currleading = doc.layoutGridData.pointSize + doc.layoutGridData.lineAki;). 둘 다 자료형이 숫자인 게 중요하다. 

반복적인 선택자에 대해서 여러 속성을 적용시킬 수 있는 with문으로 이어진다(with(doc.gridPreferences){). GridPreference는 환경설정의 [격자] 탭에 해당된다. 기준선 격자 시작은 0(baselineStart = 0;)으로 하고, 격자가 보이도록 설장하며(baselineGridShown = true;), 간격은 앞서 정한 행송 값으로 한다(baselineDivision = currleading;). 그리고 기준은 '위쪽 여백'으로 하며(baselineGridRelativeOption = BaselineGridRelativeOption.TOP_OF_MARGIN_OF_BASELINE_GRID_RELATIVE_OPTION;), 보기 한계값을 25(%)로 설정한다(baselineViewThreshold = 25;).

이제 [보기] 메뉴에 있는 레이아웃 격자와 관련한 몇가지 옵션을 해제 해줄 것이다(with(doc.cjkGridPreferences){). 우선 '프레임 격자 표시'를 해제하고(showAllFrameGrids = false;)2, '레이아웃 격자 숨기기'를 해준다(showAllLayoutGrids = false;)3. 마지막으로 격자 정렬을 '전각 위쪽'으로 맞춰주면(doc.stories.everyItem().gridAlignment = GridAlignment.ALIGN_EM_TOP;) 스크립트가 마무리된다.

사실 이렇게 하고 프레임 유형을 '프레임 격자'에서 '텍스트 프레임'으로 바꿔주기까지 해야 완전히 마무리되는 것인데, 그에 해당되는 객체 모델을 도저히 찾을 수가 없었다. 아예 없는 건지, 내가 못 찾은 건지 알 수 없지만, 아쉬워도 이정도에서 정리를 해야할 것 같다. 


1 단축키로 cmd + opt + '

2 단축키로 cmd + shift + E

3 단축키로 cmd + opt + A