如何打印 OpenType/TrueType 字体的字体表?我可以使用该fonttable
包吗?
字体表应包含字体中的所有字形。如下所示(来自TeXBook):
更新:
我根据@egreg的回答为Fira Math创建了一个相当复杂的字体表。你可以在标本.tex.它具有以下特点:
- 自动计算字体/unicode块中的字形;
- 对于不存在的字形,回退到其他字体(这里我使用 GNU Unifont);
- 突出显示 Unicode 保留代码点和控制代码。
在样本的末尾,还有一个非 Unicode 字形的部分。
答案1
\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{luacode}
\usepackage{longtable,array,xcolor,listings}
\begin{luacode*}
function print_glyphs(maxCols,maxChars)
local id = font.current() -- geht Font ID
local fnt = font.getfont(id)
local col = 1
local maxU4 = 15*(16^3+16^2+16+1)
a = {}
for k, v in pairs(fnt.characters) do
a [#a + 1] = k
end
table.sort(a)
for i, k in ipairs(a) do
if i >= maxChars then break end
if col == 1 then
if k > maxU4 then
tex.sprint(string.format("U+%06x", k))
else
tex.sprint(string.format("U+%04x", k))
end
tex.sprint("&")
end
if (i) then
tex.sprint(string.format([[\char%i]], k))
else
tex.sprint("~")
end
if col == maxCols then -- Line finished?
tex.sprint([[\\\cline{2-]] .. maxCols+1 .. "} ") -- Yes
col = 1 -- newline
else
tex.sprint("&") -- no, Print &
col = col + 1 -- next column
end
end
end
\end{luacode*}
\begin{document}
Latin Modern
\color{black!20}
\begin{longtable}{>{\color{black!50}\ttfamily\footnotesize}r|
*{10}{>{\color{black}}p{1.5em}|}}
\cline{2-11}
\endhead
%\directlua{print_glyphs(10,1360)} \\ \cline{2-11}
\directlua{print_glyphs(10,65463)} \\ \cline{2-11}
\end{longtable}
\end{document}
答案2
使用 XeTeX,制作 512 个字符的块:
\documentclass{article}
\usepackage{geometry}
\usepackage{fontspec}
\usepackage{longtable}
\usepackage{array}
\setlength\extrarowheight{3pt}
\ExplSyntaxOn
\NewDocumentCommand{\OTfonttable}{m}
{
\group_begin:
#1
\int_gset:Nn \g_fonttable_rows_int
{ \int_div_truncate:nn { \XeTeXlastfontchar \font + 15 } { 16 } }
\int_gset:Nn \g_fonttable_chunks_int
{ \int_div_truncate:nn { \g_fonttable_rows_int + 31 } { 32 } }
\group_end:
\fonttable_make:n { #1 }
}
\int_new:N \g_fonttable_rows_int
\int_new:N \g_fonttable_chunks_int
\seq_new:N \l_fonttable_rows_seq
\tl_new:N \l_fonttable_font_tl
\cs_new_protected:Nn \fonttable_make:n
{
\tl_set:Nn \l_fonttable_font_tl { #1 }
\int_step_inline:nnnn { 0 } { 1 } { \g_fonttable_chunks_int - 1 }
{
\seq_clear:N \l_fonttable_rows_seq
\int_step_inline:nnnn { 0 } { 1 } { 31 }
{
\seq_put_right:Nx \l_fonttable_rows_seq
{
\fonttable_setup: \int_to_Hex:n { ##1*32 + ####1 }x &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 0 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 1 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 2 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 3 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 4 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 5 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 6 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 7 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 8 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 9 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 10 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 11 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 12 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 13 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 14 } } &
\fonttable_char:n { \int_eval:n { ##1*512 + ####1*16 + 15 } }
}
}
\begin{tabular}{|r|*{16}{c|}}
\cline{2-17}
\multicolumn{1}{c|}{} &
\ttfamily 0 &
\ttfamily 1 &
\ttfamily 2 &
\ttfamily 3 &
\ttfamily 4 &
\ttfamily 5 &
\ttfamily 6 &
\ttfamily 7 &
\ttfamily 8 &
\ttfamily 9 &
\ttfamily A &
\ttfamily B &
\ttfamily C &
\ttfamily D &
\ttfamily E &
\ttfamily F \\
\hline
\seq_use:Nn \l_fonttable_rows_seq { \\ \hline } \\
\hline
\end{tabular}\clearpage
}
}
\cs_new_protected:Nn \fonttable_setup: { \ttfamily $\vphantom{\big|}$ }
\cs_new_protected:Nn \fonttable_char:n
{
\tl_use:N \l_fonttable_font_tl
\iffontchar\font #1 \symbol{#1} \fi
}
\ExplSyntaxOff
\newfontface{\test}{Old Standard}
\begin{document}
\OTfonttable{\normalfont}
\end{document}
参数\OTfonttable
可以是任何字体选择器,在本例中是\normalfont
,但它可以是\test
旧标准字体。这将为 生成 126 页\normalfont
,即拉丁现代罗马字体(旧标准为 235 页)。