以下文档可以通过 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
加载时,用于数学扩展的字体与主数学字体相同,并且在上面显示的插槽中有不同的字形。例如,"7A
是z
,这就是您在图片中看到“z”的原因。括号所组成的部分在 Unicode 中不存在,但我们可以轻松地使用标准数学扩展字体中的部分,并按照上述定义进行操作。
这可能是 Xy-pic 的功能请求。