从 TL16 更新至 TL17 后,骷髅符号不再起作用

从 TL16 更新至 TL17 后,骷髅符号不再起作用

下面的代码

\documentclass{article}

\DeclareFontFamily{U}{skulls}{}
\DeclareFontShape{U}{skulls}{m}{n}{ <-> skull }{}
\newcommand{\skull}{\text{\usefont{U}{skulls}{m}{n}\symbol{'101}}}

\begin{document}
    Here is a skull:
    $\skull$
\end{document}

在我将 TeXLive 更新到 2017 版本后,它就停止工作了。

错误如下:

! Undefined control sequence.
\skull ->\text
               {\usefont {U}{skulls}{m}{n}\symbol {'101}}
l.9     $\skull
            $

虽然一切都可以使用\usepackage{skull},但我不想使用它,因为正如我以前问题的答案所建议的那样,为一个符号加载一个包是不合理的,而且它还会与其他一些包冲突。

答案1

luatex 不会触发mktextfm,因此如果你获取 Alan 答案中的文档并与 lualatex 一起使用,你会得到

luaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: "Font skull not found.".
luaotfload | resolve : sequence of 3 lookups yielded nothing appropriate.
! Font \U/skulls/m/n/10=skull at 10pt not loadable: metric data not found or ba
d.

但如果你用 pdflatex 运行它,你会得到

...
kpathsea: Running mktextfm skull
...

然后生成 tfm 并且原始文档也可以与 lualatex 一起使用

答案2

\text命令来自amsmath包。

\documentclass{article}
\usepackage{amsmath}
\DeclareFontFamily{U}{skulls}{}
\DeclareFontShape{U}{skulls}{m}{n}{ <-> skull }{}
\newcommand{\skull}{\text{\usefont{U}{skulls}{m}{n}\symbol{'101}}}

\begin{document}
    Here is a skull:
    $\skull$
\end{document}

代码输出

答案3

抱歉,但该文档不符合任何版本的 TeX Live。为了完整起见,我尝试使用 TL 从 2012 年到 2017 年,编译总是停止并显示

! Undefined control sequence.
\skull ->\text 
               {\usefont {U}{skulls}{m}{n}\symbol {'101}}
l.9     $\skull
               $

这是很清楚的,因为\text需要amstext(由 加载amsmath)。

如果您不想使用amsmathamstext(但我认为没有理由使用),您可以\skull用不同的方式定义:

\DeclareRobustCommand{\skull}{\ifmmode\mathskull\else\textskull\fi}
\newcommand\textskull{{\usefont{U}{skulls}{m}{n}\symbol{'101}}}
\makeatletter
\newcommand\mathskull{%
  \@check@mathfonts
  \mathchoice
    {\mbox{\fontsize{\tf@size}{\z@}\textskull}}
    {\mbox{\fontsize{\tf@size}{\z@}\textskull}}
    {\mbox{\fontsize{\sf@size}{\z@}\textskull}}
    {\mbox{\fontsize{\ssf@size}{\z@}\textskull}}%
}
\makeatother

完整示例:

\documentclass{article}

\DeclareFontFamily{U}{skulls}{}
\DeclareFontShape{U}{skulls}{m}{n}{ <-> skull }{}
\DeclareRobustCommand{\skull}{\ifmmode\mathskull\else\textskull\fi}
\newcommand\textskull{{\usefont{U}{skulls}{m}{n}\symbol{'101}}}
\makeatletter
\newcommand\mathskull{%
  \check@mathfonts
  \mathchoice
    {\mbox{\fontsize{\tf@size}{\z@}\textskull}}
    {\mbox{\fontsize{\tf@size}{\z@}\textskull}}
    {\mbox{\fontsize{\sf@size}{\z@}\textskull}}
    {\mbox{\fontsize{\ssf@size}{\z@}\textskull}}%
}
\makeatother

\begin{document}

Here is a skull: $\skull$ but also in text \skull.

$A_{\skull}$

\end{document}

我相信这一点,\usepackage{amsmath}而且\text更容易。

在此处输入图片描述

使用 LuaLaTeX 或 XeLaTeX 和具有所需字形的字体(Symbola 是免费的):

\documentclass{article}
\usepackage{amsmath,fontspec,newunicodechar}

\newfontface{\skullfont}{Symbola}[Scale=MatchUppercase]

\NewDocumentCommand{\skull}{}{%
  \text{\skullfont\symbol{"1F571}}%
}
\newunicodechar{

相关内容