如何在数学公式中使用西里尔文字/符号/字符?

如何在数学公式中使用西里尔文字/符号/字符?

我正在尝试使用西里尔字母作为比例因子的符号。它是 ӄ,其 Unicode 编号为 04C4(请参阅unicode 页面)所以我在英文网站上搜索了相关信息,大约 3 小时后,我成功地将这个字形添加到我的文本中,

\usepackage[T2B, T1]{fontenc}   <- so it selects T1 as standard, but has T2B available
\usepackage{lmodern}            <- don't know if this is needed, but i guessed it might me useful for having a font with cyrillic support.

within the document:
`{\fontencoding{T2B}\selectfont \CYRKHK}`

这将以普通文本形式打印字形。在数学模式下,可以使用一种巧妙的解决方法来获取它:将上述内容括在\text{}(参见这里。这个解决方案在某种程度上是可行的,但它真的很糟糕。例如,它不适用于许多其他好看的西里尔字母,如 ҟ U+049F(->“未定义的控制序列。”错误)。我甚至不想去想,如果还包括日语字形,那将是多么痛苦。

所以真正的问题是:是否有一种简单而强大的方法来包含我可以在unicode中找到的任何类型的字形?假设片假名是 ャ U+30E3,旁边是西里尔字母,旁边是孟加拉语 ন U+09A8。在 stackexchange 中输入这个字符没有任何问题,这显然会引发第二个问题:Firefox 在排版 unicode 符号方面真的比 latex 更好吗?哦

我尝试过的方法,但不知为何没有效果:

  • 由于某种原因(超出了我的 latex 范围),使用\DeclareUnicodeCharacter{<number>}{\<command to place the thing>}with \usepackage[utf8]{inputenc}->\DeclareUnicodeCharacter未定义。还有另一种方法,使用 \newunicodecharacter 或类似的东西(记不清了)。那根本不起作用。

  • 使用 XeTeX -> 没有变化,除了其他东西坏了。我回到了 pdflatex。所以不起作用。

  • 使用包 mathtext -> 什么都没发生

  • 使用包 cyrillic -> 加载失败,即使它是与 TeXlive 一起安装的。

我当前的配置:

\RequirePackage{fix-cm}
\documentclass[12pt,index=totoc,bibliography=totoc,ngerman, BCOR=12mm]{scrreprt}

%header
\usepackage[T2B, T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage[reqno]{amsmath}
\usepackage{amssymb}

\usepackage[svgnames,table,hyperref]{xcolor}
\definecolor{dblue}{rgb}{0 0.447 0.741}
\usepackage{lipsum}
\usepackage{graphicx}

\usepackage{listing}
\usepackage{matlab-prettifier}
\usepackage{rotating}
\usepackage{flafter}
\usepackage{subfig}
\usepackage{makeidx}
\usepackage[german,noprefix]{nomencl}
\usepackage[format=hang,labelformat=simple,font={small,sf},labelfont={small,sf},textfont={small,sf}]{caption}
\usepackage{booktabs}
\usepackage{setspace}
\usepackage{subfloat}
\usepackage[colorlinks,linkcolor=dblue,pagebackref]{hyperref}

答案1

如果你不缺少数学符号字体​​,你可以定义一个新的:

\documentclass{article}
\usepackage[X2,T1]{fontenc}

\DeclareSymbolFont{cyrillic}{X2}{cmr}{m}{n}
\SetSymbolFont{cyrillic}{bold}{X2}{cmr}{bx}{n}

\DeclareMathSymbol{\khk}{\mathord}{cyrillic}{139}

\begin{document}

$a+\khk(b)_{\khk(b)}$

\end{document}

X2 编码的优点在于它涵盖了全部(好吧,几乎所有)各种西里尔编码的字形。

在此处输入图片描述

如果缺少符号字体,一种效率较低的解决方案是使用\text

\documentclass{article}
\usepackage[X2,T1]{fontenc}
\usepackage{amsmath}

\DeclareRobustCommand{\khk}{%
  \mathord{\text{\usefont{X2}{cmr}{m}{n}\symbol{139}}}%
}

\begin{document}

$a+\khk(b)_{\khk(b)}$

\end{document}

如果不是\mathord,则可以将数学原子的类型更改为其他类型(\mathrel如果它应该是关系符号,则为)。

您也可以直接在公式中使用字母,使用 UTF-8。这是第二种解决方案,第一种解决方案的工作原理相同。

\documentclass{article}
\usepackage[X2,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

\DeclareUnicodeCharacter{04C3}{\khk}

\DeclareRobustCommand{\khk}{%
  \mathord{\text{\usefont{X2}{cmr}{m}{n}\symbol{139}}}%
}

\begin{document}

$a+Ӄ(b)_{Ӄ(b)}$

\end{document}

抱歉,这边没有日语或孟加拉语。想想你的读者,他们很难理解这些符号。

答案2

让它与 XeLaTeX 和支持 unicode 的字体-- 虽然我更喜欢libertinus(并且它确实有漂亮的数学模式西里尔字母和一些中东文字),但它没有很好的亚洲覆盖范围,因此我使用了后备方案统一字体。要使字形在数学模式下显示,您需要做的就是将其包装在\hbox(或者显然是 \mathrm ——有人知道为什么吗?)中。为了使其与下标正确匹配,我们提供定义\mathchoice

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Unifont} % \usepackage{libertinus} has no Asian

\newcommand{\MM}[1]{\mathchoice{\hbox{#1}}{\hbox{#1}}{\hbox{\scriptsize{#1}}}{\hbox{\tiny{#1}}}}

\begin{document}

blah $\hbox{x}$ blah $a\MM{ャ}T = 2নy+3\hbox{ж}^5-x_{\MM{ж}}$ blah ャনж

\begin{equation}
  d_0 \mathbf{i}\mathrm{নT} = \forall 2x \MM{ャ}
\end{equation}

\end{document}

我也简要地尝试了该软件包unicode-math,但是 1. 它只适用于 OT 数学字体,其中 2. 似乎都不支持亚洲语言。文本和数学模式下 GNU Unifont 孟加拉语、假名和西里尔语的输出

相关内容