![Physymb 无法与 fontspec 配合使用,除非通过 fontspec 加载不同的字体](https://linux22.com/image/255593/Physymb%20%E6%97%A0%E6%B3%95%E4%B8%8E%20fontspec%20%E9%85%8D%E5%90%88%E4%BD%BF%E7%94%A8%EF%BC%8C%E9%99%A4%E9%9D%9E%E9%80%9A%E8%BF%87%20fontspec%20%E5%8A%A0%E8%BD%BD%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AD%97%E4%BD%93.png)
physymb
我在一起使用和包时遇到了麻烦fontspec
。当我使用编译时PDFLaTeX
,一切都正常,即使使用lmodern
包也是如此。但是,当我使用编译时XeLaTeX
,如果我加载了它(即使我不使用它),它也不会工作fontspec
,但如果我稍后加载包mathpazo
(我其实不想使用它,但通过调试发现),它就会工作。我的问题是,这些错误来自哪里?有解决方法吗?只加载某些字体会起作用吗?
我用来测试的文档是
\documentclass[]{article}
\usepackage{ifxetex}
\ifxetex
\usepackage[cm-default]{fontspec}
%\usepackage{mathpazo} % If you commento ut this line you get many errors.
\else
\usepackage{lmodern}
\fi
\usepackage{physymb}
\begin{document}
This is sample text.
\end{document}
答案1
问题出在accents
软件包上;我猜想accents
和之间fontspec
需要进行一些合作,因此最好联系两个软件包维护者。
fontspec
一种解决方法是使用该选项加载no-math
:这不会产生错误,但可能会产生其他后果。
另一个方法是在造成损害之前进行修补:
\documentclass[]{article}
\usepackage{ifxetex}
\usepackage{physymb}
\let\acute\relax
\let\grave\relax
\let\ddot\relax
\let\tilde\relax
\let\bar\relax
\let\breve\relax
\let\check\relax
\let\hat\relax
\let\dot\relax
\let\mathring\relax
\ifxetex
\usepackage{fontspec}
\else
\usepackage{lmodern}
\fi
\begin{document}
This is sample text.
\end{document}
在我的小实验中,使用这个定义(尽管略有修改)似乎效果很好accents
。这可能是暂时解决不兼容问题的最佳方法。
答案2
accents
你可以欺骗已经加载的包
\documentclass[]{article}
\makeatletter
\@namedef{[email protected]}{}
\makeatother
\usepackage{physymb}
\usepackage{fontspec}
\begin{document}
This is sample text.
\end{document}
你应该加载与 LaTeX 相关的字体包总是在 fontspec! 之前