笔记:我无法具体说出两个冲突的软件包中的哪个版本修复了该问题,但自 2016 年起
mathpec
不再polyglossia
显示该问题。
基本上,我遇到了同样的错误在这里回答Andrey Vihrov 建议的解决方法使我能够重新编译该文档。现在的问题是,ngerman 包定义的任何简写(最明显的是非中断连字符"~
)现在都已被禁用,我看到了美式右引号的组合,后面跟着一个非中断空格,而本应有一个非中断连字符。
有什么方法可以保留简写定义,或者将其重新定义为其他东西(类似于\nbhy
突然想到的东西)?
我正在使用 TeXLive 提供的 XeLaTeX。
答案1
"
这似乎有效。基本上,我们正在覆盖数学模式中活动的含义。
\documentclass{article}
\usepackage{mathspec}
\setallmainfonts[Ligatures=TeX,Numbers={Lining,Proportional}]{Linux Libertine O}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands,spelling=new]{german}
\makeatletter
\begingroup\lccode`~=`"
\lowercase{\endgroup
\everymath{\let~\eu@active@quote}
\everydisplay{\let~\eu@active@quote}
}
\makeatother
\begin{document}
a"~b
\begin{equation}
f(x)=\sigma
\end{equation}
\end{document}
我不会使用这个ngerman
包,它甚至对于 LaTeX 来说也已经过时了。
babel
如果您没有最新版本的 Polyglossia,您也可以使用。
\documentclass{article}
\usepackage{mathspec}
\setallmainfonts[Ligatures=TeX,Numbers={Lining,Proportional}]{Linux Libertine O}
\usepackage[ngerman]{babel}
\makeatletter
\begingroup\lccode`~=`"
\lowercase{\endgroup
\everymath{\let~\eu@active@quote}
\everydisplay{\let~\eu@active@quote}
}
\makeatother
\begin{document}
a"~b
\begin{equation}
f(x)=\sigma
\end{equation}
\end{document}