我需要使用\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-extra2
,stix-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
只要您知道字体的特性(编码、系列名称等)和要使用的符号的插槽号,该命令就可以了。对于您的情况,ifsym
和marvosym
包之间似乎存在名称冲突(还有一个与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 中的任何数学符号。