xgreek、babel 和 polyglossia 的问题

xgreek、babel 和 polyglossia 的问题

首先是编译良好的代码

% !TEX TS-program = xelatex
\documentclass[11pt,a4paper]{article}
\usepackage{xgreek}
\usepackage{unicode-math}
\setmainfont{Linux Libertine O}
\begin{document}

\newcounter{n}%
\setcounter{n}{0}%

\makeatletter
 \@for\liste:={{a=1},{b=2},{c=-2}}\do{%
 \stepcounter{n}%
 \begingroup
 \nogreekalph
 \global\expandafter\let\csname arg\alph{n}\endcsname\liste
 \endgroup
 }%
 \makeatother

$\arga $ ; $\argb$ ; $\argc$

Αυτό είναι μια υπο-επικεφαλίδα
\end{document}

现在我想使用polyglossia。使用下面的代码,会出现几个错误

% !TEX TS-program = xelatex
\documentclass[11pt,a4paper]{article}
\usepackage{polyglossia}
\setmainlanguage{french}
\setotherlanguage[variant=polytonic]{greek}
\usepackage{xgreek}
\usepackage{unicode-math}
\setmainfont{Linux Libertine O}

\begin{document}

\newcounter{n}%
\setcounter{n}{0}%

\makeatletter
 \@for\liste:={{a=1},{b=2},{c=-2}}\do{%
 \stepcounter{n}%
 \begingroup
 \nogreekalph
 \global\expandafter\let\csname arg\alph{n}\endcsname\liste
 \endgroup
 }%
 \makeatother

$\arga $ ; $\argb$ ; $\argc$

Αυτό είναι μια υπο-επικεφαλίδα
\end{document}

如何更改以下代码以避免这些错误

 \nogreekalph
 \global\expandafter\let\csname arg\alph{n}\endcsname\liste

问题与babel

答案1

这种循环的 expl3 版本可能如下所示。它假设您定义一个新命令。如果您想重新定义现有命令,则必须调整代码。

\documentclass[11pt,a4paper]{article}
\usepackage{polyglossia}
\setmainlanguage{french}
\setotherlanguage[variant=polytonic]{greek}
\usepackage{xgreek}
\usepackage{unicode-math}
\setmainfont{Linux Libertine O}

\begin{document}

\ExplSyntaxOn
\clist_set:Nn \l_tmpa_clist { {a=1},{b=2},{c=-2} }
\int_zero:N\l_tmpa_int
\clist_map_inline:Nn \l_tmpa_clist
 {
  \int_incr:N \l_tmpa_int
  \cs_new:cpn { arg \int_to_alph:n { \l_tmpa_int } } { #1 }
 }
\ExplSyntaxOff

$\arga $ ; $\argb$ ; $\argc$

Αυτό είναι μια υπο-επικεφαλίδα
\end{document}

在此处输入图片描述

相关内容