siunitx 与 gb4e 不兼容

siunitx 与 gb4e 不兼容

看起来 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}

相关内容