이것은 pfb 파일의 버그입니까, 아니면 메타포스트의 "글리프"에 있는 버그입니까?

이것은 pfb 파일의 버그입니까, 아니면 메타포스트의 "글리프"에 있는 버그입니까?

최근에야 시작했어요놀이메타포스트의 "글리프"를 사용합니다. 나는 이 실험에서 설정된 cm 글꼴에 대한 세리프 경로에서 변칙적인 현상(아래 MWE)을 발견했습니다.

시작점: Metapost는 글꼴(예: .../texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb)에 대한 .pfb 파일에서 문자 모양을 가져오는 것 같습니다.

내 질문은 다음 중 어떤 것이 변칙을 일으키는지입니다. 그러면 버그 보고서가 정당한지 여부와 이를 누구에게 보낼지 알 수 있습니다.

  1. .pfb 파일에 버그가 있습니다. 그런 길이기 때문에거의자체적으로 두 배로 늘어나 픽셀이 채워지지 않을 수 있으므로 아무도 눈치채지 못합니다.
  2. 메타포스트가 글리프를 가져오는 위치에 대해 틀렸으며 버그는 어디에든 있습니다.
  3. 메타포스트의 글리프 코드에 버그가 있습니다.
  4. 다른 것.

내가 한 일들:

  1. 이러한 글꼴을 사용하는 다른 프로그램이 동일한 .pfb 파일( pdflatex및 에 대해 AFAICT 예 latex|dvips|pstopdf)을 사용하는지 확인하고 PDF 출력에서 ​​문자가 크게 확대된 것을 확인했습니다. 운이 좋지 않습니다.
  2. .pfb에서 글리프를 추출하는 다른 도구를 찾았지만 찾을 수 없습니다. (이것에 대한 팁이 좋을 것 같습니다)
  3. cmr.mf(실제로는 ) 획을 확인했습니다 cmbase.mf. Knuth의 세리프는 문자의 나머지 부분과 별도의 획이므로 거기에 대한 단서가 없습니다.
  4. Knuth의 소스에서 이러한 type1 글꼴(MFTOEPS 등)을 생성하는 데 사용되었을 수 있는 다양한 도구를 찾았지만 이는 내 전문 지식을 넘어서는 것으로 결정했습니다.
  5. texexchange와 더 먼 곳을 살펴 보았습니다.
  6. 버전 정보(MetaPost=v1.504, cmr10.pfb=v003.002)를 확인하고 최신 메타포스트에 대한 변경 로그를 확인했습니다.

내 MWE는 글리프 오버슈트의 경계를 표시한 다음 세리프에서 다시 두 배로 표시되고 cmr10. 세리프의 기하학적 구조로 인해 cmti10여전히 오버슛이 있지만 추가 영역은 없습니다. 또한 cm 글꼴 세트의 일부 다른 글꼴(굵게, 비스듬한 글꼴)과 대문자와 소문자의 세리프에도 표시됩니다.

picture pic[];
path p[];
pair d;

pic0=btex  I\it I etex; % <---- the text to be analysed
_i:=1;
for $ within pic0:
    p[_i]=pathpart glyph (textpart $) of (fontpart $) scaled 1/100 shifted llcorner $ scaled 20;
    _i:=_i+1;
endfor

beginfig(1)
for i = 1 upto 20:
    if known p[i]:
        fill p[i] withcolor (.8,.8,.9);
        for j = 0 upto (length(p[i])-1):
            draw point j of p[i]--postcontrol j of p[i] dashed withdots scaled 1/4;
            draw point j+1 of p[i]--precontrol j+1 of p[i] dashed withdots scaled 1/4;
            fill fullcircle scaled 0.5mm shifted point j of (p[i]);
            d:=direction j of p[i];
            if abs(d)=0: d:=point j+4 of p[i] - point j-4 of p[i]; fi
            a:= if abs(d)=0: 0 else: angle(d) fi;
            draw thelabel.lft(decimal j infont "cmbx5",(0,0))
                rotated (a+90)
                shifted (point j of (p[i] )) withcolor blue;
        endfor
        draw p[i] withpen pencircle scaled 0.1;
    fi
endfor
endfig;

bye

여기에 이미지 설명을 입력하세요

답변1

pathpart이 문제는 에서 반환한 사진의 을(를) 사용하는 것과 관련된 것으로 보입니다 glyph. 다음 프로그램을 고려해보세요:

prologues := 3;
outputtemplate := "glyph%c.eps";
beginfig(1);
  picture a;
  a = glyph "I" of "cmti12";
  draw a withcolor .9 white;
  draw pathpart a withcolor red;
endfig;
end.

아래 그림이 생성됩니다. 접시 모양의 세리프에 뾰족한 부분이 선명하게 보이지만(빨간색) 회색 부분에는 뾰족한 부분이 없습니다.

연산자 glyph는 주어진 글꼴로 주어진 문자의 그림을 반환합니다. 해당 사진 만 있으면 draw윤곽선이 올바르게 보입니다(이미지의 회색 부분). 하지만 그때까지 되돌아온 경로를 그리면 pathpart접시에 여분의 들쭉날쭉한 부분이 생깁니다.

이는 글꼴 파일에 이상이 없음을 의미하며, 오히려 pathpart에서 반환한 그림에 적용했을 때 문제가 있음을 의미합니다 glyph. MP 개발팀에 문제를 제기했습니다 -> http://tracker.luatex.org/view.php?id=935

업데이트: 2015년 5월 15일 현재 이 버그는 수정되었습니다.

여기에 이미지 설명을 입력하세요

새로 컴파일된 버전 1.999를 사용한 출력은 다음과 같습니다 mpost.

여기에 이미지 설명을 입력하세요

관련 정보