
XeTeX에서는 현재 글꼴에서 문자 모양을 사용할 수 없는 경우 메시지가 로그 파일에 인쇄됩니다. 입력
\documentclass{scrartcl}
\begin{document}
α
\end{document}
로그에 다음 항목이 표시됩니다.
Missing character: There is no α in font cmr10!
로그 파일에 의존하지 않고 렌더링에 필요한 모든 글리프가 사용 가능한 경우 지정된 입력을 확인할 수 있는 방법이 있습니까? 분명히,로그 파일을 플러시하는 명령, 그리고 (실행 중인 XeLaTeX 프로세스에 파이프하는 시나리오에서) XeTeX가 종료되기 전에 알고 싶습니다.
답변1
긴 게시물
이 작업은 수년 전 제가 실제로 조판하기 전에 글리프에 대한 모든 종류의 정보를 알아야 하는 글꼴 미리보기 책을 조판하고 생성할 때 저에게 큰 문제였습니다. 나는 답변을 각각 컴파일 가능한 TeX 파일을 사용하여 세 개의 작은 부분으로 나누었습니다.
1부:
xelatex
및 해당 도구
에 방법이 있는데 xelatex
, 8페이지에 간접적으로 언급되어 있습니다.참조 매뉴얼. 명령 을 사용하여 \XeTeXcharglyph
출력이 0
(또는 .notdef
문양 이름을 확인하는지) 확인할 수 있습니다. 글리프가 정의되지 않으면 문자 슬롯에 0 값이 할당됩니다.
그 단계 후에 우리는 \ifnum...\else...\fi
무엇을 조판할지 결정하기 위해 문을 사용할 수 있습니다. 이 예에서는 4개의 문자를 테스트하고 있는데 ? A \ a
2개는 정의되어 있고 나머지 2개는 정의되지 않았습니다. Manfred Klein 컬렉션에서 RodgauApesInitials를 다운로드하여 설치했습니다.http://moorstation.org/typoasis/designers/klein04/deco/rodgau_apes.htm
우리는 실행 xelatex mal-kanji1.tex
하고 터미널은 다음과 같이 말합니다:
The glyph slot of 003F(hex) is: 0 (.notdef)
The glyph slot of 0041(hex) is: 3 (A)
The glyph slot of 005C(hex) is: 0 (.notdef)
The glyph slot of 0061(hex) is: 29 (a)
코드는 다음과 같습니다.
% run: xelatex mal-kanji1.tex
\documentclass[a4paper]{article}
\pagestyle{empty}
\usepackage{xltxtra}
\usepackage{fontspec}
\usepackage{pgffor}
\begin{document}
%\font\malfont=RodGauApes.ttf
\font\klein="RodGauApes Initials"
\font\cmr=cmr10%
\message{^^J}% One \n to the terminal...
% U+0041, A, dec 65
\def\checkme#1{%
\klein\message{The glyph slot of #1(hex) is: \the\XeTeXcharglyph"#1 \space
(\XeTeXglyphname\klein\XeTeXcharglyph"#1)^^J}%
%! Cannot use \XeTeXcharglyph with cmr10; not a native platform font.
\ifnum\XeTeXcharglyph"#1=0%
\cmr Undefined glyph!%
\else
\klein\char"#1%
\fi% End of \ifnum...
}% End of \checkme...
\foreach \malglyph in {003F,0041,005C,0061}% ? A \ a
{\checkme\malglyph\cmr\par%
}% End of \foreach...
\end{document}
나는 한자 예고편을 조판할 때 필요했고 이 전략을 사용했습니다. 나는 다양한 글꼴을 사용하고 있었고 얼마나 많은 문자 모양이 조판될 것인지 정확히 알아야 했습니다. 하나 이상의 문자 모양이 누락된 경우 해당 직사각형을 조판할지 여부를 결정하는 것은 나에게 달려 있습니다. 글꼴에 일부 CJKV 문자가 누락되는 것은 정상이라고 말하고 싶습니다. 그러한 문자가 너무 많습니다. 나는 책의 스냅샷을 동봉합니다. 그것은 단일 일본어 문자/한자의 미리보기입니다.
가장 큰 단점은 이 전략을 형식에만 사용할 수 xelatex
있고 최신 글꼴(TTF, OTF)만 확인할 수 있다는 것입니다. 이는 PFB에서는 작동하지 않습니다. 이는 업무에 심각한 제한이 됩니다. 다른 접근법을 보여드리겠습니다.
2 부:
testfont.tex
TeX 배포판의 도구 중 하나는 testfont.tex
파일입니다. 예를 들어 다음과 같이 실행하면:
pdftex testfont.tex
글꼴 이름을 묻는 메시지가 나타나면 사용 dmjhira
하고 Enter 키를 누르세요. 를 사용 \help
하고 Enter를 누르면 옵션 목록이 있습니다. 일반적인 옵션은 쓰기 \table\bye
다음에 Enter를 누르는 것입니다. 우리는 파일을 받고 testfont.pdf
있으며 이것은 미리보기입니다.
문제는 글꼴을 설치하고 설정하지 않으면 사용자 정의할 수 없으며 TTF 및 OTF 글꼴을 입력할 수 없다는 것입니다. 다른 접근법을 확인해 볼 가치가 있습니다.
3부: TeX 상자 측정(테스트 사례로 히라가나 및 가타카나)
TeX의 핵심은 측정 상자에 있습니다. 이것이 우리가 사용하고 테스트할 접근 방식입니다. 단일 문자 모양을 테스트하지만 거의 모든 것을 쉽게 측정할 수 있습니다. 새 상자( \newbox
)를 정의한 후 상자( \setbox
)를 가상으로 충족하고 상자( \wd
, \ht
및 \dp
)의 너비, 높이 및 깊이를 측정할 수 있습니다.
아래 예에서는 일본어 음절인 히라가나를 조판했지만 몇 가지 결함을 발견할 수 있습니다. 열린 공간이 있고, 선이 이상적으로 깨지지 않으며, 공간이 줄어들고 늘어나며, 얼마나 많은 문자가 조판되었는지 알 수 없습니다. 그러나 이는 추가 탐구를 위한 출발점입니다.
언급할 가치가 있는 점은 어떤 주요 엔진이라도 실행할 수 있다는 점입니다. latex
예를 들어fontspec
패키지를 사용하면 lualatex
또는 xelatex
. TeX 코드와 결과 미리보기를 동봉합니다.
% run: *latex mal-kanji2.tex
\documentclass[a4paper]{article}
\pagestyle{empty}% No page number please...
\parindent=0pt% No indentation please...
\rightskip=6cm% And TeXie, :-), please narrow the text width somehow...
\begin{document}
\font\hira=dmjhira at 2ex% Setting up a new font face (Hiragana)...
\newcount\malcounter% Setting up a new counter...
\malcounter=-1% The initialization of the counter
\loop% The core of this example...
\advance\malcounter by 1% Move on to the next glyph...
{\hira\char\malcounter} % Show me the glyph, add space...
%\discretionary{}{}{}% Allow a page break after the glyph... (the first alternative)
\allowbreak% (the second alternative)
\ifnum\malcounter<255\repeat% Run all 256 characters in the font...
\end{document}
글리프 너비가 0이 아닌 값인 경우에만 글리프를 조판합니다. 장식용 글꼴에는 몇 가지 예외가 있지만 나쁜 글꼴로 간주됩니다. 우리는 \newcount
여러 조판된 문자 모양을 처리하는 카운터( )를 추가하고 , 공간을 고정된 크기( \fontdimen
3, 4, 7)로 제한하고, 줄 바꿈을 허용하며, 이제 출력을 완전히 제어할 수 있다고 말했습니다.
일본식 음절인 가타카나가 포함된 PDF 파일의 예와 미리보기를 동봉합니다.
% run: *latex mal-kanji3.tex
\documentclass[a4paper]{article}
\pagestyle{empty}
\parindent=0pt
\begin{document}
\newbox\emptybox
\setbox\emptybox=\hbox{}
\newbox\malbox
\font\kata=dmjkata% A new font face to be used (Katakana)...
\newcount\counter
\counter=-1% The counter of glyphs...
\fontdimen3\font=0pt \fontdimen4\font=0pt \fontdimen7\font=0pt
% Eliminate the stretch in spaces, or, we could use \makebox...
\loop% Process all the glyphs...
\advance\counter by 1% Go to the next glyph...
\setbox\malbox=\hbox{\kata\char\counter}% Measure the glyph...
\ifnum\wd\malbox=\wd\emptybox\relax\else% Is width 0pt? Height is not tested (\ht, \dp)...
\texttt{\ifnum\counter<10 0\fi% Add zero in front of number <10...
\the\counter.\copy\malbox\ }% Show me the glyph...
\discretionary{}{}{}%Allow the line break, or, \allowbreak...
\fi% End of \ifnum condition...
\ifnum\counter<255\repeat% Show me all the glyphs in range 0-255...
\end{document}
결론
이러한 방법에는 몇 가지 제한 사항이 있습니다. 두 개의 글리프가 회전, 뒤집기 또는 크기 조정되지 않았는지 테스트할 수 없으며 0-255 영역 외부의 글리프도 나열하지 않습니다. 그런 것이 필요한 경우에는 다음을 사용하십시오.폰트포지, 자체적으로 수행할 수 있습니다.스크립팅 언어그리고 에 대한 지원파이썬 스크립트.
문자 아래 마지막 문자의 첫 번째 예에서 그 스플래시가 무엇인지 궁금하신 경우: 아, 예, 그것은 위대한 Manfred Klein의 전설적인 글꼴 제작자가 직접 만든 원숭이입니다! 스크린샷을 첨부합니다.폰트포지26+26 글자가 포함된 글꼴 미리보기입니다.
답변2
\iffontchar
Malipivo의 탁월한 답변을 확장하여 다음 예와 같이 사용할 수도 있다는 점을 언급하고 싶었습니다 . 여기서 LuaLaTeX는 XeLaTeX와 다른 결과를 제공합니다. XeLaTeX는 여기서 유니코드의 매우 높은 범위(아마도 U+F0000 이상)의 문자 모양을 좋아하지 않는 것 같습니다.
코드는 상당히 명확해야 하지만 아이디어는 다음을 호출하는 것입니다.
\fontrange {xits-math.otf} {1} {"FFFFF} { \texttt{\small #2}:\quad #3\par}
여기서 첫 번째 인수는 글꼴 사양 글꼴이고, 두 번째 인수는 시작 문자 모양 포인트이고, 두 번째 인수는 끝 문자 모양 포인트이며, 네 번째 인수는 결과가 어떻게 조판되는지 정의합니다( #2
는 문자 모양의 16진수 코드이고 #3
문자에 해당하는 문자입니다. 글리프 자체).
\documentclass[a4paper]{article}
\usepackage{fontspec,multicol}
\usepackage[margin=2cm]{geometry}
\begin{document}
\ExplSyntaxOn
\DeclareDocumentCommand \fontrange { m m m +m }
{
\group_begin:
\cs_set:Npn \__typeset:nnn ##1 ##2 ##3 {#4}
\fontspec{#1}
\int_step_inline:nnnn {#2} {1} {#3}
{
\iffontchar\font ##1\relax
\__typeset:nnn {##1} { \int_to_Hex:n {##1} } { \char ##1 \relax }
\fi
}
\group_end:
}
\ExplSyntaxOff
\begin{multicols}{5}
\fontrange{xits-math.otf}{1}{"FFFFF}
{ \texttt{\small U+#2}:\quad #3\par}
% #1 = glyph slot, decimal
% #2 = glyph slot, hex
% #3 = char
\end{multicols}
\end{document}