今天更新了我的 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
因此^
它在文档前言和正文中有所不同。以前,语言加载后就会激活简写,但现在不再如此。
你有三个策略:
- 转移
\newcolumntype{^}{>{\currentrowstyle}}
后\begin{document}
使用密码
\begingroup\lccode`~=`^\lowercase{\endgroup \newcolumntype{~}{>{\currentrowstyle}}% }
对列类型使用不同的字符
我倾向于最后一个选项。
第四个策略:忘记\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}