看起来 siunitx 包和 gb4e 包有冲突。
更具体地说,以下代码将无法运行:
\documentclass[11pt]{article}
\usepackage{gb4e}
\def\fg{}
\usepackage{siunitx}
\begin{document}
yo
\SI{30}{\degreeCelsius}
\end{document}
返回错误
命令 \rmfamily 在数学模式下无效
现在,我知道了包裹语言和希尼奇存在冲突,我知道如何解决:加载语言首先,将 \fg(冲突的命令)重新定义为空,然后加载希尼奇, IE
\usepackage{linguex}
\def\fg{}
\usepackage{siunitx}
但是这个并不能解决这里的问题。
\SI{}{}
但是,如果我们根本不使用该命令,顶部的代码将起作用。即如果我们删除该行
\SI{30}{\degreeCelsius}
那么顶部的代码就可以工作了。
(笔记:即使我们只使用
\SI{30}{degreeCelsius}
代码仍然无法工作。)
- 还有哪些命令可能会发生冲突?
- 或者说两者发生冲突有其他原因吗?
答案1
问题原因
^
和_
的重新定义gb4e
与这个问题无关,因为(正如@cfr 指出的)它没有被解决\noautomath
。问题是包中的一些代码检查是否存在非常旧的 LaTeX 内核。
几年前对当前 LaTeX 内核的更改导致此代码执行了与预期相反的操作。我以为这个错误已经修复,但显然还没有。我会再次通知 的维护者 Alexis Dimitriadis gb4e
。
解决方法
前你加载gb4e
包后,添加以下代码:
\makeatletter
\def\new@fontshape{}
\makeatother
gb4e
在 之后加载也是个好主意siunitx
。如果不这样做,则需要\noautomath
在加载后立即添加gb4e
。
这是一个完整的例子:
\documentclass[11pt]{article}
\makeatletter
\def\new@fontshape{}
\makeatother
\usepackage{siunitx}
\usepackage{gb4e}
\begin{document}
\SI{30}{\degreeCelsius}
\end{document}
答案2
包gb4e
重新定义了^
,因此您需要使用\textsuperscript
而不是^
来表示度数。要做到这一点,方法是选择文本模式作为单位。此外,在这种情况下,除非您想出于其他目的这样做,否则siunitx
您不需要重新定义。\fg
这有效:
\documentclass[11pt]{article}
\usepackage[mode=text]{siunitx}
\usepackage{gb4e}
\begin{document}
yo
\SI{30}{\degreeCelsius}
\end{document}