OpenType/TrueType 字体的字体表

OpenType/TrueType 字体的字体表

如何打印 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 页)。

在此处输入图片描述

相关内容