考虑一下代码
\documentclass{book}
\usepackage{amsthm,latexsym,amssymb,amsmath,verbatim}
\usepackage{gensymb}
%\usepackage{textcomp}
\begin{document}
\Huge
\noindent 45$\degree$ \\
45$^\circ$\\
%45\textdegree
\end{document}
产生输出
经检查,似乎45$\degree$
并45$^\circ$
产生完全相同的字形。
现在,如果我取消注释%\usepackage{textcomp}
上述%45\textdegree
代码并运行它,我会得到
请注意,45$\degree$
现在似乎渲染45\textdegree
;但45$^\circ$
似乎产生与以前相同的字形。
问题:还有其他符号可以textcomp
“胜过”gensymb
吗?有人能解释一下是什么原因造成的吗?也许,我可以如何覆盖它,以便如果我在序言中同时调用gensymb
和包并调用文档中的命令---我会得到通常产生的结果?textcomp
\degree
\degree
谢谢。
答案1
如果我编译
\documentclass{book}
\usepackage{gensymb}
\usepackage{textcomp}
\begin{document}
$45\degree$
$45^\circ$
45\textdegree
\end{document}
textcomp
使用 TeX Live 2012,在内核中包含之前,我得到
\textdegree
如果我注释掉 ,会出现错误\usepackage{textcomp}
。前两行的输出变为
因此的目标gensymb
是总是如果可能的话,一直使用较小的字形textcomp
。
它通过以下方式实现此目的:
\AtBeginDocument{%
\@ifpackageloaded{textcomp}
{\gns@setupmathcomp\gns@usetcsymbols}%
{\gns@usefakedsymbols}
[...]
}
不幸的是,该软件包尚未更新以跟上textcomp
内核的包含,因此\textdegree
即使textcomp
没有加载,它实际上也没有意识到可以使用。如果您加载它,则输出与作者预期的一致gensymb
。
我不确定你为什么认为textcomp
“王牌” gensymb
:这种行为是通缉。
说实话,我会避免加载gensymb
那些没有提供其他方式可用的东西。无论如何,你可以gensymb
通过以下方式缩短加载时间:
\documentclass{book}
\makeatletter
\DeclareSymbolFont{gns@font}{TS1}{\familydefault}{m}{n}
\ifx\mv@bold\@undefined\else
\SetSymbolFont{gns@font}{bold}{TS1}{\familydefault}{\bfdefault}{n}
\fi
\DeclareMathSymbol{\tccelsius}{\mathord}{gns@font}{137} % {'211}
\DeclareMathSymbol{\tcdegree}{\mathord}{gns@font}{176} % {'260}
\DeclareMathSymbol{\tcperthousand}{\mathord}{gns@font}{135} % {'207}
\DeclareMathSymbol{\tcmu}{\mathord}{gns@font}{181} % {'265}
\DeclareMathSymbol{\tcohm}{\mathord}{gns@font}{87} % {'127}
\DeclareRobustCommand{\degree}{%
\ifmmode\tcdegree\else\textdegree\fi}
\DeclareRobustCommand{\celsius}{%
\ifmmode\tccelsius\else\textcelsius\fi}
\DeclareRobustCommand{\perthousand}{%
\ifmmode\tcperthousand\else\textperthousand\fi}
\DeclareRobustCommand{\ohm}{\ifmmode\tcohm\else\textohm\fi}
\DeclareRobustCommand{\micro}{\ifmmode\tcmu\else\textmu\fi}
\makeatother
\begin{document}
$45\degree$
$45^\circ$
45\textdegree
\degree,\celsius,\perthousand,\ohm,\micro
\end{document}
如果你只是需要\degree
,那么浪费一个数学组是没有意义的:
\documentclass{book}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\degree}{}
{
\mode_if_math:TF
{
\text
{
\normalfont
\str_if_eq:vnT { math@version } { bold } { \bfseries }
\textdegree
}
}
{
\textdegree
}
}
\ExplSyntaxOff
\begin{document}
$45\degree$
$45^\circ$
45\textdegree
\boldmath $45\degree$
\end{document}
答案2
\usepackage{amsthm,latexsym,amssymb,amsmath,verbatim}
似乎不相关。- 根据https://ctan.org/pkg/textcomp, 这
textcomp
软件包已过时现在“部分LATEX 分布“。 - 下面改编的代码展示了(对我来说)预期的行为。
\documentclass{book}
%\usepackage{amsthm,latexsym,amssymb,amsmath,verbatim}
\usepackage{gensymb}
%\usepackage{textcomp}
\begin{document}
\Huge
\noindent 45$\degree$ \texttt{\textbackslash degree} (math mode)\\
45$^\circ$ \texttt{\textbackslash circ} (math mode)\\
45\textdegree\ \texttt{\textbackslash textdegree} (text mode)
\end{document}
PS:我使用 Overleaf 编译了此文件,设置如下。当我改用 pdfLaTeX 时,结果看起来会有些不同。