gb4e 与 xyling 之间的冲突

gb4e 与 xyling 之间的冲突

我尝试同时使用 gb4e 和 xyling 包(我长期使用前者,后者对我来说是新的),当在同一个文档中使用它们时(无论以何种顺序调用它们),它们都会产生错误。单独使用任何一个包都可以编译。这是我的 MWE:

\documentclass[a4paper,12pt]{article}

\usepackage{gb4e}
\usepackage{xyling}

\begin{document}

Dragons

\end{document}

这会产生以下错误:

! Missing number, treated as zero.
<to be read again> 
                   \let 
l.101 \catcode`\^^M
                   =\active
?

有什么好方法可以解决这个问题吗?

或者,我只需要将 xyling 用于一个非常特殊的目的,即制作一个韵律网格,如文档第 9 节(第 25 页)中所述:http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/xyling/xyli-doc.pdf如果有不同的包可以达到相同的效果并且不与其他包冲突,那对我来说也是一个实用的解决方案。

答案1

当然,Marijn 的回答是对这个问题的直接回答。我添加这个答案,这是一个间接答案,因为我认为在这种情况下,它是问题中提到的特定需求的首选途径。

如果您仅使用该xyling软件包来获取其度量网格代码,我建议您将代码复制到您的文档中。使用xyling需要使用 进行编译latex+dvips,这可能不是您想要的。虽然如果您使用其他编译方法(因为您实际上没有使用任何其后记代码),您可能可以安全地忽略它生成的所有警告,但使用您需要的代码并避免所有虚假警告会更简单。

\documentclass[a4paper,12pt]{article}
% Metrical grid code from xyling
\RequirePackage{ifthen}

\newcounter{PXcnt}
\newcommand{\PX}[2][1]{%
\shortstack[c]{%
\whiledo{\value{PXcnt}<#1}
{\stepcounter{PXcnt}$\times$\\}#2\strut%
}\setcounter{PXcnt}{0}}

\newcommand{\PXl}[2][1]{%
\shortstack[l]{%
\whiledo{\value{PXcnt}<#1}
{\stepcounter{PXcnt}$\times$\\}#2\strut%
}\setcounter{PXcnt}{0}}

\newcommand{\PXr}[2][1]{%
\shortstack[r]{%
\whiledo{\value{PXcnt}<#1}
{\stepcounter{PXcnt}$\times$\\}#2\strut%
}\setcounter{PXcnt}{0}}
% Syntax: \PX[number of grid marks]{expression}
% An example:
%          \PX[2]{Fa}rah \PX{Faw}cett \PX[3]{Ma}jors

\usepackage{gb4e}


\begin{document}

Dragons

\PX[2]{Fa}rah \PX{Faw}cett \PX[3]{Ma}jors

\end{document}

代码输出

答案2

gb4e包使^_字符处于活动状态,以便允许在数学模式之外使用下标和上标(即在语言示例中)。当其他包尝试使用这些字符的正常含义时,这会导致很多问题,例如xyling尝试设置 的类别代码^^M。 已确认这一点gb4e,并且有一个选项可以关闭此行为,称为\noautomath

\documentclass[a4paper,12pt]{article}

\usepackage{gb4e}
\noautomath
\usepackage{xyling}

\begin{document}

Dragons

\end{document}

如果稍后确实需要下标和上标,则可以使用 重新启用该行为\automath

相关内容