我正在尝试在 XeLaTeX 中实现叙利亚语缩写标记(参见此处:http://en.wikipedia.org/wiki/Syriac_Abbreviation_Mark)。
我想到的代码如下:
\catcode`^^^^070f=13
\chardef\zwj="200D
\def^^^^070f#1 {\zwj\aemph{#1}\ }
现在我可以在文本中使用控制字符(假设我有叙利亚语字体):
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage{syriac}
\setmainfont{Estrangelo Edessa}
\catcode`^^^^070f=13
\chardef\zwj="200D
\def^^^^070f#1 {\zwj\aemph{#1}\ }
\begin{document}
ܫܠܡܳܐ ܫܠܡܐ.
\end{document}
结果如下:
这并不完美,原因有二。首先,它需要一个空格来结束控制序列(事实上,它应该以任何非叙利亚字符结束)。其次,理想情况下,结果应该是一条带有 3 个点的上划线(开头、结尾和中间 - 例如,参见上面的维基百科文章)。
有人能帮我解决这个问题吗?
答案1
它现在已经在字体中实现(根据 Werner 的问题)。
随机unicode输入,用xelatex编译。
梅威瑟:
\documentclass[12pt]{article}
\usepackage{xcolor}
\pagecolor{red!3}
\usepackage{polyglossia}
%Options:
%‣ numerals = western (i.e., 1234567890), eastern (for which the Oriental Arabic
%numerals are used: ١٢٣٤٥٦٧٨٩٠), or abjad. .
%v1.0.1
%Commands:
%\abjadsyriac ‣ \abjadsyriac (see section 9)
%\aemph ‣ \aemph (see section 6.1).
\setdefaultlanguage[numerals=abjad]{syriac}
\setotherlanguage{english}
\newfontfamily\fgfontc[Scale=2.3,Script=Syriac,Colour=green]{Noto Sans Syriac Eastern}
\newfontfamily\fgfontck[Scale=2.3,Script=Syriac,Colour=blue]{Noto Sans Syriac Eastern}\newfontfamily\fgfontd[Scale=4.5,Script=Syriac,Colour=red]{Noto Sans Syriac Eastern}
\newfontfamily\fgfontdk[Scale=4.5,Script=Syriac,Colour=blue]{Noto Sans Syriac Eastern}
\setmainfont{Noto Sans Syriac Eastern}
\newfontfamily\englishfont{Noto Serif}
\begin{document}
\pagestyle{empty}
\begin{center}
\begin{english}
Syriac font,
with \textbackslash kern and \textbackslash llap commands.
\end{english}
\fgfontc ܞܞܭܬܩܨܧܦܗܡܠܡܐ\kern-1.25pt\llap{\fgfontck ܞܞܭܬܩܨܧܦܗܡܠܡܐ}
ܘܗܖܛܚܙܩܨܧܤ
\fgfontd ܞܞܭܬܩܨܧܦܗܡܠܡܐ\kern-1.45pt\llap{\fgfontdk ܞܞܭܬܩܨܧܦܗܡܠܡܐ}
\end{center}
\begin{english}
Syriac font, regular and bold:
\end{english}
ܞܞܭܬܩܨܧ ܦܗܡܠܡܐ
\bfseries
ܞܞܭܬܩܨܧ ܦܗܡܠܡܐ
\mdseries\Large
ܞܞܭܬܩܨܧܦܗܡܠܡܐ
\bfseries
ܞܭܬܩܨܧܦܗܡܠܡܐ
ܘܗܖܛܚܙܩܨܧܤ
\end{document}
答案2
这是一个 TikZ 方法:
\documentclass{article}
\usepackage{tikz}
\usepackage{xspace}
\tikzstyle{zwj}=[inner sep=0pt,outer sep=0pt,anchor=base]
\tikzstyle{zwjdot}=[circle,draw,fill,inner sep=0pt,outer sep=0pt,minimum width=1pt]
\newcommand{\zwj}[1]{%
\tikz[baseline]{
\node[zwj] (text) {#1};
\useasboundingbox (text.base west) rectangle (text.north east);
\draw ([yshift=2ex]text.base west) -- ([yshift=2ex]text.base east)
node[pos=0,zwjdot] {}
node[pos=1,zwjdot] {}
node[pos=0.5,zwjdot] {};
}%
}
\begin{document}
\begin{tabular}{ll}
foobar & puckluck \\
\zwj{foo}bar & \zwj{puck}luck
\end{tabular}
\end{document}
此时,下降线正在改变垂直对齐方式。我稍后会再尝试。
答案3
OpenType 已经引入了用于生成这种特殊上划线的“stch”功能,如果您使用某些 TeX 引擎(如最新版本的 XeTeX),您就可以获得适当的效果。