메타폰트

Metafont
메타폰트
METAFONT logo.svg
개발자도널드 크누스
안정된 릴리스
2.71828182 / 2021년 1월, 1년 전(2021-01)
운영 체제크로스 플랫폼
유형컴퓨터 언어
면허증.관대한

메타폰트는 래스터 글꼴을 정의하는 데 사용되는 설명 언어입니다.메타폰트 코드를 실행하여 비트맵 글꼴을 생성하는 인터프리터의 이름이기도 합니다.포스트 스크립트메타폰트는 Donald Knuth에 의해 TeX 식자 시스템의 부속품으로 고안되었습니다.

메타폰의 특징 중 하나는 스템의 꼭대기 또는 스템과 크로스바의 교차점 등 문자 모양을 정의하는 점이 기하학적 방정식으로 정의된다는 것이다. m의 세 스템이 수평으로 균등하게 간격을 두고 있다는 의도는 2 - 1 3 - 2 {sty}로 표현될 수 있다. 점 1, 2, 3이 3개의 스템의 하단에 있는 경우, 모든 스템이 같은 수직 위치에서 끝나는 의도는 y y }=2}=입니다.

메타폰트는 매크로 언어이며, 여기서 "포인트 4에서 스템 세리프의 소문자 상단을 그린다"와 같은 연산이 프로그램에 하나의 매크로 명령(포인트를 인수로 표시)으로 나타날 수 있습니다.도형을 설명하기 위해 Metafont에는 사용자가 제어점을 계산할 필요가 거의 없는 풍부한 경로 구성 작업 세트가 있습니다.

많은 메타폰트 글꼴 패밀리는 글꼴의 메인 소스 파일이 소수의 설계 파라미터(x-높이, em 폭, 경사, 수직 스트로크 폭 등)만 정의하도록 설정되며, 전체 글꼴 범위에 공통되는 개별 소스 파일을 호출하여 개별 글리프를 실제로 그리도록 합니다. 이것이 시스템의 메타 측면입니다.

동작 모드

메타폰트는 대부분의 경우 출력 디바이스(프린터, 화면) 드라이버의 도우미로서 실행됩니다.이 경우 메타폰트의 작업은 출력 디바이스(Metafont에서는 모드라고 함)와 해상도(출력 파일의 이름으로 표시됨)의 특정 조합에 대한 글꼴용 비트맵을 생성하는 것입니다.이러한 비트맵은 일반적으로 나중에 재사용하기 위해 저장되므로 문서가 표시될 때마다 메타폰트를 실행할 필요가 없습니다. 그러나 메타폰트 컴포넌트를 사용하는 TeX 배포판에는 비트맵 글꼴이 생성될 수 있는 소스에 비해 상당히 크기 때문에 일반적으로 사전 빌드된 비트맵 글꼴이 포함되어 있지 않습니다.Metafont 글꼴은 다른 글꼴 형식이 예외인 TeX 기본값이었기 때문에 Metafont 글꼴이 아닌 글꼴을 불완전하게 설치하면 Metafont가 호출되어 혼란스러운 "somefont.mf not found" 오류 메시지가 표시될 수 있습니다.

마찬가지로 중요하지만 일반적이지 않은 것은 메타폰트를 실행하여 Font Metric(TFM; 폰트메트릭) 파일을 생성하는 것입니다.TFM 파일은 폰트메이킹 변수가 양의 경우에만 생성됩니다.지금까지 TeX 디스트리뷰션에서는 (매우 작기 때문에) 모든 TFM 파일이 미리 생성되어 있는 경우가 많았지만, Metafont 글꼴을 소스에서 설치하는 사용자는 TeX를 사용하기 전에 TFM 파일을 생성해야 합니다.

메타폰트의 세 번째 조작 방법은 프루프 모드입니다.프루프 변수가 플러스일 경우 비트맵 글꼴 파일에는 다음 사이트에서 제공되는 추가 정보도 포함됩니다.special명령, 특히 폰트 디자이너가 디자인에 중요하다고 생각하는 포인트의 위치와 이름.별도 사용의 경우gftodvi글꼴 글리프의 확대 이미지를 생성하는 유틸리티, 특수에서 가져온 이 정보가 포함됩니다. 포인트 위치는 픽셀 해상도로 제한되지 않습니다.

