我正在使用 XelaTeX 排版一张外语词汇表,其结构类似于这个:不同的列使用不同的字体(和脚本)排版。似乎应该使用包\newcolumntype
来实现array
。
下面是我尝试用 Linux Libertine 和 Arial 排版一列的 MWE:
%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode
\documentclass[12pt, a4paper]{standalone}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\usepackage{array}
\newcolumntype{L}{>{\fontspec{Linux Libertine O}}l}
\newcolumntype{A}{>{\fontspec{Arial}}l}
\begin{document}
\begin{tabular}{LA}
Libertine & Arial\\
\end{tabular}
\end{document}
L
它定义了类型(以 Libertine 排版)和A
(Arial)的列。
我在编译时收到以下错误消息:
! Forbidden control sequence found while scanning use of \bool_if:nTF. <inserted text> \par l.16 Libertine & Arial\\
似乎的语法\newcolumntype
最近发生了变化,因此基于手册我试图将该列定义为
\newcolumntype{L}{>{\fontspec{Linux Libertine O}}{l}<{}}
这会导致同样的错误。
有任何想法吗?
答案1
如果您尝试>{\fontspec...}
直接在表格中使用,也会得到同样的错误。在此处设置字体不是一个好主意(除了错误之外,fontspec 还必须在每个单元格中再次执行此操作)。首先设置字体,然后改用常规字体命令:
\documentclass[12pt, a4paper]{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\setsansfont{Arial}
\newfontfamily\testfamily{Cambria}
\usepackage{array}
\newcolumntype{L}{>{\rmfamily}l}
\newcolumntype{A}{>{\sffamily}l}
\newcolumntype T{>{\testfamily}l}
\begin{document}
\begin{tabular}{LAT}
Libertine & Arial& Cambria\\
\end{tabular}
\end{document}