pdfTeX

pdfTeX는 중간에 DVI 단계 없이 PDF를 직접 생성하는 TeX 엔진입니다. 이는 pdflatex가 실제로 실행되는 엔진이며 수년 동안 세계에서 가장 널리 사용되는 TeX 엔진입니다. 그 시그니처 기능은 *마이크로 타이포그래피*입니다. 여백 커닝은 줄 가장자리의 문자가 텍스트 블록보다 약간 튀어나오도록 하고, 글꼴 확장은 거의 눈에 띄지 않게 글리프 너비를 늘리거나 줄입니다. 이것이 인쇄 품질의 축에서 pdfTeX를 특별하게 만드는 이유입니다.

pdfTeX가 무엇인가요?

Knuth의 원본 TeX는 DVI(장치 독립적)라는 중간 형식만 내보냅니다. 그런 다음 별도의 프로그램이 이를 PostScript 또는 PDF로 변환합니다. pdfTeX는 해당 파이프라인에서 단계를 제거하고 TeX의 페이지 빌더에서 PDF를 직접 생성합니다. 이 글은 1990년대 후반에 베트남 출신의 Hàn Thế Thành이 체코 마사리크 대학교에서 박사 과정의 일환으로 쓴 것입니다. 최초의 공개 출시는 1996년이었습니다.

똑바로 유지해야 할 핵심은 pdfTeX가 형식이 아닌 엔진이라는 것입니다. 엔진은 작업을 수행하는 실행 파일입니다. 형식은 명령 시스템(LaTeX, Plain TeX)입니다. LaTeX 형식을 실행하는 pdfTeX 엔진은 pdfLaTeX(pdflatex 명령)를 제공합니다. Plain TeX를 실행하면 pdftex가 제공됩니다. "pdfLaTeX에 작성 중"이라고 말하면 pdfTeX가 그 밑에 있는 엔진입니다.

pdfTeX e-TeX 확장 기능을 통합합니다. e-TeX는 TeX의 매크로 기계에 대한 추가 기능 세트입니다(\protected, \unexpanded, 더 많은 레지스터, 오른쪽에서 왼쪽으로 조판 지원 등). 이는 현대 LaTeX가 당연하게 여기는 것입니다. 역사적으로 e-TeX 지원 pdfTeX는 pdfetex로 출시되었으며 TeX Live 2004부터 기본 엔진이 되었습니다. 오늘날의 pdflatex를 pdfTeX-with-e-TeX로 생각하면 안전합니다.

PDF 출력 또는 여전히 DVI

기본적으로 PDF를 직접 생성하지만 pdfTeX 여전히 DVI를 생성할 수 있습니다. 스위치는 정수 매개변수 \pdfoutput입니다. PDF에 대해 \pdfoutput=1(양수 값)를 설정하거나 \pdfoutput=0를 클래식 DVI로 대체합니다. \pdfoutput=0로 생성된 DVI는 원칙적으로 원래 TeX가 방출한 것과 동일합니다.

이 값은 첫 번째 페이지가 발송되기 전에 수정되어야 하며, 문서 중간에 PDF와 DVI 사이를 전환할 수 없습니다. LaTeX에서는 패키지 및 드라이버 감지가 매우 일찍 발생하는 경우가 많으므로 실제 안전한 장소는 \documentclass 이전에 맨 위에 있습니다. PSTricks와 같이 PostScript 특수 기능을 사용하는 일부 패키지에는 때때로 DVI→PS→PDF 경로가 필요하며, 여기에서 \pdfoutput=0가 유지됩니다.

latex
% Force DVI output even when run via pdflatex
\pdfoutput=0
\documentclass{article}
\begin{document}
This run produces a .dvi file, not a .pdf.
\end{document}

마이크로 타이포그래피