메타폰트는 인터랙티브하게 실행할 수도 있으며 생성된 이미지를 화면에 표시하기 위한 명령어가 있습니다.Knuth는 복잡한 방정식을 풀기 위한 일종의 탁상 계산기로 MetaPost를 사용하지만, 현재는 수학 일러스트에 MetaPost를 사용하고 있다고 말했습니다.

메타폰은 글리프뿐만 아니라 모든 종류의 그래픽 출력을 렌더링할 수 있습니다.그러나 수학적 예시는 MetaPost점근선이 선호된다.메타폰트는 일반적으로 사용자로부터 직접 요청 없이 호출됩니다.DVI 파일에는 PostScript와 같은 다른 형식이 허용하는 래스터 또는 벡터 글리프 세트가 아닌 서체에 대한 참조만 포함할 수 있습니다.따라서 DVI 파일의 표시, 인쇄 또는 변환 요구가 있을 때마다 서체 내의 글리프에 액세스 할 필요가 있다.

출력 파일

Metafont는 여러 종류의 파일을 출력합니다.NAME.mf라는 파일의 경우 다음과 같이 출력할 수 있습니다.

  • NAME.NNNgf – 해상도 NNNN(기본값 2602)에서 래스터 출력이 있는 파일.
  • NAME.tfm – TeX에 필요한 정보인 TeX 글꼴 메트릭 정보가 포함된 파일.보통 메타폰트에 이 파일을 생성하도록 지시해야 합니다.
  • NAME.log – 처리 중 로그 파일 출력

Metafont 실행 후 보통 gftopk 프로그램을 사용하여 NNNngf 파일을 pk(팩) 형식으로 변환합니다.NNNpk)pk 형식은 주로 파일 크기(약 절반)를 줄이기 위해 도입되었지만 입출력해야 하는 데이터가 줄어들기 때문에 처리 속도도 빨라질 것으로 예상됩니다.GF 형식과 PK 형식 모두 비트맵의 런렝스 인코딩을 사용하지만 런렝스의 바이너리 인코딩은 다릅니다.또한 PK 포맷은 비트맵(경계 상자, 반복 행 삭제)의 전처리를 수행하여 문자의 모든 행을 1개의 [1]긴 비트시퀀스로 인코딩합니다.

