![参考](https://linux22.com/image/238130/%E5%8F%82%E8%80%83.png)
几乎无处不在的电动力学本科参考书,David Griffiths 所著的《电动力学导论》,大量使用了脚本 r 符号,其定义如下\vector{\scriptr} \equiv \vector{r} - \vector{r}^{\prime}
:
虽然如何在 LaTeX 中生成这样的符号是一个相当常见的问题,但我还没有找到令人满意的解决方案。我找到的最接近的解决方案来自包physymb
并使用 Calligra 字体:
遗憾的是,这个字没有粗体版本,而且比我想要的草书要多得多。因此我想知道是否有更好的仿制版本。
答案1
我想进一步讨论Mateen 的回答。首先,可以将 的选择限制calligra
为仅小写r
,其次,可以使用 PDF 文字实现粗体。所有这些都是使用虚拟字体完成的。因此,首先,我们创建虚拟字体,它只是 输出的精简版和调整版tftopl `kpsewhich callig15.tfm`
。特别是,字形的边界框被放大,字形向左移动了一点。最重要的是,我们添加了一些SPECIAL
语句来稍微平移字符,因为 Calligra 字体比 Griffiths 的字体更具草书性。
正常字体变体:griffm.vpl
(FAMILY GRIFF)
(CODINGSCHEME FONTSPECIFIC)
(DESIGNSIZE R 10.0)
(MAPFONT D 0 (FONTNAME callig15))
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.332987)
(STRETCH R 0.165994)
(SHRINK R 0.109996)
(XHEIGHT R 0.195992)
(QUAD R 0.798967)
)
(CHARACTER C r
(CHARWD R 0.23)
(CHARHT R 0.23)
(CHARDP R 0.0095)
(MAP
(SPECIAL pdf: q 1 0 -.5 1 0 0 cm)
(PUSH)
(MOVELEFT R 0.02)
(SELECTFONT D 0)
(SETCHAR C r)
(POP)
(SPECIAL pdf: Q)
)
)
在粗体字体变体中,我们SPECIAL
在字符周围添加了额外的说明,通过加粗轮廓笔画来使其变粗:griffb.vpl
(FAMILY GRIFF)
(CODINGSCHEME FONTSPECIFIC)
(DESIGNSIZE R 10.0)
(MAPFONT D 0 (FONTNAME callig15))
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.332987)
(STRETCH R 0.165994)
(SHRINK R 0.109996)
(XHEIGHT R 0.195992)
(QUAD R 0.798967)
)
(CHARACTER C r
(CHARWD R 0.23)
(CHARHT R 0.23)
(CHARDP R 0.0095)
(MAP
(SPECIAL pdf: q 1 0 -.5 1 0 0 cm 2 Tr 0.4 w)
(PUSH)
(MOVELEFT R 0.02)
(SELECTFONT D 0)
(SETCHAR C r)
(POP)
(SPECIAL pdf: 0 Tr 0 w Q)
)
)
这两个虚拟字体是使用
vptovf griffm.vpl
vptovf griffb.vpl
然后它们就可以在 LaTeX 文件中使用了。我们只需要输入正确的 NFSS 指令。为了轻松访问粗体变体,我使用了包bm
并定义了快捷方式\brcurs
(如 Griffiths)。
\documentclass{article}
\usepackage{bm}
\DeclareFontFamily{U}{griff}{}
\DeclareFontShape{U}{griff}{m}{n}{<-> s*[2.2] griffm}{}
\DeclareFontShape{U}{griff}{b}{n}{<-> s*[2.2] griffb}{}
\DeclareSymbolFont{griff}{U}{griff}{m}{n}
\SetSymbolFont{griff}{bold}{U}{griff}{b}{n}
\DeclareMathSymbol{\rcurs}{\mathalpha}{griff}{"72}
\DeclareBoldMathCommand{\brcurs}{\rcurs}
\newcommand*\hrcurs{\hat{\brcurs}}
\begin{document}
\[
\mathbf{E}(\mathbf{r}) = \frac{1}{4 \pi \epsilon_0} \int\limits_{\mathcal{V}} \frac{\rho(\mathbf{r}')}{\rcurs^2} \hrcurs d \tau'
\]
\end{document}
参考
- Donald Knuth,《虚拟字体:大巫师的更多乐趣》。《TUGboat》,第 11 卷(1990 年),第 1 期。https://tug.org/TUGboat/tb11-1/tb27knut.pdf
- 问:使数学符号变为斜体
- 问:如何创建虚拟字体?
- 问:LuaLaTeX 中的假粗体
- 在 LuaTeX 邮件列表中回答关于创建虚拟字体的问题
答案2
您可能希望查阅 David J. Griffiths 博士的网页:http://academic.reed.edu/physics/faculty/griffiths.html。
在页面底部,他提供了一个链接“在 TeX 中创建 script-r:”
编辑:字形后面的空白通常有点太多。如果要减少空白,可以使用这些宏来裁剪它,而不是使用 Griffiths 建议的宏:
\def\rcurs{{\mbox{$\resizebox{.09in}{.08in}{\includegraphics[trim= 1em 0 14em 0,clip]{ScriptR}}$}}}
\def\brcurs{{\mbox{$\resizebox{.09in}{.08in}{\includegraphics[trim= 1em 0 14em 0,clip]{BoldR}}$}}}
答案3
如果您愿意使用lualatex
和unicode-math
。至少您可以获得免费的脚本字体,XITS
或Asana
。它们都有脚本字体及其粗体版本。
rsfs
是免费的脚本字体。但似乎没有粗体版本。
无论如何,XITS
和中的字形Asana
并不完全符合您的要求。但如果您只想要粗体版本的脚本字体,而不是完全重现该书中的外观,它们应该可以工作。
\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{XITS Math}
\def\az{abcdefghijklmnopqrstuvwxyz}
\def\AZ{ABCDEFGHIJKLMNOPQRSTUVWXYZ}
\begin{document}
\begin{gather*}
\mathscr{\az} \\
\mathscr{\AZ} \\
\mathbfscr{\az} \\
\mathbfscr{\AZ}
\end{gather*}
\end{document}
答案4
Free Serif 中有一个脚本 r
但不幸的是它不能以粗体显示。您可以使用 XeLaTeX 编译以下scriptr.tex
文件(TeX Live 中包含免费 Serif)
\documentclass{standalone}
\usepackage{fontspec}
\setmainfont{Free Serif}
\begin{document}
\char"1D4C7
\end{document}
获取一个scriptr.pdf
文件,然后使用
\newcommand{\scriptr}{\includegraphics{scriptr}}
在您的文档中。可能需要进行一些转变。