带有西里尔字母的 lua 代码中的 string.lower 问题(LuaLaTeX)

带有西里尔字母的 lua 代码中的 string.lower 问题(LuaLaTeX)

Lua函数string.lower不适用于西里尔字母。如何修复?

在此处输入图片描述

梅威瑟:

% !TeX program = lualatex
\documentclass[12pt]{article}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=modern]{russian}
\setotherlanguage{english}
\defaultfontfeatures{Ligatures={TeX},Renderer=Basic}
\setmainfont{Times New Roman}

\def\ptestcyr{%
\directlua{
tex.print(string.lower("Supervisory Control And Data Acquisition"),"\string\\newline")
tex.print(string.lower("Ямало-Ненецкий Автономный Округ"))
}%
}
\begin{document}
\noindent\ptestcyr
\end{document}

答案1

正如评论中提到的,您可以编写自己的 Tim Toady 函数。

基于utf8data此,您可以从下载https://github.com/artemshein/luv/blob/master/utf8data.lua并在https://github.com/Stepets/utf8.lua/issues/13

\documentclass[12pt]{article}
\usepackage{polyglossia}
\usepackage{luacode}
\setdefaultlanguage[spelling=modern]{russian}
\setotherlanguage{english}
\setmainfont{DejaVu Serif}
\begin{luacode}
require("utf8data")
function timtowtdilower(str_in)
  local lc_str = str_in:gsub(utf8.charpattern,utf8_uc_lc)
  return lc_str
end
\end{luacode}
\def\ptestcyr{%
\directlua{
tex.print(string.lower("Supervisory Control And Data Acquisition"),"\string\\newline")
tex.print(timtowtdilower("Ямало-Ненецкий Автономный Округ"))
}%
}
\begin{document}
\noindent\ptestcyr
\end{document}

在此处输入图片描述

请注意,字体不同,因为我没有安装 Times New Roman。

相关内容