![带有西里尔字母的 lua 代码中的 string.lower 问题(LuaLaTeX)](https://linux22.com/image/458050/%E5%B8%A6%E6%9C%89%E8%A5%BF%E9%87%8C%E5%B0%94%E5%AD%97%E6%AF%8D%E7%9A%84%20lua%20%E4%BB%A3%E7%A0%81%E4%B8%AD%E7%9A%84%20string.lower%20%E9%97%AE%E9%A2%98%EF%BC%88LuaLaTeX%EF%BC%89.png)
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。