\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]}

相关内容