有人知道小型大写数字吗?

有人知道小型大写数字吗?

有没有一种好的(可能是免费的)opentype字体,带有小型大写数字和小问号和感叹号;我可以将它们与xelatex + fontspec一起使用吗?

或者,更好的办法是,有没有一种变通方法,我可以使用 Linux Libertine 或 TeX Gyre Pagella 等优秀的免费字体?我需要这个字体来显示我的页面标题,我想将其排版为全小写;因此,如果能在我的页面样式宏中加入某种机制,那将非常有用。缩小全大写不是办法——例如,在 Linux Libertine 中,内联数字、问号和感叹号明显小于大写字母,而且无论如何,缩放大写字母看起来并不好。

基于这个答案我尝试了以下内容,它似乎在普通文本中起作用,但在页面样式宏中不起作用(我对和不是很熟悉\catcode\lccode因此或多或少是复制粘贴和反复试验;也许它只是需要偶尔\protect散布一些?):

File mysmallcaps.sty

\ProvidesPackage{mysmallcaps}
\newenvironment{mylcsc}{%
    \addfontfeature{Letters=UppercaseSmallCaps,Letters=SmallCaps,LetterSpace=2,WordSpace=1.2,Numbers=Lining}%
    \catcode`\'=\active\begingroup\lccode`\~=`\'\lowercase{\endgroup\def~{\protect\raisebox{-0.45ex}{\kern0.03em'}}}%
    \catcode`!=\active\begingroup\lccode`\~=`!\lowercase{\endgroup\def~{\protect\scalebox{1}[0.75]{\kern0.01em!}}}%
    \catcode`?=\active\begingroup\lccode`\~=`?\lowercase{\endgroup\def~{\protect\scalebox{1}[0.75]{\kern0.02em?}}}%
    \catcode`1=\active\begingroup\lccode`\~=`1\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{1}}}%
    \catcode`2=\active\begingroup\lccode`\~=`2\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{2}}}%
    \catcode`3=\active\begingroup\lccode`\~=`3\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{3}}}%
    \catcode`4=\active\begingroup\lccode`\~=`4\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{4}}}%
    \catcode`5=\active\begingroup\lccode`\~=`5\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{5}}}%
    \catcode`6=\active\begingroup\lccode`\~=`6\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{6}}}%
    \catcode`7=\active\begingroup\lccode`\~=`7\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{7}}}%
    \catcode`8=\active\begingroup\lccode`\~=`8\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{8}}}%
    \catcode`9=\active\begingroup\lccode`\~=`9\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{9}}}%
    \catcode`0=\active\begingroup\lccode`\~=`0\lowercase{\endgroup\def~{\protect\scalebox{1}[0.8]{0}}}%
}{}
% redefining \ps@headings like this does _not_ work:
\def\ps@mynewheadings{%
    \ps@headings
    \let\@oddfoot\@empty\let\@evenfoot\@empty
    \def\@evenhead{%
        \thepage\hfil
        \normalfont\small\begin{mylcsc}\MakeLowercase{\leftmark}\end{mylcsc}%
    }%
    \def\@oddhead{%
        {\normalfont\small\begin{mylcsc}\MakeLowercase{\rightmark}\end{mylcsc}}%
        \hfil\thepage%
    }%
}
\pagestyle{mynewheadings}

文件test.tex

\documentclass{book}
\usepackage{lipsum}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle, Ligatures=TeX]{Linux Libertine O}
\usepackage{mysmallcaps}
\begin{document}
    \chapter{Here comes Orwell's 1984!}
    \section{Whatever happened in 336\,\textsc{bc} that made the high priest blush?}%
    Can't? Won't! 0123456789\\[3mm]
    \emph{Small-caps with homemade corrections:}\\
    \begin{mylcsc}Can't? Won't! 0123456789\end{mylcsc}\\[3mm]
    \emph{Scaled all-caps:}\\
    \scalebox{0.65}[0.65]{\addfontfeature{Numbers=Lining, LetterSpace=4}\MakeUppercase{Can't? Won't! 0123456789}}\\[12mm]
    \lipsum\lipsum
\end{document}
\endinput

答案1

即使在商业字体中,也很少有小写数字和标点符号,但以下字体有,而且我已成功将它们与 和 一起使用luatexxetexAugustin、Cartier Book Pro、Jannon 10 Pro 和 Neacademia Latin。对于 Jannon 10 Pro,您必须Script=Default在调用 时指定fontspec才能使该功能正常工作。

下面是一个演示,从中你可以看出 Neacademia 和 Cartier 的小写数字的上升部分和下降部分更多地向内收(Cartier)或更少地向内收(Neacademia),而 Jannon 和 Augustin 的小写数字则是排列整齐的。

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Contextuals=Alternate]{Neacademia Latin}

\newfontfamily\jannon[
  Script=Default,
  Contextuals=Inner,
  Numbers=OldStyle,
  ItalicFeatures={Contextuals={WordInitial,WordFinal}}
]{Jannon 10 Pro}

\newfontfamily\augustin[
  BoldFont={Augustin Bold},
  BoldItalicFont={Augustin Bold Italic},
  BoldFeatures={SmallCapsFont={Augustin Bold Small Caps}},
  ItalicFont={Augustin Italic},
  SmallCapsFont={Augustin Small Caps}
]{Augustin-Regular}

\newfontfamily\cartier[BoldFont={* Medium}]{Cartier Book Pro}
\begin{document}
\begin{tabular}{rl}
Neacademia Latin & George Orwell, 1984?! \textsc{george orwell, 1984?!}\\
\jannon Jannon 10 Pro & \jannon George Orwell, 1984?! \textsc{george orwell, 1984?!}\\
\cartier Cartier Book Pro & \cartier George Orwell, 1984?! \textsc{george orwell, 1984?!}\\
\augustin Augustin & \augustin George Orwell, 1984?! \textsc{george orwell, 1984?!}
\end{tabular}
\end{document}

上述代码的输出

答案2

根据@Steven 对我的 OP 的评论中的某些链接,我想到了一个实际上不是解决方案的解决方法,而是一个可行的(对我来说)解决方法(结果需要以高分辨率/放大率打印或查看,因为提示似乎与纯粹的字形有很大不同):

\documentclass{book}
\usepackage[landscape]{geometry}
\usepackage{xltxtra}
\usepackage{fontspec}
\usepackage{newunicodechar}
\newif\ifsc\scfalse
% Get me my capital ß:
\newunicodechar{ß}{\ss}
\let\oldSS\SS
\renewcommand{\SS}{\iffontchar\font"1E9E \symbol{"1E9E}\else \oldSS\fi}
%
\newcommand{\Ziffer}[2]{\ifsc\iffontchar\font#1 \symbol{#1}\else #2\fi\else #2\fi}
\newcommand{\Null}{\Ziffer{"E108}{0}}%
\newcommand{\Eins}{\Ziffer{"E109}{1}}%
\newcommand{\Zwei}{\Ziffer{"E10A}{2}}%
\newcommand{\Drei}{\Ziffer{"E10B}{3}}%
\newcommand{\Vier}{\Ziffer{"E10C}{4}}%
\newcommand{\Fuenf}{\Ziffer{"E10D}{5}}%
\newcommand{\Sechs}{\Ziffer{"E10E}{6}}%
\newcommand{\Sieben}{\Ziffer{"E10F}{7}}%
\newcommand{\Acht}{\Ziffer{"E110}{8}}%
\newcommand{\Neun}{\Ziffer{"E111}{9}}%
%
\setmainfont[Numbers={OldStyle,Proportional}, Ligatures=TeX]{Linux Libertine O}
%
\newcommand{\fakesc}[1]{{%
    \sctrue%
    \addfontfeature{%
        LetterSpace=2,
        Numbers={Lining, Proportional},
        FakeStretch=1.157,
        FakeBold=1.01,
    }%
\scalebox{0.7}[0.7]{{\MakeUppercase{#1}}}%
}}
\newcommand{\testtext}{(h\Null\Eins\Zwei\Drei\Acht\Neun h)? -- Don't! -- aäbcdefghijklmnoöpqrsßtuüvwxyz}
\begin{document}\noindent
    \normalsize normal font\\
    \normalfont\LARGE \testtext\\[2mm]
    \normalsize caps\,+\,smallcaps, out of the box:\\
    \LARGE \textsc{\testtext}\\[2mm]
    \normalsize homemade smallcaps (please compare at high resolution):\\
    \LARGE \fakesc{\testtext}\\[2mm]
\end{document}
\endinput

如您所见,对于我的目的而言,生成的字体比原始的 caps+smallcaps 效果更好。 竖纹明显减少 — — 好吧,仍有 ÄÖÜ 和 Q 和 J,但它们比原始 c+sc 形状的干扰少得多。 !?() 和 ' 表现非常好。 如果我不使用 \scalebox,而是使用现有或自定义的额外 fontsize 命令,结果甚至会连字符(我不需要)。

待办事项:我感觉并非所有使用符号“E108 到”E111 的字体都使用这些位置来放置全大写数字。所以我想我需要进行某种测试来概括这一点,并使它在不适用的地方无害。

相关内容