我正在尝试获取 IAST 中梵文的 danda 符号。我的代码是
\documentclass[letterpaper,12pt]{article}
\usepackage{fontspec}
\newfontfamily{\san}[Script=Devanagari,Mapping=velthuis-sanskrit]{Shobhika}
\newfontfamily{\rom}[Mapping=itrans-iast]{Noto Serif}
\newcommand{\sd}{{\san|}}
\begin{document}
{\san
namaste|
}\\
{\rom
namaste{\sd}
}\\
{\rom
namaste|
}
\end{document}
当我使用\sd
在序言中声明的 which 时,我可以在 \rom 环境中获取 danda。有没有办法直接在环境中获取 danda,\rom
而无需使用\sd
序言中的某些声明。
答案1
您可以将字符声明为活动字符(以便它像宏一样处理)并通过添加以下两行|
赋予它与您的相同的定义:\sd
\catcode`|=\active
\let|=\sd
修改您的示例:
\documentclass[letterpaper,12pt]{article}
\usepackage{fontspec}
\newfontfamily{\san}[Script=Devanagari,Mapping=velthuis-sanskrit]{Shobhika}
\newfontfamily{\rom}[Mapping=itrans-iast]{Noto Serif}
\newcommand{\sd}{{\san|}}
\begin{document}
{\san
namaste|
}
{\rom
namaste{\sd}
}
{\rom
namaste| (before)
}
\catcode`|=\active
\let|=\sd
{\rom
namaste| (after)
}
\end{document}
输出:
实际上,您可能希望将这些行放在文件的顶部;只需确保它位于\sd
已定义之后(以及|
位于文件中用于除作为 Devanagari danda 之外的任何其他目的的任何字符之后)。