\csname ... \endcsname 不適用於 \newfontfamily

\csname ... \endcsname 不適用於 \newfontfamily

我在下面有一個 MWE 顯示了我的問題(我從這個答案:

\documentclass[twoside]{scrartcl}

\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{microtype}
\usepackage{lipsum}

\newfontfamily\cyrillicfontsf{CMU Sans Serif}[Script=Cyrillic]

% What I'm trying to replace
% \newfontfamily\cyrillicfont{CMU Serif}[Script=Cyrillic]

% What I'm trying to replace it with
\newcommand\mycommand[2]{\newfontfamily\csname#1font\endcsname{#2}[Script=Cyrillic]}
\mycommand{cyrillic}{CMU Serif}

\setmainlanguage{ukrainian}

\begin{document}
\author{А.В. Тор}
\title{Великий об'єм }
\maketitle
\section{Перший}
\lipsum[1-2]
\end{document}

所以這裡的問題是我覺得我試圖替換的東西和我試圖替換它的東西是等價的。但是,我拋出以下錯誤:

fontspec error: "font-not-found"
! 
! The font "c" cannot be found.
! 
! See the fontspec documentation for further information.
! 
! For immediate help type H <return>.
!............................................... 

所以它似乎只採用了參數的第一個字母cyrillic,但這看起來很奇怪,因為我把它放在\csname ... \endcsname環境中。我該如何解決這個問題?

\expandafter之前也嘗試過\newcommand,但似乎也不起作用。

答案1

\newcommand\mycommand[2]{\newfontfamily\csname#1font\endcsname{#2}[Script=Cyrillic]}

\newfontfamily沒有看到命令序列,而是\csname作為第一個參數。 \expandafter透過建立命令序列來提供幫助 \newfontfamily解析它的參數:

\newcommand\mycommand[2]{\expandafter\newfontfamily\csname#1font\endcsname{#2}[Script=Cyrillic]}

相關內容