如何从符号包中获取一个符号?

如何从符号包中获取一个符号?

我需要使用\Writinghand包中的符号marvosym.sty。但是,由于某种原因,加载此包会引发错误:

(/usr/local/texlive/2013/texmf-dist/tex/latex/ifsym/ifsym.sty(/usr/local/texlive/2013/texmf-dist/tex/latex/tools/calc.sty)

!LaTeX 错误:命令 \Sun 已定义。或名称 \end... 非法,请参阅手册第 192 页。

因此,这是我的一般问题: 当人们想要从“符号包”(创建许多新符号的包)中只包含一个符号时,是否有一个通用的程序可遵循?

答案1

不,没有通用的程序。必须查看包代码,并且终端的一些知识可能会有所帮助;但始终可以使用编辑器打开包文件。

让我们看看\WritingHand综合列表是否告诉您它来自marvosym.sty

首先,我们需要确定 LaTeX 如何识别字体。在这些情况下,我不会在编辑器中打开文件,而是使用less

less $(kpsewhich marvosym.sty)

因为kpsewhich是 TeX 程序内部用来查找文件的实用程序。文件中的前几行是

\ProvidesPackage{marvosym}
  [2011/07/20 v2.2 Martin Vogel's Symbols font definitions]
\newcommand{\mvs}{\fontfamily{mvs}\fontencoding{U}%
\fontseries{m}\fontshape{n}\selectfont}

很好。我们知道如何加载字体。代码不是最好的,因为

\newcommand{\mvs}{\usefont{U}{mvs}{m}{n}}

会是一个更简洁的调用,尽管它们是等效的。编码U是“未指定”或“未知”,这意味着 LaTeX 不会尝试任何技巧来使命令适应当前编码。它是一种标准编码,因此无需事先声明。任何时候我们需要字体中的字形,我们都可以这样说

\usefont{U}{mvs}{m}{n}

在一个组中。现在我们寻找\WritingHand,并在第 80 行找到它:

\newcommand\WritingHand{\mvchr{98}}     \let\Writinghand\WritingHand

第二部分只是一个别名。是什么\mvchr?它在第 5 行

\newcommand{\mvchr}[1]{{\mvs\char#1}}

但这又是糟糕的 LaTeX 编程,因为\symbol{#1}会更好。

因此,我们拥有完成任务所需的所有必要条件:

\newcommand{\WritingHand}{{\usefont{U}{mvs}{m}{n}\symbol{98}}}

无需加载任何包即可运行。如果您计划使用\WritingHand移动参数(例如,章节标题或说明),最好使用\DeclareRobustCommand而不是\newcommand,否则在.aux文件中您会发现

{\fontencoding  {#1}\fontfamily  {#2}\fontseries  {#3}\fontshape  {#4}\selectfont  \ignorespaces \char 98\relax }

而不是简单的\WritingHand。没什么大问题,但可能会很烦人。

假设你想使用字形

在此处输入图片描述

可在 STIX 字体包中找到。查看文档,我们在字体中的八进制 204(十进制 132)位置找到它stix-extra1(第 43 页的字体表)。

和之前一样,我们查看了stix.sty,但没有找到extra。返回文档:在第 2 页,我们确实找到了

还有三种包含额外杂项符号的字体,stix-extra1和,以 TFM 和 PFB 文件的形式提供stix-extra2stix-extra3但不受宏包支持。

这似乎是一个问题,但实际上并非如此。我们可以像以前一样继续,只需添加必要的基础设施即可

\DeclareFontFamily{U}{stixextrai}{}
\DeclareFontShape{U}{stixextrai}{m}{n}
 { <-> stix-extra1 }{}

\newcommand{\WolframSym}{{\usefont{U}{stixextrai}{m}{n}\symbol{132}}}

与之前相同的警告\DeclareRobustCommand适用。姓氏stixextrai是任意的。示例文档:

\documentclass{article}

\DeclareFontFamily{U}{stixextrai}{}
\DeclareFontShape{U}{stixextrai}{m}{n}
 { <-> stix-extra1 }{}

\newcommand{\WolframSym}{{\usefont{U}{stixextrai}{m}{n}\symbol{132}}}

\begin{document}
\WolframSym
\end{document}

这就是我制作上面的图像的方法。

答案2

\documentclass{article}
\newcommand\Writinghand{{\fontfamily{mvs}\fontencoding{U}\selectfont\char98}}
\begin{document}
\Writinghand 
\Huge \Writinghand
\end{document}

答案3

如果它是一个文本符号,\usefont只要您知道字体的特性(编码、系列名称等)和要使用的符号的插槽号,该命令就可以了。对于您的情况,ifsymmarvosym包之间似乎存在名称冲突(还有一个与mathabx,参见The Comprehensive LaTeX Symbol list,第 101 页)。因此,您可以这样使用新的命令名称:

\newcommand\mySun{\usefont{U}{mvs}{m}{n}\char192} 

或者,如果您想保留命令名称,您可以通过在序言中写入以下几行\Sun来覆盖该命令:ifsym

\usepackage[weather]{ifsym} 
\renewcommand\Sun{\usefont{U}{mvs}{m}{n}\char192}}%

答案4

在 中unicode-math有:[range=...]选项\setmathfont。这可让您随心所欲地混合和匹配来自任何 OpenType 字体的 Unicode 中的任何数学符号。

相关内容