如何改变环境中单个字母的行为?

如何改变环境中单个字母的行为?

我正在使用库特尼萨语,这是一门使用符号ȼ(以及大写字母Ȼ)但不使用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和),它们分别执行将、、和到、、和的自动转换。ktenvcClLȼȻ

在此处输入图片描述

% !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/

相关内容