여전히 진화 중인 LaTeX: Tagged PDF, 폰트 및 코드 기반 개선

최근 배포된 LaTeX 릴리스에 대한 주요 업데이트를 안내드립니다. 이번 릴리스의 핵심은 문서 접근성 향상과 태그된 PDF(Tagged PDF) 생성 기능 개선에 중점을 둔 Tagged PDF 프로젝트의 진전입니다. 특히, \DocumentMetadata 명령어의 확장과 더불어, 태그 지정 호환성을 확인할 수 있는 도구가 새롭게 제공되어, 접근 가능한 문서 제작이 한층 수월해졌습니다. 또한, 수학 글꼴 메타 패밀리 지정, 키 값 확장 제어와 같은 코드 기반의 유연성 개선, 새로운 명령어 추가, 그리고 활성 문자의 처리 등과 관련된 여러 버그 수정 사항도 포함되어 있습니다. 마지막으로, 일부 오래된 도구 패키지의 사용 중단 권고와 기존 패키지의 업데이트 안내도 함께 제공되니, 관련 워크플로우에 반영하시길 권장드립니다.
dkhan's avatar
Nov 03, 2025
여전히 진화 중인 LaTeX:
Tagged PDF, 폰트 및 코드 기반 개선

가장 중요하게 개선되거나 추가된 기능들

1. 태그된 PDF (Tagged PDF) 프로젝트 및 접근성 개선

이 릴리스를 통해 LATEX에서 태그되고 접근 가능한 PDF 문서를 생성하는 데 더 많은 진전이 이루어졌습니다.

  • 프로토타입에서 프로덕션 단계로 전환: 태그 지정 지원 솔루션은 더 이상 프로토타입으로 불리지 않으며, 지원되는 패키지 내에서 사용을 제한할 경우 실제 프로덕션 워크플로우에서 사용 가능합니다.

  • \DocumentMetadata 명령어 확장: 이 명령어는 이제 tagging=off 또는 testphase=latest 키를 사용할 때 얻을 수 있는 모든 코드를 직접 로드합니다. 또한, \DocumentMetadata를 사용하면 기본 인코딩이 OT1에서 T1으로 변경되며, 기본 PDF 버전이 1.7에서 2.0으로 변경됩니다 (이는 이전 릴리스부터 적용되어 옴)

  • 태깅 호환성 확인 기능: 문서에서 사용되는 클래스와 패키지의 태깅 지원 호환성 상태를 로그 파일 끝에 표시해주는 latex-tagging-status라는 작은 패키지와 \DocumentMetadatacheck-tagging-status 키가 추가되었습니다.

  • MathML intent 속성 지원: \MathMLintent\MathMLarg라는 두 개의 새로운 명령어가 추가되었습니다. 이는 luamml이 MathML을 생성하도록 활성화되었을 때, intentarg 속성을 지정하여 보조 기술(Assistive Technology, AT)이 모호한 수학적 표기법을 올바르게 읽을 수 있도록 돕습니다.

  • 기호적 구조 이름 (Symbolic Structure Names): 구조 요소 태그의 이름을 선언, 사용 및 재할당할 수 있는 세 가지 명령어가 추가되었습니다.(\NewStructureName, \UseStructureName, \AssignStructureRole).
    예를 들어, Sect 대신 Testament, Book, 또는 Chapter와 같은 사용자 지정 이름을 사용할 수 있는 유연성을 제공합니다.

  • 단락 태깅의 소켓으로 이동: "의미론적 단락(semantic paragraphs)"의 태깅 코드(이전에는 text-unit 구조를 사용)가 소켓으로 이동되어, 사용자가 이 기능을 선택적으로 비활성화할 수 있게 되었습니다.

2. 레이아웃 및 템플릿 관련 기능

  • 조판에서의 컨텍스트 (Contexts in typesetting): 문서 요소가 사용되는 위치에 따라 레이아웃을 변경할 수 있도록 "명명된 컨텍스트(named contexts)" 개념이 도입되었습니다. LaTeX는 현재의 "주요 컨텍스트(primary context)" (예: 본문, 각주, 플로트)와 "보조 컨텍스트(secondary context)" (예: 폰트 크기)를 추적합니다.

  • 컨텍스트 기반 인스턴스 사용: \UseInstance 명령어는 이제 현재 컨텍스트에 맞춰 특별히 조정된 인스턴스(예: itemize-1:footnote)를 검색하여 사용하므로, 특정 조판 컨텍스트에서 인스턴스의 동작을 변경하는 것이 간단해졌습니다. (참고: 이 메커니즘은 현재 실험 단계에 있습니다.)

  • 블록 환경 키 이름 표준화: itemize, center, verbatim 등과 같은 표시 블록 환경에서 사용되는 키 이름이 최대한 표준화되었습니다. 이는 태그 지정 가능한 문서를 생성하는 일반 사용자에게는 투명하지만, \EditInstance 등을 사용하여 레이아웃을 사용자 지정한 사용자에게는 변경 사항이 반영되어야 합니다.

