Thứ Bảy, 16 tháng 5, 2026

Font NomNaTong code hexadecimal link tới từ điển


\documentclass[17pt]{extarticle}
\usepackage{fontspec}
\setmainfont{NomNaTong-Regular}
% Khai báo font NomNaTong
\newfontfamily\nomfont{NomNaTong-Regular}
\newcommand{\nom}[1]{{\nomfont\symbol{#1}}}
\usepackage{luacode}
\usepackage{longtable,array,xcolor,listings}

% Sử dụng hyperref để tạo liên kết (ẩn khung màu đỏ quanh link cho đẹp)
\usepackage[hidelinks,unicode]{hyperref}
\usepackage[left=1cm]{geometry} 

\begin{luacode*} 
function print_glyphs(maxCols, maxChars) 
  local id = font.current()
  local fnt = font.getfont(id)
  local a = {}
  
  for k, v in pairs(fnt.characters) do
    a[#a + 1] = k
  end
  table.sort(a)
  
  local col = 1
  for i, k in ipairs(a) do
    if i > maxChars then break end
    
    -- Tạo chuỗi Hex viết hoa phục vụ hiển thị và lệnh \char
    local hex_upper = string.format("%04X", k)
    -- Tạo chuỗi Hex viết thường phục vụ liên kết URL
    local hex_lower = string.format("%04x", k)
    
    -- Đường dẫn URL hoàn chỉnh
    local url = "http://www.nomfoundation.org/common/nom_details.php?codepoint=" .. hex_lower .. "&img=1&uiLang=vn"

    -- In mã Hexadecimal định danh đầu dòng
    if col == 1 then
      tex.sprint(hex_upper) 
      tex.sprint("&") 
    end

    -- Bọc toàn bộ bảng phụ trong lệnh \href để cả mã và chữ Nôm đều click được
    tex.sprint(string.format([[\href{%s}{\begin{tabular}{@{}c@{}} \tiny %s \\ {\nomfont\char"%s} \end{tabular}}]], url, hex_upper, hex_upper))

    if col == maxCols then
      tex.sprint([[\\\hline ]])
      col = 1
    else
      tex.sprint("&")
      col = col + 1
    end
  end
end
\end{luacode*}

\begin{document}

\color{black!20}

\begin{longtable}{>{\color{black!50}\ttfamily\footnotesize}r|
                  *{10}{>{\color{black}\centering\arraybackslash}p{2.2em}|}}
\cline{2-11}
\endhead

\directlua{print_glyphs(10,65463)} \\ \cline{2-11}
\end{longtable}

\end{document}

Không có nhận xét nào:

Đăng nhận xét