단 너비 포인트에 관한 문의

단 설정에서 “단 너비 동일하게” 설정 여부에 따라서 반환되는 HwpUnit이 다른거 같아서 여쭈어봅니다.

A4 용지 설정에 좌우 30씩 맞추고 테스트를 해봤는데

너비 동일 체크만 바꿨는데 유닛 값이 다르게 나와서 이유가 있는 지에 대해 여쭤봅니다.

해당 테스트 코드입니다

function SaveSecWidth() {

var secSet = HParameterSet.HSecDef;

var PageDef = secSet.PageDef;

var colSet = HParameterSet.HColDef;

getDefault("MultiColumn", colSet);

getDefault("PageSetup", secSet);

var inUseWidth = PageDef.PaperWidth - PageDef.LeftMargin - PageDef.RightMargin

if (colSet.Count == 1) { // 단이 하나일 경우            

    return inUseWidth;

} else if (colSet.SameSize == 1 && colSet.Count > 1) { // 단 동일 설정 O

    var gapCount = colSet.Count - 1;            

    Message((inUseWidth - (colSet.SameGap * gapCount)) / colSet.Count);

    return (inUseWidth - (colSet.SameGap * gapCount)) / colSet.Count;

} else { // 단 동일 설정 X

    Message (colSet.WidthGap.Item(0));

    return colSet.WidthGap.Item(0) / 0.68;

}

}

계산을 틀리게 한걸까요…

안녕하세요.

SameSize 값에 따라 단 너비가 다르게 반환되는 것은 버그가 아니라, 두 모드가 서로 다른 단위 체계를 사용하기 때문입니다.

SameSize = 1 (단 너비 동일하게)

  • SameGapHWPUNIT 절대값 (단 사이 간격)
  • 각 단의 너비는 별도 저장 없이 자동 계산됩니다:
    단 너비 = (영역 전체 폭 - SameGap × (단수 - 1)) / 단수
    
  • 올려주신 코드의 계산 방식이 맞습니다.

SameSize = 0 (단 너비 각자 지정)

  • WidthGap 배열 → HWPUNIT이 아닌 비율값입니다.
  • 영역 전체 폭을 32768로 보았을 때의 비율로 환산된 값이 저장됩니다.
  • 따라서 실제 HWPUNIT 너비로 변환하려면 다음과 같이 계산해야 합니다:
    실제 너비(HWPUNIT) = 영역 전체 폭 × WidthGap.Item(n) / 32768
    

수정된 코드 예시

function SaveSetWidth() {
    var secSet = HParameterSet.HSecDef;
    var PageDef = secSet.PageDef;
    var colSet = HParameterSet.HColDef;

    GetDefault("Ro/ColumnUser", colSet);
    GetDefault("PageSetup", secSet);

    var lineWidth = PageDef.PaperWidth - PageDef.LeftMargin - PageDef.RightMargin;

    if (colSet.Count <= 1) {
        return lineWidth;
    } else if (colSet.SameSize == 1) {
        // 단 너비 동일: SameGap은 HWPUNIT 절대값
        var gapCount = colSet.Count - 1;
        return (lineWidth - (colSet.SameGap * gapCount)) / colSet.Count;
    } else {
        // 단 너비 각자 지정: WidthGap은 32768 기준 비율값
        var ratio = colSet.WidthGap.Item(0); // 첫 번째 단의 너비 비율
        return lineWidth * ratio / 32768;
    }
}

참고로 올려주신 코드에서 / 0.68로 나누신 부분은 특정 문서의 페이지 크기/여백 조합에서 우연히 맞았을 뿐, 범용적으로는 × ratio / 32768이 정확한 변환 공식입니다.

감사합니다.

덕분에 계산하는데 도움이 되었습니다. 감사합니다