\iflanguage 条件中考虑了一些 frenchb 开关,但不是全部

\iflanguage 条件中考虑了一些 frenchb 开关,但不是全部

如下面的 MWE 所示,一些frenchb开关(例如)在( )条件\FBFrenchFootnotestrue中被考虑,但不是全部(例如):后者只有直接插入文档主体中才会被考虑。babel\iflanguage\FBStandardItemLabelsfalse

\documentclass[french,english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\begin{document}
%
\newcommand{\test}[1][english]{%
  \selectlanguage{#1}
  \iflanguage{french}{
    \section{French}
    \FBStandardItemLabelsfalse%
    \FBFrenchFootnotestrue%
  }{
    \section{English}
    \FBStandardItemLabelstrue%
    \FBFrenchFootnotesfalse%
  }%
  Foo\footnote{Bar}.%
  \begin{itemize}
  \item Foo
  \item Bar
  \end{itemize}
}
%
\test
\test[french]
\test
\FBStandardItemLabelsfalse%
\test[french]
\end{document}

\iflanguage您知道为什么以及如何强制在条件中考虑所有这些开关吗?

答案1

您可以通过发出以下命令明确要求将列表布局更新为当前开关指定的布局

\update@frenchlists

这在 内部或外部均可行\iflanguage。由于宏名称包含内部@字符,因此您必须用它括住代码\makeatletter...\makeother

示例输出

\documentclass[french,english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}

\makeatletter
\newcommand{\test}[1][english]{%
  \selectlanguage{#1}
  \iflanguage{french}{%
    \section{French}
    \FBStandardItemLabelsfalse
    \FBFrenchFootnotestrue
  }{%
    \section{English}
    \FBStandardItemLabelstrue
    \FBFrenchFootnotesfalse
  }%
  \update@frenchlists
  Foo\footnote{Bar}.
  \begin{itemize}
  \item Foo
  \item Bar
  \end{itemize}
}
\makeatother

\begin{document}

\test
\test[french]
\test
\test[french]

\end{document}

相关内容