XeLaTeX、xy 和 dejavu-otf

XeLaTeX、xy 和 dejavu-otf

以下文档可以通过 XeLaTeX 完美呈现...

\documentclass[12pt]{standalone}

%\usepackage{dejavu-otf}

\usepackage[all]{xy}

\newcommand*{\point}[1]{*+[F.]{\makebox[2.8em]{$#1\mathstrut$}}}
\newcommand*{\dotsitem}{*+[F.]{\makebox[2em]{\ldots\mathstrut}}}

\begin{document}
\xy
\xymatrix @C=0pt @R=0pt{
  *++{\textbf{mz\mathstrut}} &
  \point{0} & \point{1} & \dotsitem & \point{n - 1} &
  \point{n} & \point{n + 1} &  \dotsitem & \point{2n - 1} &
  \dotsitem & \dotsitem & \point{l - 2} & \point{l - 1}\\
  *++{\textbf{scan\mathstrut}} &
  \point{0} & \point{1} & \dotsitem & \point{n - 1} &
  \point{n} & \point{n + 1} &  \dotsitem & \point{2n - 1} &
  \dotsitem & \dotsitem & \point{l - 2} & \point{l - 1}\\
  *++{\textbf{intens\mathstrut}} &
  \point{0} & \point{1} & \dotsitem & \point{n - 1} &
  \point{n} & \point{n + 1} &  \dotsitem & \point{2n - 1} &
  \dotsitem & \dotsitem & \point{l - 2} & \point{l - 1}}
\save "1,2"."3,5"="chunk1" \restore
\save "1,6"."3,9"="chunk2" \restore
\save "1,11"."3,13"="chunkN" \restore
\POS"chunk1"!CD!<0pt,-2\jot>*\frm{_\}} *++!U\txt<6em>{Chunk $1$}
\POS"chunk2"!CD!<0pt,-2\jot>*\frm{_\}} *++!U\txt<6em>{Chunk $2$}
\POS"chunkN"!CD!<0pt,-2\jot>*\frm{_\}} *++!U\txt<6em>{Chunk $N$}
\save "chunk1"*\frm{-} \restore
\save "chunk2"*\frm{-} \restore
\save "chunkN"*\frm{-} \restore
\endxy
\end{document}

正确的

...除非我取消注释

\usepackage{dejavu-otf}

行(我确实想要 DejaVu 字体):

错误

xy这是或的问题吗dejavu-otf?可以以某种方式解决吗?

答案1

当您加载时unicode-math,就会发生这种情况,这dejavu-otf是内部进行的。

您必须恢复一些遗留符号,即下括号和上括号的符号,否则命令将指向 Unicode 数学字体中的错误符号。

\documentclass[12pt]{standalone}

\usepackage{dejavu-otf}

\usepackage[all]{xy}

% restore the legacy brace pieces using cmex
\DeclareSymbolFont{oldlargesymbols}{OMX}{cmex}{m}{n}
% for horizontal braces
\DeclareMathSymbol{\braceld}{\mathord}{oldlargesymbols}{"7A}
\DeclareMathSymbol{\bracerd}{\mathord}{oldlargesymbols}{"7B}
\DeclareMathSymbol{\bracelu}{\mathord}{oldlargesymbols}{"7C}
\DeclareMathSymbol{\braceru}{\mathord}{oldlargesymbols}{"7D}
% for vertical braces
\DeclareMathSymbol{\braceur}{\mathord}{oldlargesymbols}{"38}
\DeclareMathSymbol{\braceul}{\mathord}{oldlargesymbols}{"39}
\DeclareMathSymbol{\bracedr}{\mathord}{oldlargesymbols}{"3A}
\DeclareMathSymbol{\bracedl}{\mathord}{oldlargesymbols}{"3B}
\DeclareMathSymbol{\bracecl}{\mathord}{oldlargesymbols}{"3C}
\DeclareMathSymbol{\bracecr}{\mathord}{oldlargesymbols}{"3D}
\DeclareMathSymbol{\bracec}{\mathord}{oldlargesymbols}{"3E}
%%% end of fix

\newcommand*{\point}[1]{*+[F.]{\makebox[2.8em]{$#1\mathstrut$}}}
\newcommand*{\dotsitem}{*+[F.]{\makebox[2em]{\ldots\mathstrut}}}    

\begin{document}

\begin{xy}
\xymatrix @C=0pt @R=0pt{
  *++{\textbf{mz\mathstrut}} &
  \point{0} & \point{1} & \dotsitem & \point{n - 1} &
  \point{n} & \point{n + 1} &  \dotsitem & \point{2n - 1} &
  \dotsitem & \dotsitem & \point{l - 2} & \point{l - 1}\\
  *++{\textbf{scan\mathstrut}} &
  \point{0} & \point{1} & \dotsitem & \point{n - 1} &
  \point{n} & \point{n + 1} &  \dotsitem & \point{2n - 1} &
  \dotsitem & \dotsitem & \point{l - 2} & \point{l - 1}\\
  *++{\textbf{intens\mathstrut}} &
  \point{0} & \point{1} & \dotsitem & \point{n - 1} &
  \point{n} & \point{n + 1} &  \dotsitem & \point{2n - 1} &
  \dotsitem & \dotsitem & \point{l - 2} & \point{l - 1}}
\save "1,2"."3,5"="chunk1" \restore
\save "1,6"."3,9"="chunk2" \restore
\save "1,11"."3,13"="chunkN" \restore
\POS"chunk1"!CD!<0pt,-2\jot>*\frm{_\}} *++!U\txt<6em>{Chunk $1$}
\POS"chunk2"!CD!<0pt,-2\jot>*\frm{_\}} *++!U\txt<6em>{Chunk $2$}
\POS"chunkN"!CD!<0pt,-2\jot>*\frm{_\}} *++!U\txt<6em>{Chunk $N$}
\save "chunk1"*\frm{-} \restore
\save "chunk2"*\frm{-} \restore
\save "chunkN"*\frm{-} \restore
\end{xy}

\end{document}

在此处输入图片描述

有什么问题?Xy-pic 需要命令\braceld和配套命令来绘制括号,它使用标准 OMX 编码字体中的字形来进行数学扩展。不幸的是,unicode-math加载时,用于数学扩展的字体与主数学字体相同,并且在上面显示的插槽中有不同的字形。例如,"7Az,这就是您在图片中看到“z”的原因。括号所组成的部分在 Unicode 中不存在,但我们可以轻松地使用标准数学扩展字体中的部分,并按照上述定义进行操作。

这可能是 Xy-pic 的功能请求。

相关内容