![이것은 pfb 파일의 버그입니까, 아니면 메타포스트의 "글리프"에 있는 버그입니까?](https://rvso.com/image/281597/%EC%9D%B4%EA%B2%83%EC%9D%80%20pfb%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%B2%84%EA%B7%B8%EC%9E%85%EB%8B%88%EA%B9%8C%2C%20%EC%95%84%EB%8B%88%EB%A9%B4%20%EB%A9%94%ED%83%80%ED%8F%AC%EC%8A%A4%ED%8A%B8%EC%9D%98%20%22%EA%B8%80%EB%A6%AC%ED%94%84%22%EC%97%90%20%EC%9E%88%EB%8A%94%20%EB%B2%84%EA%B7%B8%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20.png)
최근에야 시작했어요놀이메타포스트의 "글리프"를 사용합니다. 나는 이 실험에서 설정된 cm 글꼴에 대한 세리프 경로에서 변칙적인 현상(아래 MWE)을 발견했습니다.
시작점: Metapost는 글꼴(예: .../texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
)에 대한 .pfb 파일에서 문자 모양을 가져오는 것 같습니다.
내 질문은 다음 중 어떤 것이 변칙을 일으키는지입니다. 그러면 버그 보고서가 정당한지 여부와 이를 누구에게 보낼지 알 수 있습니다.
- .pfb 파일에 버그가 있습니다. 그런 길이기 때문에거의자체적으로 두 배로 늘어나 픽셀이 채워지지 않을 수 있으므로 아무도 눈치채지 못합니다.
- 메타포스트가 글리프를 가져오는 위치에 대해 틀렸으며 버그는 어디에든 있습니다.
- 메타포스트의 글리프 코드에 버그가 있습니다.
- 다른 것.
내가 한 일들:
- 이러한 글꼴을 사용하는 다른 프로그램이 동일한 .pfb 파일(
pdflatex
및 에 대해 AFAICT 예latex|dvips|pstopdf
)을 사용하는지 확인하고 PDF 출력에서 문자가 크게 확대된 것을 확인했습니다. 운이 좋지 않습니다. - .pfb에서 글리프를 추출하는 다른 도구를 찾았지만 찾을 수 없습니다. (이것에 대한 팁이 좋을 것 같습니다)
cmr.mf
(실제로는 ) 획을 확인했습니다cmbase.mf
. Knuth의 세리프는 문자의 나머지 부분과 별도의 획이므로 거기에 대한 단서가 없습니다.- Knuth의 소스에서 이러한 type1 글꼴(MFTOEPS 등)을 생성하는 데 사용되었을 수 있는 다양한 도구를 찾았지만 이는 내 전문 지식을 넘어서는 것으로 결정했습니다.
- texexchange와 더 먼 곳을 살펴 보았습니다.
- 버전 정보(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
.