마이크로 타이포그래피 없이는 pdfTeX의 계정이 완성되지 않습니다. 이것은 Hàn Thế Thành의 박사 학위 논문 *TeX 조판 시스템에 대한 마이크로 타이포그래피 확장*의 바로 그 주제였습니다. 이 논문은 2000년 10월 마사리크 대학교 정보학부에서 Jiří Zlatuška 하에 옹호되었습니다. 이는 TeX의 줄 바꿈 알고리즘에 짜여져 텍스트의 가장자리를 매끄럽게 하는 일련의 미묘한 조정입니다. 줄 내의 간격을 차단하고 균등하게 만듭니다. 이 아이디어는 Hermann Zapf와 Peter Karow가 개발한 hz 프로그램에서 유래되었습니다.

첫 번째는 여백 커닝이라고도 하는 문자 돌출입니다. 마침표, 쉼표, 하이픈 및 구두점을 텍스트 블록의 가장자리를 약간 지나도록 함으로써 순전히 기계적인 맞춤으로 인해 너덜너덜해 보이는 여백이 광학적으로 직선으로 나타납니다. 이는 구두점 매기기의 오래된 관행을 일반화한 것입니다.

두 번째는 글꼴 확장, hz 알고리즘입니다. 눈에 띄지 않을 정도로 작은 양만큼 수평으로 늘어나거나 줄어든 문자 모양을 사용하면 단어 사이의 간격을 더욱 균일하게 만들 수 있습니다. pdfTeX는 이 여유 공간을 줄바꿈 결정 자체로 접어서 더 나은 중단점을 선택합니다. 그 결과 단어 공백(소위 "강"이라고 함)이 있는 줄이 줄어들고 단락의 전체적인 질감이 더욱 균일해졌습니다.

이는 원시 기본 요소로 구동될 수 있습니다. 돌출에서는 문자당 양을 설정하는 \lpcode(왼쪽 가장자리) 및 \rpcode(오른쪽 가장자리)와 함께 \pdfprotrudechars(0 = 꺼짐, 1 = 켜짐, 2 = 너비 계산에도 반영됨)를 사용합니다. 글꼴 확장은 각 문자의 확장 의지를 설정하는 \efcode와 함께 \pdfadjustspacing(=2는 줄바꿈에 늘이기 통합)를 사용합니다. 실제로는 직접적으로 만지는 경우가 거의 없습니다.

실제 문서에서는 이 모든 것을 포함하고 적절한 기본값을 선택하는 microtype 패키지를 로드하기만 하면 됩니다. 한 줄(\usepackage{microtype})은 좋은 설정으로 돌출 및 글꼴 확장을 켭니다.

latex
\documentclass{article}
\usepackage{microtype} % protrusion + expansion, sensible defaults
\begin{document}
With microtype loaded, pdfTeX nudges punctuation into the
margins and flexes glyph widths a hair, so justified text
looks noticeably more even.
\end{document}

PDF 기능 및 이미지 포함

PDF를 직접 빌드하기 때문에 pdfTeX는 PDF 기능에 도달하는 기본 요소를 노출합니다. 헤드라인은 원시 PDF 그리기 연산자를 주입하는 \pdfliteral입니다. PDF 객체를 직접 생성하는 \pdfobj; 주석(링크, 양식 필드 등)을 배치하는 \pdfannot. 하이퍼링크와 북마크는 hyperref 패키지에 의해 이러한 메커니즘 위에 구축됩니다.

문서 전체 설정에는 제목 및 작성자와 같은 메타데이터를 작성하는 \pdfinfo가 있습니다. \pdfcompresslevel는 출력 PDF가 압축되는 정도를 설정합니다. 모든 페이지에 속성을 첨부하는 \pdfpageattr.

latex
\pdfinfo{
  /Title (My Report)
  /Author (A. Author)
}
\pdfcompresslevel=9
% draw a thin rule with a raw PDF operator
\pdfliteral{0 0 m 100 0 l 0.4 w S}

이미지도 직접 작동합니다. pdfTeX의 장점은 중간 변환 없이 PNG, JPEG 및 PDF를 포함할 수 있다는 것입니다(반대로 EPS는 먼저 PDF로 변환되어야 함). 낮은 수준에서 \pdfximage는 이미지를 읽습니다. 그러나 일반적으로 올바른 기본 요소를 호출하는 graphicx 패키지의 \includegraphics를 사용합니다.