TeX Directory Structure 표준에서는 파일명은 8+3자로 제한되어 있기 때문에 GF 및 PK 파일에는 확장자만 있습니다..gf그리고..pk. 다른 해상도의 파일은 별도의 디렉토리에 저장하여 구분합니다.dpiNNNN(예:dpi300/cmr10.pk.

언어

메타폰트 언어는 필수 [2]언어라기보다는 본질적으로 선언적인 프로그램의 해석 언어입니다.

변수 및 방정식

Metafont 변수에는 다음 8가지 유형이 있습니다.

  • : 2 ~ 16의엡실론 소수점 부호 숫자(Q12.16미만).이것은 다른 유형으로 선언되지 않은 변수의 기본값입니다.
  • 쌍: 주로 평면에서 점을 나타내는 데 사용되는 한 쌍의 숫자입니다.
  • 경로: PostScript/PDF/SVG에서와 같이 좌표 함수가 부분 입방 다항식인 평면의 파라메트릭 곡선입니다.다른 시스템과 마찬가지로 경로 세그먼트는 매듭 및 제어점 측면에서 베지어 곡선으로 인코딩됩니다.
  • 변환: PostScript/PDF의 "(변환) 매트릭스와 동등한 평면의 아핀 변환입니다.
  • 펜: 볼록한 다각형으로 그림에 사용되는 "펜"의 모양을 나타냅니다.
  • 그림: 각 픽셀에 대해 부호 있는 정수 값을 가진 래스터 이미지.
  • 부울
  • 문자열(8비트 문자)

메타포스트는 9번째 유형으로 컬러(숫자의 3배)를 추가하고 그림에 대해 완전히 다른(비래스터) 모델을 가지고 있습니다. 메타포스트는 두 프로그램 간의 차이점입니다.Metafont Vardef 매크로도 변수와 같은 네임스페이스에 존재하며 어떤 면에서는 매크로가 Metafont의 퍼스트 클래스 값으로 존재하지 않지만 9번째 유형의 변수로 간주될 수 있습니다.

특이하게 변수의 이름은 단순한 토큰이 아니라 기호 토큰과 숫자 인덱스의 시퀀스입니다. 변수 이름x2r따라서 1개의 영숫자 토큰이 아니라 3개의 토큰의 시퀀스입니다.x(표준),2(기호) 및r( ( ( ) 。레코드 및 배열 유형은 공통 이름 접두사를 공유하는 변수 집합을 통해 시뮬레이션할 수 있습니다. 유형 선언 시스템에서 지원되는 관용어입니다. 숫자 색인에서만 이름이 다른 모든 변수를 동일한 유형(배열 예상)으로 지정하며 변수 전체 이름은 일부 기호 토큰에서 서로 다른 상태로 유지합니다(예상대로).ed)를 참조해 주세요.

메타폰트의 매우 독특한 특징은 변수를 정의하기 위해 방정식을 사용하는 것입니다.숫자 변수(또는 쌍 또는 변환 변수의 성분)는 알려진 상태(세트), 알려지지 않은 독립 상태(세트되지 않음) 및 알려지지 않은 종속 상태(세트되지 않았지만 하나 이상의 독립적 선형 식에 의해 지정됨)일 수 있습니다.메타폰트는 방정식 문을 실행할 때 관련된 독립성 중 하나를 종속성으로 변환하고 다른 모든 종속성 식에서 제거합니다. 종속 변수의 식에 독립성이 남아 있지 않으면 해당 변수가 알려집니다.따라서 선형 방정식 시스템을 푸는 은 메타폰트 언어의 기본 기능으로, 대부분의 변수(특히 값이 기하학적 의미를 갖는 변수)를 할당하는 권장 방법은 값을 결정하는 방정식을 기술하는 것입니다.방정식 시스템은 숫자(스칼라) 방정식과 쌍(벡터) 방정식을 자주 혼합합니다.

위의 예외는 내부 수량 변수의 클래스입니다.이들은 하나의 심볼 토큰으로만 구성된 이름을 가지며 항상 숫자이며 항상 알려져 있습니다.이들은 일반 변수보다 더 직접적인 내부 표현을 가지고 있기 때문에 메타폰트(또는 메타폰트의 확장)의 원시 작업에서 암묵적으로 사용하는 것이 편리합니다.

구문

메타폰에는 메인스트림 구문을 가진 숫자 및 문자열 상수 토큰이 있습니다.문자열은 다음과 같이 구분됩니다."따옴표, 숫자 상수는 소수점을 포함할 수 있지만 지수 부분은 사용할 수 없습니다.다른 모든 토큰은 심볼릭으로 분류되며 임의로 재정의할 수 있습니다.특정 의미를 가진 토큰에는 특정 문자로 구성된 이름이 있어야 한다는 제약은 없습니다.실행 시 캡슐 토큰이 추가될 수 있습니다. 캡슐 토큰은 실질적으로 임의의 유형의 상수 값 토큰입니다. 소스 코드에서는 이러한 토큰이 심볼 토큰으로 나타납니다.

문자가 숫자 또는 문자열 상수와 관련된 경우를 제외하고 특정 문자를 포함하는 토큰의 범위는 해당 문자가 속한 클래스에 따라 달라집니다.TeX와 달리 메타폰에는 고정 문자 클래스가 있습니다.캐릭터,,;,(,그리고.)는 "외톨이"이며 단일 문자 토큰만 형성합니다.문자 클래스의 경우<=>: ,‘’(단일 따옴표),+-,/*\,!?,#&@$,^~,[,],{},그리고..토큰은 대소문자 A~Z와 함께 언더스코어 클래스와 함께 같은 클래스의 최장 연속 문자로 구성됩니다.공백 문자는 토큰을 제공하지 않습니다. %는 마지막 줄까지 코멘트를 시작합니다.

이러한 규칙의 주목할 만한 적용은 다음과 같습니다.#는 메타폰트 코드의 변수 이름의 일부로 자주 나타납니다.em#그리고.pt#.

구분자(예: 괄호)에는 내장된 의미가 없습니다.대신 두 개의 심볼 토큰을 일치하는 구분자 쌍으로 변환하는 명령어가 있지만 일반적으로 메타폰 프로그램에서는 일반 괄호만 사용합니다.표현식의 priority를 덮어쓸 뿐만 아니라 특정 종류의 매크로 인수에 대해서도 딜리미터가 필요합니다.

그래픽스

메타폰트의 곡선은 보다 복잡한 [3]산술의 비용으로 더 큰 범용성을 위해 2차보다는 3차 스플라인으로 정의된다.

일반적인 아웃라인 글꼴 형식(TrueType 또는 PostScript Type 1)과 달리 메타폰 글꼴은 주로 채워진 영역과 함께 제한된 너비의 "펜"을 가진 스트로크로 구성됩니다.따라서 메타폰트 파일은 글리프의 윤곽을 직접 기술하는 것이 아니라 펜 경로를 기술합니다.Computer Modern 계열의 서예 수학 글꼴과 같은 일부 단순한 메타폰 글꼴은 비교적 큰 펜으로 단일 펜 스트로크를 사용하여 글리프의 각 시각적 "스트로크"를 정의합니다.Computer Modern 패밀리의 로마자 텍스트 글꼴과 같은 보다 복잡한 글꼴은 작은 펜을 사용하여 시각적 "스트로크"의 윤곽을 추적합니다. 그러면 윤곽 글꼴과 비슷하지만 모서리는 펜 모양에 따라 약간 부드러워집니다.

글꼴 모양은 직접 코드화된 숫자가 아닌 방정식으로 정의되기 때문에 각 글리프 정의(그 후 단일 글꼴이 아닌 메타 글꼴을 정의함)에서 석면비, 글꼴 기울기, 스트로크 폭, 세리프 크기 등의 파라미터를 입력 파라미터로 취급할 수 있습니다.따라서 Metafont 파일의 한 위치에서 이들 파라미터 중 하나의 값을 변경하면 글꼴 전체에서 일관된 변경을 생성할 수 있습니다.Computer Moder Roman은 이 기능의 많은 용도를 나타내고 있습니다.일반적인 TeX 설치에는 글꼴의 크기가 5pt에서 17pt 사이즈의 다수의 버전이 포함되어 있으며, 스트로크 폭은 모든 크기에서 동일하며(글꼴의 크기가 커짐에 따라 증가하지 않음), 애스펙트 비는 작은 크기에서 확대되어 가독성을 높입니다.또한 Computer Modern 타자기와 sans-serif 글꼴은 기본적으로 로마 글꼴과 동일한 메타폰트 파일을 사용하여 정의되지만 글로벌 매개 변수는 다릅니다.

사용하다

Herman Zapf와 같은 유명한 활자 디자이너는 Knuth와 협력하여 메타폰트를 사용하여 새로운 글꼴을 만들었지만, 이 시스템은 전문 활자 디자이너에게 널리 채택되지 않았습니다.Knuth는 "예술가에게 60개의 파라미터로 글꼴을 쓰는 방법을 이해하는 데 충분한 수학자가 되라고 요구하는 것은 무리"[4]라고 말했습니다.Jonathan Hoefler는 메타폰트 시스템은 결국 "가장 좋아하는 글꼴을 0으로 만드는 기술이 되었습니다.글자가 골격 형태에서 시작된다는 크누스의 생각은 [5]결함이 있습니다."

메타폰트 시스템은 글꼴을 특이한 방식으로 처리할 수 있도록 합니다. 1982년 Knuth는 글꼴을 변형하는 방법을 보여주었고,[6] 세리프 글꼴은 텍스트 과정에서 서서히 산세리프 디자인으로 전환되었습니다.

역사

도널드 크누스는 1977년 폰트 제작 소프트웨어 작업을 시작했고 1979년 메타폰트의 첫 버전을 제작했다.원래 메타폰트 언어의 단점 때문에 Knuth는 1984년에 완전히 새로운 메타폰트 시스템을 개발하였고, 오늘날 사용되는 것은 이 개정된 시스템입니다. 메타폰트는 TeX와 유사한 버전 관리 시스템을 가지고 있으며,[7] 각 버전마다 숫자가 e에 근접합니다.

다음 예제에서는 글꼴의 문자 "B"에 대해 닫힌 콩 모양 모양을 만듭니다.

%file name: beta.mf %mode_filename; % 문자 B beginchar("B",11pt#,11pt#,0) 대한모양 모양 정의; % 설정 좌표를 방정식 시스템 y1=y2=y3=0; y4=y6=h; x1=x4=x4=0; x2=x5=w=w=x6;x6;x3=x6;x63 . z6 { z2 - z6 }..z5..{z4-z2}z4..사이클;엔드차;엔드차

그러면 다음과 같은 글리프가 생성됩니다.

Metafont-example-output.svg

위의 예는 다음과 [8]같은 명령줄을 사용하여 처리됩니다.

mf '\mode=betafour; mode_beta; input beta.mf', gftopk beta.600gf 베타.600파운드

그런 다음 다음과 같은[8] LaTeX 파일에서 사용할 수 있습니다(모든 파일이 동일한 디렉토리에 상주하거나 TeX 시스템에 적절한 방법을 사용하여 파일에 대한 알림을 받아야 합니다).

\documentclass{article} \newfont{\letterbeta} {beta} \new command {\otherbeta} {{\letterbeta B} \begin {document} 여기서 이상한 \otherbeta\ 를 사용해 보겠습니다.\end{filename}

결과 PDF 파일은 다음과 같습니다.

PostScript Type 1 글꼴 생성

메타폰트 프로그램을 PostScript Type 1 글꼴로 변환하기 위한 몇 가지 도구가 있습니다.대부분은 메타폰트의 언어 서브셋을 EPS 아웃라인으로 변환하는 MetaPost의 기능을 사용하고 있으며, 이후 PostScript Type 1 글꼴로 변환할 수 있습니다.메타퐁 펜 스트로크의 벡터 윤곽을 생성하는 것은 그리프의 메타퐁 모델은 래스터 이미지이고 대부분의 스트로크의 정확한 윤곽은 베지어 [note 1]곡선이 아니기 때문에 중요하지 않습니다.

  • 폴란드 JNS 팀은 PostScript Type 1 글꼴을 만들기 위한 METATYPE1(MetaPost 기반)을[9] 개발했습니다.메타폰트 언어의 힘을 크게 떨어뜨리는 펜을 사용할 수 없다는 것이 큰 단점이다.처음에는 폴란드 GOST 서체 주조 공장에서 라틴 모던이라고 불리는 컴퓨터 모던의 현대화되고 확장된 변형을 생산하기 위해 도구를 사용했습니다.
  • 메타포스트에 [10]기반을 둔 mf2pt1은 Werner Lemberg의 도움으로 Scott Pakin에 의해 개발되었다.또한 매뉴얼에 자세히 설명되어 있는 몇 가지 제한이 있으며, 가장 중요한 것은 각 문자는 완전히 닫힌 경로에서 그려져야 한다는 제한이다.mf2pt1의 한계를 극복하기 위해 Metapost의 EPS 출력을 FontForge로 후처리할 수 있습니다.FontForge는 Metapost에 의해 생성된 복잡한 PostScript 경로를 메타폰트의 타원형 펜에서 해석할 수 있으며 윤곽 중복도 제거할 수 있습니다.FontForge는 스크립팅을 지원하므로 이 후 처리 단계도 자동화할 수 있습니다.이 접근방식은 Achim Blumensath가 개발한 MnSymbol 수학 글꼴의 유형 1 개요를 작성하기 위해 사용되었으며, MnSymbol은 Minion Pro의 지원으로 설계되었습니다.
  • MetaFog[11] 펜 스트로크를 해석적으로 변환할 수 있는 독점 변환기이지만 퇴화 사례를 제거하기 위해서는 수동 사후 처리가 필요하며, 일반에 공개되지 않습니다.Metapost [12]출력만 처리할 수 있습니다.

펜 스트로크를 사용하여 타입 1 글꼴을 생성하는 일반적인 방법은 고해상도 비트맵을 생성한 후 mftrace[13]TeXtrace[14] 등의 패키지로 구현된 자동 트레이서를 사용하는 것입니다.

「 」를 참조해 주세요.

메모들

  1. ^ 엄밀히 말하면, 메타폰트는 스트로크를 래스터화하는 중간 단계로 벡터 윤곽을 생성하지만, 이러한 중간 윤곽은 현재의 래스터 분해능에 맞게 조정되고 곡선으로 단순하지 않기 때문에 유형 1 윤곽과 같이 사용할 수 없습니다.단순하지 않은 것의 효과는 1이 아닌 2의 값을 얻는 스트로크의 오목한 쪽의 스플리어스 픽셀이지만, 폰트내의 글리프로 송출되는 화상을 자동적으로 도태시키는 것으로, 통상, 최종 비트맵에 이것이 표시되지 않게 된다.

레퍼런스

  1. ^ Rokicki, Tomas (1985). "Packed (PK) Font File Format" (PDF). TUGboat. 6 (3): 115–120. Retrieved 2019-08-09.
  2. ^ Knuth, Donald (1986). The METAFONTbook. Addison Wesley. ISBN 0-201-13445-4.
  3. ^ Knuth, Donald (January 25, 2000). "Interview: Donald E. Knuth" (Interview). Interviewed by Advogato. Archived from the original on January 22, 2009. Retrieved January 13, 2016. ...the mathematics is really simple for a quadratic. The corresponding thing for a cubic is six times as complicated...
  4. ^ CSTUG, Charles University, Praha, 1996년 3월, 교수와의 질의응답.Donald E. Knuth, 17(4)(1996년), 355~67년.인용문은 361페이지부터입니다.[1]에서 온라인으로 입수 가능
  5. ^ Hoefler, Jonathan. "Knuth's idea that letters start with skeletal forms is flawed. But his work is important and had lasting impact". Twitter. Retrieved 18 August 2018.
  6. ^ Knuth, Donald (1982). "The Concept of a Meta-Font" (PDF). Visible Language. 16 (1): 3–27.
  7. ^ "Knuth: Computers and Typesetting".
  8. ^ a b Christophe Grandsir. "METAFONT Tutorial".
  9. ^ "CTAN: tex-archive/fonts/utilities/metatype1".
  10. ^ "CTAN: tex-archive/support/mf2pt1".
  11. ^ "R. J. Kinch, "MetaFog: converting Metafont shapes to contours", TUGboat 16(3), 233–43 (1995)" (PDF).
  12. ^ K. 피슈카, 2004
  13. ^ mftrace – TeX 비트맵 글꼴을 PFA 또는 PFB 글꼴(PostScript Type 1 Scalable Font) 또는 TTF(TrueType) 글꼴로 추적할 수 있는 작은 Python 프로그램입니다.GNU GPL에 따라 라이선스가 부여되어 있습니다.Han-Wen Nienhuys에 의해 작성되었습니다.1.0.5 이전 버전은 'pktrace'라고 불렸습니다.
  14. ^ TeXtrace – 모든 TeX 글꼴을 dvips, pdftex, acroread(및 기타 많은 프로그램)에 즉시 적합한 Type1.pfb 아웃라인 글꼴로 변환하는 UNIX용 스크립트 모음입니다.피터 사보에 의해 창조되었습니다.

원천

  • Donald Knuth: 메타폰트: 애디슨-웨슬리 1986년 ' 프로그램'ISBN 0-201-13438-1
  • 도널드 크누스:메타폰북, 애디슨 웨슬리 1986년.ISBN 0-201-134444-6. TeX(및 필요한 매크로)의 소스코드CTAN에서 온라인으로 입수할 수 있습니다.
  • 도널드 크누스:Metafont 소스 코드는 WEB 프로그래밍 언어로 작성되며, Metafont에서 사용되는 알고리즘에 대한 매우 광범위한 문서를 포함합니다.
  • Yannis Haralambous, "Fonts and Encodings", O'Reilly 2007, ISBN 0-596-10242-9, 부록 F: "METAFONT 및 그 파생 모델"
  • K. Péshka, TeX, XML 및 디지털 타이포그래피(Springer-Verlag, Berlin, 2004), Lect에서 "Metafont 소스에서 Type 1 글꼴 작성: 도구, 기술 및 결과의 비교"메모 계산.Sc., Vol. 3130, 페이지 240-56. 프리프린트
  • Hofstadter, Douglas R., "Metafont, Metamatematics, and Metaphysics: 도널드 크누스의 기사 '변형 폰트의 개념' 가시 언어대한 논평, 제16권 제4호, 309~338페이지 (호프스타터의 책 메타매지컬 테마: Basic Books, 1985년)

외부 링크