한국어 조판에서 금칙 설정1(인디자인 인터페이스로는 [문자]→[금칙 설정]) 기능은 많은 경우 숫자가 줄 끝에 오는 걸 방지하기 위해 쓰인다. 물론 반드시 해야하는 건 아니기에, 금칙 설정 기능 사용도도 양분되는 느낌이다. 줄 끝에 숫자가 오는 것을 엄격하게 막고자 하는 디자이너는 금칙 설정 기능을 단락 스타일 만큼이나 필수적으로 여기는 반면, 그렇지 않은 디자이너는 거의 건드릴 일이 없는 기능이다. 나는 전자에 가까워서 금칙 설정 기능을 대체로 잘 쓰는 편이다. 하지만 금칙 설정 기능의 다섯 가지 사전 설정 중 어느 것도 '줄 끝에 올 수 없는 문자'에 숫자가 들어있지 않다. 기존에 있는 선택지로 할 수 없으니 새로 만들어야 하는데, 이게 참 귀찮다. 기존 설정에 추가하는 게 가능하지 않아서 '새로 만들기'로 새 세트를 꼭 만들어야 하고 0부터 9까지 10개의 숫자를 항목에 하나씩 입력해서 '줄 끝에 올 수 없는 문자' 창에 넣어줘야 한다. 그리고 '저장' 버튼을 꼭 눌러야 마침내 '숫자 금칙'을 쓸 수 있는 것이다.
이 번잡한 과정을 한번에 할 수 있으면 좋겠다는 생각이 들었다. 그래서 만들어봤다. '숫자_금칙_설정.jsx'는 선택한 텍스트가 해당되는 단락을 숫자가 '줄 끝에 올 수 없는 문자'로 들어 있는 금칙 세트(이름은 '한국어 금칙(숫자)'로 설정했다)로 설정해준다. 금칙 세트를 따로 만들 필요도 없고, 금칙을 설정하기 위해 대화 상자를 열 필요도 없어서 꽤나 편리하다. 금칙 설정할 때 야무지게 활용하고 있다.
- [CP]스크립트 설치하기 ← 설치하는 법을 모르겠다면 참고!
코드 해설
app.doScript(start, ScriptLanguage.JAVASCRIPT , [], UndoModes.ENTIRE_SCRIPT);
function start(){
if (app.documents.length != 0){
if(app.activeDocument.stories.length != 0){
if (app.selection.length != 0){
switch (app.selection[0].constructor.name){
case "InsertionPoint":
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
main();
break;
}
}
else{
alert ("텍스트를 선택한 후 다시 시도하십시오.");
}
}
}
else{
alert ("문서가 하나 이상 열려 있어야 합니다.");
}
}
스크립트 도입부는 '탭_설정하기.jsx'에서 많은 부분을 차용했다. 실행취소를 한번에 하도록 app.doScript로 시작했고, 문서가 하나 이상 열린 상태에서 텍스트가 설정되도록 만들기 위한 조건으로 start 함수를 두었다(function start(){). 전체 문서 개수가 하나도 없지 않으면서(if (app.documents.length != 0){), 현재 활성화된 문서의 스토리가 하나 이상 있고(if(app.activeDocument.stories.length != 0){), 현재 선택된 게 하나 이상 있는(if (app.selection.length != 0){) 경우에 한하여 생성자 검사를 한다(switch (app.selection[0].constructor.name){case "InsertionPoint": case "Character": case "Word": case "TextStyleRange": case "Line": case "Paragraph": case "TextColumn": case "Text": main(); break;) '삽입점' '단어' 텍스트 스타일 범위' '줄' '단락' '텍스트 단' '텍스트'인 경우에 한해서 main 함수(function main(){)로 가고, 아닌 경우 스크립트 진행을 중단(break;)한다. 경고 알림은 두 번 있는데, 선택된 게 없거나 생성자 범위를 벗어난 경우에 하나(alert ("텍스트를 선택한 후 다시 시도하십시오.");), 문서가 하나 이상 열려 있지 않은 경우에 또 하나(alert ("문서가 하나 이상 열려 있어야 합니다.");)의 알림이 있다.
function main(){
var doc = app.activeDocument;
var NewKinsokuSet = doc.kinsokuTables.add({name:"한국어 금칙(숫자)"});
var NewKin = doc.kinsokuTables.itemByName("한국어 금칙(숫자)");
NewKin.cantEndLineChars = "([\\{‘“※₩∑∴∵〈《「『【〔$(<[{£¥₩0123456789";
var DefaultParSt = doc.paragraphStyles.item("[기본 단락]");
var CurrParSt = app.selection[0].appliedParagraphStyle;
var CurrPar = app.selection[0].paragraphs[0];
if (CurrParSt == DefaultParSt) {
DefaultParSt.kinsokuSet = NewKin;
} else { CurrParSt.kinsokuSet = NewKin;}
if (CurrPar.kinsokuSet != doc.kinsokuTables.itemByName("한국어 금칙(숫자)")) {
CurrPar.kinsokuSet = NewKin;
}
return NewKin;
}
이제 중심 기능을 다루는 함수다. 세 개의 변수를 우선 선언한다. 현재 활성화된 문서(var doc = app.activeDocument;), 추가할 새로운 금칙 세트와 그 이름(var NewKinsokuSet = doc.kinsokuTables.add({name:"한국어 금칙(숫자)"});), 그렇게 추가된 금칙 세트를 특정해주는 변수(var NewKin = doc.kinsokuTables.itemByName("한국어 금칙(숫자)");)가 그것이다. 그리고 새로 추가된 금칙 세트의 '줄 끝에 올 수 없는 문자'의 속성(cantEndLineChars)에 기존 '한국어 금칙'에 포함되어 있는 것에 숫자 10개를 더한 내용으로 채워준다(NewKin.cantEndLineChars = "([\\{‘“※₩∑∴∵〈《「『【〔$(<[{£¥₩0123456789";).
그리고 단락에 관한 몇 가지 변수를 더 선언하는데, 기본 단락을 특정하는 것(var DefaultParSt = doc.paragraphStyles.item("[기본 단락]");), 현재 선택된 것의 적용된 단락 스타일에 대한 변수(var CurrParSt = app.selection[0].appliedParagraphStyle;) 그리고 현재 선택된 것의 해당되는 단락(var CurrPar = app.selection[0].paragraphs[0];) 경우가 그것이다. 이를 바탕으로 조건문을 구성한다. 첫 번째는 현재 선택된 것에 적용되어 있는 단락 스타일이 '[기본 단락]'일 때(if (CurrParSt == DefaultParSt) {), [기본 단락]의 금칙 세트를 새로 추가된 금칙 세트로 바꾼다(DefaultParSt.kinsokuSet = NewKin;)는 것이다. 그리고 현재 선택된 것에 적용된 단락 스타일이 [기본 단락]이 아닌 다른 단락 스타일인 경우에도 새로 추가된 금칙 세트로 설정을 바꾼다(} else { CurrParSt.kinsokuSet = NewKin;}). 사실 이부분을 조건문으로 구성할 필요가 있는지는 좀 의문스럽기는 하다. 하지만 일단 작동하니 문제삼지는 않아야겠다. 또 다른 조건문은 스크립트를 수정하면서 추가했는데, 이미 '한국어 금칙(숫자)'가 추가되어 있는데, 금칙을 잠깐 '한국어 금칙'으로 바꿨을 때 스크립트를 클릭하면 다시 '한국어 금칙(숫자)'로 설정할 수 있게 하고 싶어서다. 조건문은 현재 선택된 것의 단락에 적용된 금칙 세트가 '한국어 금칙(숫자)'가 아니면(if (CurrPar.kinsokuSet != doc.kinsokuTables.itemByName("한국어 금칙(숫자)")) {), 그것을 '한국어 금칙(숫자)'로 바꾸라는 의미다.
KinsokuSet와 kinsokuTable 객체 모델을 영미권에서는 쓸 일이 없기 때문에 그것의 사용 실례를 찾기 어려워서 중심 기능을 구현하기까지 꽤 많은 우여곡절이 있었다. 원래는 함수가 없었다가 수정하면서 함수를 추가했는데, 함수 사용법에 비교적 익숙해진 것 같아서 개인적으로 의미가 있었다.
1 인디자인 인터페이스로는 [문자]→[금칙 설정], 맥 기준 단축키로는 cmd + shift + K