3. 폰트 및 코드 기반 개선

  • 스크립트 폰트를 위한 별도 폰트 패밀리 지원: OpenType 폰트 사용 시 발생하는 문제를 해결하기 위해, 수학 처리에서 텍스트, 스크립트, 스크립트스크립트 크기에 대해 별도의 폰트 패밀리를 선택할 수 있도록 \DeclareMathScriptfontMapping 명령어가 추가되었습니다.

  • 키 값 확장 제어: 키 처리 기능이 확장되어 선언 시점에 키 값의 선택적 확장을 허용합니다. 이는 템플릿 인스턴스를 지정할 때 유용합니다.

  • 자동 \par 토큰 삽입: LATEX가 기본적으로 \partokencontext 매개변수를 2로 설정하여, \vbox 끝과 같은 컨텍스트에서 자동으로 \par 토큰을 삽입하도록 했습니다. 이는 기존 패키지의 태깅 코드와의 호환성을 개선할 것으로 예상됩니다.

  • 대소문자 변경 시 단어 제외 지원: \DeclareLowercaseExclusions, \DeclareTitlecaseExclusions, \DeclareUppercaseExclusions 명령어를 사용하여 자동 대소문자 변경에서 제외할 단어를 등록할 수 있는 기능이 추가되었습니다.

  • 인피니트 슈링키지 오류 개선: 엔진에 새로운 기본 요소인 \ignoreprimitiveerror가 추가됨에 따라, "Infinite glue shrinkage" 오류가 시도 분할 시 경고로 바뀌어, TEX 실행의 반환 코드가 0을 유지하게 되었습니다 (실제 오류가 없는 경우). 이는 워크플로우에서 오류 없이 TEX 실행이 종료되었는지 확인할 때 잘못된 결과를 얻는 것을 방지합니다.

  • 인수 없는 명령어의 \long 속성 제거: \newcommand\renewcommand가 이제 인수가 없는 명령어를 정의할 때 불필요한 \long 접두사를 사용하지 않도록 변경되었습니다. 이는 인수가 없는 명령어의 비교(예: \ifx)를 단순화합니다.

    이 외에도 longtable 패키지의 페이지 마크 처리 업데이트 및 활성 문자(active character)에 대한 \DeclareRobustCommand 지원 버그 수정 등의 변경 사항이 포함되어 있습니다.

👉 LaTeX 업데이트 사항을 더 자세히 알아보기

새로운 기능과 기존 패키지들을 어떻게 통합해야할까?

💡

특히 태그된 PDF 지원 기능을 기존 패키지에 통합하고 새로운 코드에 의존하도록 전환하기 위해 다음과 같은 구체적인 메커니즘을 사용해야 합니다.

1. 태깅 지원 코드 로딩 및 호환성 관리

1.1. 새로운 코드의 로딩 (Loading the New Code)

  • \DocumentMetadata 사용: 태깅 프로젝트에 필수적인 새롭고 확장된 인터페이스를 로드하려는 문서(또는 이를 지원하려는 패키지)는 \DocumentMetadata 명령을 사용해야 합니다.

  • 자동 로딩 확장: 이번 릴리스에서 \DocumentMetadatatagging=off 키 또는 testphase=latest 키를 사용할 때 얻게 되는 모든 코드를 직접 로드하도록 확장되었습니다. (이전에는 testphase 또는 tagging 키를 명시적으로 사용해야만 태깅 프로젝트에 필요한 추가 코드를 로드할 수 있었습니다).

1.2. 호환성 테스트 및 요구사항 명시

  • 새 코드 요구 (\NeedsDocumentMetadata): 새로운 코드(태깅 지원 코드)를 위해서만 작성된 클래스나 패키지는 파일 시작 부분에 \NeedsDocumentMetadata 명령을 사용할 수 있습니다. 이 명령은 태깅 지원 코드가 로드되지 않은 경우 적절한 오류 메시지를 생성합니다.

  • 코드 로딩 테스트 (\IfDocumentMetadataTF): 레거시 문서와 \DocumentMetadata를 사용하는 새로운 문서를 모두 지원하려는 클래스 및 패키지는 \IfDocumentMetadataTF 명령을 사용하여 새 코드가 로드되었는지 여부를 테스트할 수 있습니다. (포맷 날짜 테스트와 함께 사용할 수도 있습니다).

  • PDF 관리 활성화 테스트 (\IfPDFManagementActiveTF): PDF 관리가 로드되었는지 테스트하기 위해 \IfPDFManagementActiveTF 명령이 제공됩니다.

  • 호환성 확인 (check-tagging-status): 개발자는 \DocumentMetadatacheck-tagging-status 키를 추가하여 문서에서 사용된 클래스 및 패키지의 태깅 호환성 상태를 로그 파일 끝에서 확인할 수 있습니다. 이는 디버깅 보조 도구로 사용됩니다.

2. 레이아웃 및 템플릿 정의 사용자 지정

