Rowstyle – 多语种拉丁冲突:非法前缀标记

Rowstyle – 多语种拉丁冲突:非法前缀标记

今天更新了我的 TeXLive 后(上次更新大约在六周前),以下 MWE 将停止指责:

Illegal pream-token (^): `c' used. 

array如果我注释掉拉丁语激活行,那就没问题了。我尝试了所有拉丁语变体,并查阅了和的手册polyglossia以寻找提示,但我找不到罪魁祸首,有什么想法吗?有什么推荐的破解方法吗?

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode

\documentclass{book}

\usepackage{fontspec}
    \setmainfont{Times New Roman}

\usepackage{polyglossia}
    \setdefaultlanguage[variant=british]{english}

    \setotherlanguage{latin}

\usepackage{array}
    \newcolumntype{$}{>{\global\let\currentrowstyle\relax}} % row format
    \newcolumntype{^}{>{\currentrowstyle}}
    \newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
      #1\ignorespaces
    }

\begin{document}

\begin{tabular}{$c^c^c}
\rowstyle{\bfseries}   1&2&3\\
\end{tabular}

\end{document}

答案1

字符是简写,latin因此^它在文档前言和正文中有所不同。以前,语言加载后就会激活简写,但现在不再如此。

你有三个策略:

  1. 转移\newcolumntype{^}{>{\currentrowstyle}}\begin{document}
  2. 使用密码

    \begingroup\lccode`~=`^\lowercase{\endgroup
      \newcolumntype{~}{>{\currentrowstyle}}%
    }
    
  3. 对列类型使用不同的字符

我倾向于最后一个选项。

第四个策略:忘记\rowstyle

答案2

gloss-latin^在文档开始时使它处于活动状态。这意味着表格不再将其识别为定义的列类型。如果您激活简写,它会再次起作用:

\documentclass{book}

\usepackage{fontspec}
    \setmainfont{Times New Roman}

\usepackage{polyglossia}
    \setdefaultlanguage[variant=british]{english}

    \setotherlanguage{latin}

\usepackage{array}
    \newcolumntype{$}{>{\global\let\currentrowstyle\relax}} % row format

    \newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
      #1\ignorespaces
    }

\shorthandon{^} %<---
\newcolumntype{^}{>{\currentrowstyle}}
\begin{document}

\begin{tabular}{$c^c^c}
\rowstyle{\bfseries}   1&2&3\\
\end{tabular}

\end{document}

相关内容