我正在使用库特尼萨语,这是一门使用符号ȼ
和ⱡ
(以及大写字母Ȼ
和Ⱡ
)但不使用c
或的第一民族语言l
。
我如何创建一个可以将所有c
和更改l
为ȼ
和的环境ⱡ
?
我知道我可以为单个字母创建命令,但我通常会在英语和库特尼语之间切换,因此定义一个环境让我的生活更轻松是有意义的。
我想要这个代码:
This text has big C's and little c's and also a capital L. {\kt Na xaⱡȼin} means \textit{this dog.}
要创建这样的输出:
这篇文章有大写 C 和小写 C,还有大写 L。Na xaⱡȼin 的意思是这只狗。
Unicode 代码点:ȼ U+023C
Ȼ U+023B
ⱡ U+2C61
Ⱡ U+2C60
答案1
如果您可以使用 LuaLaTeX 而不是 pdfLaTeX 或 XeLaTeX,则可以设置 Lua 函数以及 TeX 宏和环境(在下面的示例代码中命名为\kt
和),它们分别执行将、、和到、、和的自动转换。ktenv
c
C
l
L
ȼ
Ȼ
ⱡ
Ⱡ
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function kt ( s )
s = unicode.utf8.gsub ( s , "c", "ȼ" )
s = unicode.utf8.gsub ( s , "C", "Ȼ" )
s = unicode.utf8.gsub ( s , "l", "ⱡ" )
s = unicode.utf8.gsub ( s , "L", "Ⱡ" )
return ( s )
end
\end{luacode}
\newcommand\kt[1]{\directlua{tex.sprint(kt(\luastring{#1}))}}
\newenvironment{ktenv}{%
\directlua{luatexbase.add_to_callback( "process_input_buffer", kt, "kt")}}{%
\directlua{luatexbase.remove_from_callback( "process_input_buffer", "kt")}}
\usepackage{fontspec}
\setmainfont{Arial} % features ȼ, Ȼ, ⱡ, and Ⱡ
\begin{document}
Na xalcin, c C l L
\kt{Na xalcin, c C l L}
\begin{ktenv}
Na xalcin, c C l L
\end{ktenv}
Na xalcin, c C l L
\end{document}
答案2
ktunaxa.map
对于 XeLaTeX,准备一个包含以下内容的文件
; TECkit mapping for TeX input conventions <-> Unicode characters
LHSName "ktunaxa"
RHSName "UNICODE"
pass(Unicode)
; ligatures from Knuth's original CMR fonts
U+002D U+002D <> U+2013 ; -- -> en dash
U+002D U+002D U+002D <> U+2014 ; --- -> em dash
U+0027 <> U+2019 ; ' -> right single quote
U+0027 U+0027 <> U+201D ; '' -> right double quote
U+0022 > U+201D ; " -> right double quote
U+0060 <> U+2018 ; ` -> left single quote
U+0060 U+0060 <> U+201C ; `` -> left double quote
U+0021 U+0060 <> U+00A1 ; !` -> inverted exclam
U+003F U+0060 <> U+00BF ; ?` -> inverted question
; additions supported in T1 encoding
U+002C U+002C <> U+201E ; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C <> U+00AB ; << -> LEFT POINTING GUILLEMET
U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
; additions for Ktunaxa
U+0043 <> U+023B ; C -> LATIN CAPITAL LETTER C WITH STROKE
U+0063 <> U+023C ; c -> LATIN SMALL LETTER C WITH STROKE
U+004C <> U+2C60 ; L -> LATIN CAPITAL LETTER L WITH DOUBLE BAR
U+006C <> U+2C61 ; l -> LATIN SMALL LETTER L WITH DOUBLE BAR
并运行teckit_compile ktunaxa.map
,这将ktunaxa.tec
在当前目录中写入一个文件。
在同一目录中,准备测试文件
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\newfontfamily{\ktunaxafont}[Mapping=ktunaxa]{Linux Libertine O}
\DeclareTextFontCommand{\textkt}{\ktunaxafont}
\begin{document}
This text has big C's and little c's and also
a capital L. \textkt{Na xaⱡȼin} means \textit{this dog.}
This text has big C's and little c's and also
a capital L. \textkt{Na xalcin} means \textit{this dog.}
\textkt{CcLl}
\end{document}
运行 XeLaTeX;如果字体具有所需的字形,则输出将是
字体不需要相同;在\newfontfamily
声明中,您可以使用任何具有该语言字形的字体。
您可以将新.tec
文件(以及.map
源文件)放在目录中
$TEXMFHOME/fonts/misc/xetex/fontmapping/ktunaxa/
(创建树),其中$TEXMFHOME
代表个人树;对于 TeX Live 是~/texmf
,对于 MacTeX 是~/Library/texmf
。对于 MiKTeX 也有类似的方法。
您也可以使用$TEXMFLOCAL
,但这也需要mktexlsr
。
构建结构和移动文件的自动化方法是假设有一个 Bash shell
mkdir -p $(kpsewhich -var-value=TEXMFHOME)/fonts/misc/xetex/fontmapping/ktunaxa
mv ktunaxa.{map,tec} $(kpsewhich -var-value=TEXMFHOME)/fonts/misc/xetex/fontmapping/ktunaxa/