특히 태그된 PDF 지원 기능을 기존 패키지에 통합하고 새로운 코드에 의존하도록 전환하기 위해 다음과 같은 구체적인 메커니즘을 사용해야 합니다.
여전히 진화 중인 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라는 작은 패키지와\DocumentMetadata의check-tagging-status키가 추가되었습니다.MathML intent 속성 지원:
\MathMLintent와\MathMLarg라는 두 개의 새로운 명령어가 추가되었습니다. 이는luamml이 MathML을 생성하도록 활성화되었을 때,intent및arg속성을 지정하여 보조 기술(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지원 버그 수정 등의 변경 사항이 포함되어 있습니다.
새로운 기능과 기존 패키지들을 어떻게 통합해야할까?
💡
1. 태깅 지원 코드 로딩 및 호환성 관리
1.1. 새로운 코드의 로딩 (Loading the New Code)
\DocumentMetadata 사용: 태깅 프로젝트에 필수적인 새롭고 확장된 인터페이스를 로드하려는 문서(또는 이를 지원하려는 패키지)는 \DocumentMetadata 명령을 사용해야 합니다.
자동 로딩 확장: 이번 릴리스에서
\DocumentMetadata는tagging=off키 또는testphase=latest키를 사용할 때 얻게 되는 모든 코드를 직접 로드하도록 확장되었습니다. (이전에는testphase또는tagging키를 명시적으로 사용해야만 태깅 프로젝트에 필요한 추가 코드를 로드할 수 있었습니다).
1.2. 호환성 테스트 및 요구사항 명시
새 코드 요구 (\NeedsDocumentMetadata): 새로운 코드(태깅 지원 코드)를 위해서만 작성된 클래스나 패키지는 파일 시작 부분에 \NeedsDocumentMetadata 명령을 사용할 수 있습니다. 이 명령은 태깅 지원 코드가 로드되지 않은 경우 적절한 오류 메시지를 생성합니다.
코드 로딩 테스트 (\IfDocumentMetadataTF): 레거시 문서와
\DocumentMetadata를 사용하는 새로운 문서를 모두 지원하려는 클래스 및 패키지는 \IfDocumentMetadataTF 명령을 사용하여 새 코드가 로드되었는지 여부를 테스트할 수 있습니다. (포맷 날짜 테스트와 함께 사용할 수도 있습니다).
PDF 관리 활성화 테스트 (\IfPDFManagementActiveTF): PDF 관리가 로드되었는지 테스트하기 위해 \IfPDFManagementActiveTF 명령이 제공됩니다.
호환성 확인 (check-tagging-status): 개발자는
\DocumentMetadata에 check-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 명령어를 명령어 정의에 포함하여intent및arg속성을 지정할 수 있습니다. 이는 보조 기술(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 문서에도 적용해보시길 추천드립니다!