원시기능
\pdfliteral원시 PDF 그리기 연산자 삽입
\pdfobj / \pdfannotPDF 객체/주석을 직접 생성
\pdfinfo메타데이터 쓰기(제목, 작성자, ...)
\pdfcompresslevel출력 PDF 압축 수준(0–9)
\pdfximagePNG / JPEG / PDF 이미지 포함
\pdfpageattr각 페이지에 PDF 속성 첨부

한도 및 전환 시기

모든 성능에도 불구하고 pdfTeX는 오늘날 구식으로 느껴지는 제약 조건을 전달합니다. 가장 큰 점은 8비트 엔진이라는 점입니다. XeTeX 및 LuaTeX와 같은 방식으로 Unicode를 입력으로 사용하는 내장 기계가 없으며 일본어 UTF-8을 직접 조판하도록 설계되지 않았습니다(서양 텍스트의 경우 inputenc/fontenc로 패치됨).

글꼴 처리도 제한됩니다. 메트릭은 TFM(TeX 글꼴 메트릭) 파일에 따라 달라지며 실제 글리프는 맵 파일을 통해 Type1 또는 TrueType 글꼴에서 포함됩니다. 단순히 운영 체제에 설치된OpenType 글꼴의 이름을 지정하여 사용할 수는 없습니다. 그리고 조판 중에 프로그램을 실행하기 위한 Lua와 같은 내장된 스크립트 언어**가 없습니다.

이것이 바로 시스템 글꼴을 사용하거나 Unicode에서 많은 언어를 조판하려는 욕구가 사람들을 XeTeX 또는 LuaTeX로 밀어넣는 이유입니다. 새로 시작하는 경우(특히 일본어의 경우) 해당 엔진(일본어의 경우 upLaTeX 또는 LuaLaTeX)이 실용적인 선택입니다.

pdfTeX 자체는 이제 안정적이고 다소 동결된 유지 관리 모드에 있습니다. 버그 수정은 계속되지만 새로운 개발은 주로 LuaTeX(Lua를 pdfTeX에 포함하는 후속 버전)로 이동했습니다. 그럼에도 불구하고 대부분 영어 및 유럽 언어 문서의 경우 pdfTeX는 여전히 빠르고 신뢰할 수 있으며 가장 많은 전투 테스트를 거친 선택입니다.

원시인의 유산

pdfTeX가 도입한 많은 \pdf... 기본 요소는 이후 엔진으로 전달되어 사실상의 표준이 되었습니다. 예를 들어, 마이크로 타이포그래픽 기능은 XeTeX와 LuaTeX 모두에 채택되었습니다.

그러나 LuaTeX에서는 확장된 \pdf... 네임스페이스가 정리되었으며 그 중 대부분이 작은 게이트웨이 세트(\pdfextension, \pdfvariable\pdffeedback)로 접혔습니다. 예를 들어, \pdfliteral\pdfextension literal가 되고, \pdfoutput\outputmode가 됩니다. 귀하의 pdfTeX 시대 지식은 대부분 그대로 이어지지만, 최신 엔진에서는 철자가 변경된다는 점을 기억할 가치가 있습니다.

일상적인 글쓰기에 어울리는 곳

영어 논문, 짧은 보고서 및 기존 서양식 템플릿의 경우 pdflatex는 여전히 빠르고 신뢰할 수 있습니다. \usepackage{microtype}를 로드하고 그래픽을 PNG / JPEG / PDF로 유지하고 포함하기 전에 EPS를 PDF로 변환합니다. 일본어 또는 시스템 글꼴이 필요한 순간 ​​pdfTeX에 해결 방법을 계속 쌓지 마십시오. upLaTeX, LuaLaTeX 또는 XeLaTeX를 고려해보세요.

  • 머무는 이유: 기존 템플릿 호환성, 속도, 안정적인 서양식 조판.
  • 전환 이유: Unicode 다국어 작업, OS 글꼴, 일본어 또는 Lua 기반 처리.
  • 일반적인 오류: pdfLaTeX 아래에서 fontspec를 로드합니다. fontspec는 XeLaTeX / LuaLaTeX에 속합니다.