XeLaTeX - 脚注中的 gb4e 示例编号 - 与 polyglossia 包交互?

XeLaTeX - 脚注中的 gb4e 示例编号 - 与 polyglossia 包交互?

gb4e以为语言示例排版包会提供在正文示例和脚注示例之间自动切换编号方案的功能。但这并不是我目前从下面的 MWE 获得的行为。也就是说,我到底要怎么做才能确保正文中的示例获得“标准”阿拉伯数字,而脚注中的示例采用独立的编号方案(例如罗马数字)?

还有一个更大的问题:当我使用该polyglossia包定义文档中使用的其他语言时,XeLaTeX 甚至没有为正文示例和脚注示例使用两个独立的计数器。对此有什么建议吗?

\documentclass[a4paper,11pt]{article}

\usepackage{polyglossia}
\usepackage{gb4e}
\noautomath
\setdefaultlanguage{english}
\setotherlanguage{sanskrit}
\setotherlanguage{urdu}
\setmainfont{Charis SIL}
\newfontfamily\devanagarifont[Scale=MatchUppercase]{Devanagari MT}
\newfontfamily\urdufont[Script=Arabic,Scale=1.5]{Nafees}


\begin{document}

This is a test.

\begin{exe}
\ex
{
\gll Ein jeder Hund bellt.\\
{\sc art}.{\sc m}.{\sc sg}.{\sc nom} every.{\sc m}.{\sc sg}.{\sc nom} dog.{\sc m}.{\sc sg}.{\sc nom} bark.{\sc pres}.{\sc 3p}.{\sc sg}\\
\trans `Every dog barks.'
}
\label{ex-1}
\end{exe}


Here is a footnote.\footnote{This is a footnote.\begin{exe}
\ex
{
\gll Ein jeder Hund bellt.\\
{\sc art}.{\sc m}.{\sc sg}.{\sc nom} every.{\sc m}.{\sc sg}.{\sc nom} dog.{\sc m}.{\sc sg}.{\sc nom} bark.{\sc pres}.{\sc 3p}.{\sc sg}\\
\trans `Every dog barks.'
}
\label{ex-fn}
\end{exe}}

\end{document}

答案1

这是解决您两个问题的方法。由于gb4e在 RTL 环境中无法正常工作,因此修补 RTL 脚注毫无意义。

% !TEX TS-program = XeLaTeX
\documentclass[a4paper,11pt]{article}
\usepackage{polyglossia}
\usepackage{etoolbox}
\usepackage{gb4e}
\noautomath

\setdefaultlanguage{english}
\setotherlanguage{sanskrit}
\setotherlanguage{urdu}
\setmainfont{Charis SIL}
\newfontfamily\devanagarifont[Scale=MatchUppercase]{Devanagari MT}
\newfontfamily\urdufont[Script=Arabic,Scale=1.5]{Nafees}

\makeatletter
\pretocmd{\@footnotetext}{
    \@noftnotefalse\setcounter{fnx}{0}%
    \renewcommand{\thexnumi}{\roman{xnumi}}
    }{}{}
\apptocmd{\@footnotetext}{
    \@noftnotetrue
    \renewcommand{\thexnumi}{\arabic{xnumi}}
    }{}{}
\@ifpackageloaded{bidi}{%
\pretocmd{\@LTRfootnotetext}{
    \@noftnotefalse\setcounter{fnx}{0}%
    \renewcommand{\thexnumi}{\roman{xnumi}}
    }{}{}
\apptocmd{\@LTRfootnotetext}{
    \@noftnotetrue
    \renewcommand{\thexnumi}{\arabic{xnumi}}
    }{}{}
}
\makeatother

\begin{document}

This is a test.

\begin{exe}
\ex
{
\gll Ein jeder Hund bellt.\\
{\sc art}.{\sc m}.{\sc sg}.{\sc nom} every.{\sc m}.{\sc sg}.{\sc nom} dog.{\sc m}.{\sc sg}.{\sc nom} bark.{\sc pres}.{\sc 3p}.{\sc sg}\\
\trans `Every dog barks.'
}
\label{ex-1}
\end{exe}

Here is a footnote.\footnote{This is a footnote.\begin{exe}
\ex
{
\gll Ein jeder Hund bellt.\\
{\sc art}.{\sc m}.{\sc sg}.{\sc nom} every.{\sc m}.{\sc sg}.{\sc nom} dog.{\sc m}.{\sc sg}.{\sc nom} bark.{\sc pres}.{\sc 3p}.{\sc sg}\\
\trans `Every dog barks.'
}
\label{ex-fn}
\end{exe}}

\begin{exe}
\ex
{
\gll Ein jeder Hund bellt.\\
{\sc art}.{\sc m}.{\sc sg}.{\sc nom} every.{\sc m}.{\sc sg}.{\sc nom} dog.{\sc m}.{\sc sg}.{\sc nom} bark.{\sc pres}.{\sc 3p}.{\sc sg}\\
\trans `Every dog barks.'
}
\label{ex-1}
\end{exe}

Here is a footnote.\footnote{This is a footnote.\begin{exe}
\ex
{
\gll Ein jeder Hund bellt.\\
{\sc art}.{\sc m}.{\sc sg}.{\sc nom} every.{\sc m}.{\sc sg}.{\sc nom} dog.{\sc m}.{\sc sg}.{\sc nom} bark.{\sc pres}.{\sc 3p}.{\sc sg}\\
\trans `Every dog barks.'
}
\label{ex-fn}
\end{exe}}



\end{document}

代码输出

相关内容