我正在使用 XeLaTeX(fontspec),但遇到了以下问题。我在序言中使用了很多不同的字体,例如
\setmainfont{GFSDidot}
\newfontfamily{\greekfont}{CMU Serif}
\newfontfamily{\greekfontsf}{CMU Sans Serif}
\newfontfamily{\hebrewfont}{Linux Libertine O}[Scale=MatchUppercase]
我使用stackengine
包来堆叠不同的字体。我想在本地更改一种特定字体的字体大小,而不影响在堆栈过程中一起使用的其他字体的大小。我担心该命令\addfontfeatures[Scale=..]
会影响堆栈中任何字体的大小!所以我的问题是:是否可以在本地更改特定字体的字体大小(无需为该\newfontfamily
特定字体定义新的字体并指定所需的大小)?像 { \addfontfeatures{\hebrewfont}[Scale=..]
....} 这样的?您可以使用以下最小示例:
\documentclass[letterpaper, 12pt]{article}
\usepackage[no-math]{fontspec}
\usepackage{stackengine}
\usepackage{polyglossia}
\usepackage{newunicodechar}
\setmainfont{Arial}
\newfontfamily{\hebrewfont}{Linux Libertine O}
\newunicodechar{ǎ}{\accent\string"02C7 a}
\newunicodechar{א}{{\hebrewfont{א}}}
\newunicodechar{ע}{{\hebrewfont{ע}}}
\begin{document}
\stackengine{\Lstackgap}{ǎ}{א}{O}{c}{F}{\useanchorwidth}{L}\\
{\fontspec{\hebrewfont} \addfontfeature[Scale=0.8] \stackengine{\Lstackgap}{ǎ}{א}{O}{c}{F}{\useanchorwidth}{L}}
\end{document}
当我尝试定义“缩放”命令时也遇到了同样的问题,例如\newcommand\hebr[1]{\fontspec{Linux Libertine O}\addfontfeature{Scale=#1}}
,输出{\hebr{0.3}ǎא }
不是预期的!!
答案1
如果要缩放的字体始终出现在堆栈中的同一级别(例如,始终在顶部),则可以在此处设置一个宏,\mystackon
用于缩放堆栈的上部元素。
\documentclass[letterpaper, 12pt]{article}
\usepackage[no-math]{fontspec}
\usepackage{stackengine}
\usepackage{polyglossia}
\usepackage{newunicodechar}
\setmainfont{Arial}
\newfontfamily{\hebrewfont}{Linux Libertine O}
\newunicodechar{ǎ}{\accent\string"02C7 a}
\newunicodechar{א}{{\hebrewfont{א}}}
\newunicodechar{ע}{{\hebrewfont{ע}}}
\newcommand\mystackon[2]{%
\stackengine{\Lstackgap}{#1}{\scalebox{.8}{#2}}{O}{c}{F}{\useanchorwidth}{L}%
}
\begin{document}
Unaltered:
\stackengine{\Lstackgap}{ǎ}{א}{O}{c}{F}{\useanchorwidth}{L}
Revised:
\mystackon{ǎ}{א} \mystackon{b}{ע}
\end{document}
另一方面,如果需要在任意位置按需使用较小的字体,则可以创建宏\smallhebrew
和\normalhebrew
作为更改字体大小的指令。这可以通过重新定义来\hebrewfont
包含(或不包含)缩放来实现。
\documentclass[letterpaper, 12pt]{article}
\usepackage[no-math]{fontspec}
\usepackage{stackengine}
\usepackage{polyglossia}
\usepackage{newunicodechar}
\setmainfont{Arial}
\newfontfamily{\hebrewfont}{Linux Libertine O}
\newunicodechar{ǎ}{\accent\string"02C7 a}
\newunicodechar{א}{{\hebrewfont{א}}}
\newunicodechar{ע}{{\hebrewfont{ע}}}
\let\svhebrewfont\hebrewfont
\newcommand\smallhebrew{\renewcommand\hebrewfont[1]{\scalebox{.8}{\svhebrewfont{##1}}}}
\newcommand\normalhebrew{\let\hebrewfont\svhebrewfont}
\begin{document}
normal: \stackengine{\Lstackgap}{ǎ}{א}{O}{c}{F}{\useanchorwidth}{L}
\stackengine{\Lstackgap}{ע}{ǎ}{O}{c}{F}{\useanchorwidth}{L}
%
small: \smallhebrew%
\stackengine{\Lstackgap}{ǎ}{א}{O}{c}{F}{\useanchorwidth}{L}
\stackengine{\Lstackgap}{ע}{ǎ}{O}{c}{F}{\useanchorwidth}{L}
%
back to normal: \normalhebrew%
\stackengine{\Lstackgap}{ǎ}{א}{O}{c}{F}{\useanchorwidth}{L}
\stackengine{\Lstackgap}{ע}{ǎ}{O}{c}{F}{\useanchorwidth}{L}
\end{document}