2.1. 컨텍스트 기반 레이아웃 변경 (Context-Based Layout)

  • 문서 요소의 레이아웃을 사용되는 위치(컨텍스트)에 따라 변경할 수 있도록 "명명된 컨텍스트(named contexts)" 개념이 도입되었습니다.

  • 패키지 개발자는 템플릿 인스턴스를 사용하여 레이아웃을 정의할 때 이 컨텍스트를 활용할 수 있습니다. 예를 들어, itemize-1이라는 인스턴스가 있다면, itemize-1:footnote라는 별도의 인스턴스를 정의하여 각주 내에서 사용될 때 특별한 레이아웃을 지정할 수 있습니다.

  • \UseInstance 명령어를 통해 현재 컨텍스트에 맞춰 조정된 인스턴스를 자동으로 검색하여 사용하도록 할 수 있습니다. (이 메커니즘은 현재 실험 단계이며, 개발자들의 피드백을 장려하고 있습니다).

2.2. 블록 환경 키 이름 표준화 적응

  • itemize, center, verbatim 등 표시 블록 환경에 사용되는 키 이름이 표준화되었습니다.

  • \EditInstance 등을 사용하여 이러한 환경의 레이아웃을 사용자 지정한 개발자(사용자)는 키 이름 변경 사항을 그에 맞게 반영해야 합니다.

3. 접근성 및 구조적 유연성 통합

3.1. 기호적 구조 이름 사용

  • \NewStructureName, \UseStructureName, \AssignStructureRole 명령어를 사용하여 개발자는 구조 요소 태그의 이름을 선언, 사용 및 재할당할 수 있습니다.

  • 향후 몇 달 안에 태깅 코드의 다양한 태그 이름이 이러한 기호적 이름으로 대체될 예정이므로, 패키지 개발자는 이 유연한 도구를 사용하여 문서의 태그 이름을 설정할 수 있습니다. 예를 들어, Sect 대신 Testament, Book 또는 Chapter와 같은 이름을 사용할 수 있습니다.

3.2. 대체 텍스트 저장용 훅 활용

  • \includegraphics 명령에서 사용되는 alt, actualtext, artifact 세 키에는 이제 훅(Gin/alt, Gin/actualtext, Gin/artifact)이 포함됩니다.

  • 개발자는 이 훅을 사용하여 이미지의 대체 텍스트를 저장하는 것과 같은 프로그래밍 작업을 수행할 수 있습니다. 예를 들어, \AddToHookWithArguments{Gin/alt} {\gdef\myalttext{#2}}를 사용하여 대체 텍스트 값을 저장할 수 있습니다.

3.3. MathML 접근성 강화

  • luamml을 사용하여 MathML을 생성하는 패키지에서, \MathMLintent\MathMLarg 명령어를 명령어 정의에 포함하여 intentarg 속성을 지정할 수 있습니다. 이는 보조 기술(AT)이 모호한 수학적 표기법을 올바르게 해석하는 데 도움을 줍니다.

4. 프로그래밍 계층의 개선 사항 활용

4.1. \long 속성 변경에 대한 적응

  • 인수가 없는 명령어를 정의할 때 \newcommand\renewcommand가 더 이상 불필요한 \long 접두사를 사용하지 않도록 변경되었습니다.

  • 패키지 코드가 인수가 없는 매크로가 \long인지 여부를 확인하는 경우, 이제 이 매크로가 \long가 아닌 것으로 가정하고 코드를 단순화해야 합니다.

4.2. 키 값 확장 제어

  • \DeclareInstance와 같은 템플릿 및 L3 프로그래밍 계층을 사용하는 키를 생성할 때 키 값의 선택적 확장을 허용하도록 키 처리 기능이 확장되었습니다.

  • 이는 템플릿 인스턴스를 지정할 때 유용하며, 개발자는 확장을 위해 콜론(:)과 단일 문자 지정자(예: :c 또는 :v)를 사용하는 구문을 사용할 수 있습니다.

4.3. 자동 \par 토큰 삽입 활용

  • LaTeX는 \partokencontext 매개변수를 기본값 2로 설정하여 \vbox 끝과 같은 컨텍스트에서 자동으로 \par 토큰을 삽입하도록 했습니다.

  • 이는 기존 패키지가 명시적인 \par를 추가해야 했던 컨텍스트에서도 문단 후크가 문단의 끝을 감지할 수 있게 하여, 기존 패키지와 태깅 코드의 호환성을 개선하는 데 도움이 될 것으로 예상됩니다.

이제 LaTeX은 ‘읽을 수 있는 PDF’를 만든다

LaTeX은 단순히 보기 좋은 문서를 넘어, 기계가 읽을 수 있는 문서, 접근 가능한 문서, 그리고 더 유연하게 제어할 수 있는 문서로 진화하고 있습니다.

이번 2025년 11월 릴리스는 연구자, 개발자, 문서 디자이너에게 다음과 같은 메시지를 줍니다:

“LaTeX은 이제 더 이상 정적인 포맷이 아니라, 유연하고 접근 가능한 조판 플랫폼이다.”

이번 릴리즈 된 개선 및 추가사항들을 잘 숙지하여 여러분의 LaTeX 문서에도 적용해보시길 추천드립니다!

Share article

Murfy 공식 블로그