我无法让 \DeclareMathDelimiter 与 Unicode 字体正确配合使用。我使用 XeLaTex 和 LuaLaTex 也得到了相同的结果。自定义字体有一个数学表,其中定义了大小变体和可拉伸部分。以下是示例代码
\documentclass[10pt,fleqn]{amsart}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\newfontface \logix {Logix.otf}[Scale=1.0,NFSSFamily=logix]
\DeclareSymbolFont{Logix}{TU}{logix}{m}{n}
\DeclareMathDelimiter{\OpnGrpX}{\mathopen} {Logix}{"E301} {Logix}{"EBE0}
\DeclareMathDelimiter{\ClsGrpX}{\mathclose} {Logix}{"E341} {Logix}{"EBF0}
\begin{document}
\[ \left\OpnGrpX \frac{1}{2} \right\ClsGrpX \]
\end{document}
这是生成的输出
答案1
\DeclareMathDelimiter
使用传统的 TeX 基元\delcode
或\delimiter
。它们接受紧凑的位图,对代码点和符号系列进行编码。此格式仅接受最多 255 个代码点,其他任何代码点都会导致奇怪的行为,因为额外的数字会泄漏到位图的其他字段中。
因此,XeTeX 和 LuaTeX 都支持具有更高代码点的分隔符的单独原语:\Udelcode
和\Udelimiter
。它们仅接受单个代码点,因此您只需传递而不是E301
和。字体负责将其添加到更大变体的链接列表中。EBE0
E301
EBE0
然后你得到例如
\documentclass[10pt,fleqn]{amsart}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\newfontface \logix {Logix.otf}[Scale=1.0,NFSSFamily=logix]
\DeclareSymbolFont{Logix}{TU}{logix}{m}{n}
\makeatletter
\xdef\OpnGrpX{\Udelimiter\mathchar@type\mathopen\symLogix"E301 }
\xdef\ClsGrpX{\Udelimiter\mathchar@type\mathclose\symLogix"E341 }
\makeatother
\begin{document}
\[ \left\OpnGrpX \frac{1}{2} \right\ClsGrpX \]
\end{document}
\Udelcode
如果您不创建控制序列(如)\OpnGrpX
,但想让字符直接用作分隔符(如(
或 ),则可以使用[
。例如,如果您希望[
和]
使用新的字形当且仅当它们是在之后使用\left
,\right
或类似,你可以使用
\documentclass[10pt,fleqn]{amsart}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\newfontface \logix {Logix.otf}[Scale=1.0,NFSSFamily=logix]
\DeclareSymbolFont{Logix}{TU}{logix}{m}{n}
\Udelcode`\[\symLogix"E301
\Udelcode`\]\symLogix"E341
\begin{document}
\[ \left[ \frac{1}{2} \right] \] -- Now uses the Logix glyphs
\end{document}
您还可以例如使用在/后直接\Udelcode"E301\symLogix"E301
输入 Unicode 字符 U+E301 。\left
\right
(我想添加一个屏幕截图,但首先我需要字体......)