下列的这个例子我创建了一个命令来检查当前是否选择了粗体字体。
这肯定曾经在一段时间前起作用fontspec
(使用 TeXlive2018,如果 pdf 元数据是可信的),但现在不再起作用了(只是tlmgr
在我的 TeXlive2020 安装上运行),如以下 MWE 所示:
%!TEX program = lualatex
\documentclass{scrbook}
\usepackage{etoolbox}
\usepackage{hyperref}
%-- Font setup
\usepackage[euler-digits]{eulervm}
\usepackage[no-math]{fontspec}
\defaultfontfeatures{Extension=.otf}
\setmainfont{XCharter} % <-- COMMENT THIS LINE!
%-- IfBold Command
\makeatletter
\newcommand*{\IfBold}{%
\ifx\f@series\my@test@bx
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\newcommand*{\my@test@bx}{bx}
\makeatother
%-- Define a command for K-theory
\newcommand{\Kay}{\IfBold{\ensuremath{\mathbold{K}}}{\ensuremath{K}}}
\robustify{\Kay}
\newcommand{\K}{\texorpdfstring{\Kay}{K}}
\begin{document}
\section*{I like \K-Theory}
This is the regular \K.
\textbf{This is \IfBold{bold}{non-bold} text.}
This is \IfBold{bold}{non-bold} text.
\end{document}
这是新引入的错误还是我遗漏了什么?
答案1
我已经\IfFontSeriesContextTF
在内核中添加了 NFSS 命令集,以便可以可靠地确定字体系列上下文,即使在一种字体中“粗体”表示半粗体或......
第一个参数要么是bf
(我是否在 中排版\bfseries
?)要么是md
(我是否在 `\mdseries 中排版?)。这是一个参数,因为有一天可能会有更多系列上下文可用。
这是\DeclareFontSeriesDefault
可以指定“粗体”含义等等的\sffamily
匹配。
该代码将在接下来的几天内以 latex-dev 格式的新上传形式出现,并将在 2020 年秋季发布时正式出现。
现在,您可以使用下面的代码代替示例中的代码(我知道,代码会更长一些)。latex-dev 出来后,您所需要的只是 的定义\IfBold
,即一行,然后使用
lualatex-dev myfile
来编译它。
%-- IfBold Command
\makeatletter
\DeclareRobustCommand\IfFontSeriesContextTF[1]{%
\expand@font@defaults
\@font@series@contextfalse
\def\requested@test@context{#1}%
\expandafter\edef\csname ??def@ult\endcsname{\f@family}%
\let\@elt\test@font@series@context
\@meta@family@list
\@elt{??}%
\let\@elt\relax
\if@font@series@context
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\def\test@font@series@context#1{%
\edef\reserved@a{\csname #1def@ult\endcsname}%
\ifx\f@family\reserved@a
\let\@elt\@gobble
\expandafter\ifx
\csname\requested@test@context series@#1\endcsname\f@series
\@font@series@contexttrue
\else
\expandafter\ifx
\csname\requested@test@context def@ult\endcsname\f@series
\@font@series@contexttrue
\fi\fi\fi
}
\newif\if@font@series@context
\newcommand\IfBold{\IfFontSeriesContextTF{bf}}
\makeatother
结果是:
发短信快乐
更新 2020/05
现在,该实现已添加到 LaTeX 的开发格式中,可以使用lualatex-dev
等进行测试。它将于 2020 年秋季的下一个主要版本中推出。