我正在尝试使用西里尔字母作为比例因子的符号。它是 ӄ,其 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. 似乎都不支持亚洲语言。