正确排版 Hermann-Mauguin 符号

正确排版 Hermann-Mauguin 符号

赫尔曼-莫甘符号用于定义三维空间群(又称晶体群)的命名方案。这些群及其名称的列表可以在这里找到这里。我想知道怎样正确排版这些名字。

从国际晶体学表(A卷)中呈现的名称来看,似乎第一个字母是以数学模式打印的,每个数字之间都有一点点空间,并且数字的大小与首字母完全相同。

如果我在数学模式下排版全名,间距会不正确,而且字母和其他符号的大小也会不同。如果我使用文本模式,情况也是一样,但还有一个问题,即如果在标题中使用名称,名称会以粗体显示。

排版 Hermann-Mauguin 符号的正确方法是什么?

答案1

这可能是一个起点:-表示下一位数字上方的上划线(多位数字应该用括号括起来),*表示将分母 m 应用于下一位数字的“分数”,i表示无穷大。

\documentclass{article}

\newcommand{\hmn}[1]{% Hermann-Maguin notation
  \ensuremath{\begingroup\setupHMN #1\endgroup}%
}

\newcommand{\setupHMN}{%
  \doHMN{-}{\HMNoverline}%
  \doHMN{*}{\HMNminverse}%
  \doHMN{i}{\infty}
}

\newcommand{\doHMN}[2]{%
  \begingroup\lccode`~=`#1
  \lowercase{\endgroup\let~}#2%
  \mathcode`#1="8000
}

\newcommand{\HMNminverse}[1]{\frac{#1}{m}}
\newcommand{\HMNoverline}[1]{\mkern1mu\overline{\mkern-1mu#1\mkern-1mu}\mkern1mu}

\begin{document}

\hmn{-6}\quad
\hmn{*4}\quad
\hmn{8mm}\quad
\hmn{im}\quad
\hmn{-3 *2}\quad
\hmn{-4 2 m}\quad
\hmn{*i m}\quad
\hmn{-3m-2-{10}}

\[
\hmn{-6}\quad
\hmn{*4}\quad
\hmn{8mm}\quad
\hmn{im}\quad
\hmn{-3 *2}\quad
\hmn{-4 2 m}\quad
\hmn{*i m}\quad
\hmn{-3m-2-{10}}
\]

\end{document}

在此处输入图片描述

第二步,在项目之间添加细小的空间

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\hmn}{m}
 {
  \ensuremath
   {
    \hermannmauguin_group:n { #1 }
   }
 }

\tl_new:N \l_hermannmauguin_input_tl
\tl_new:N \l_hermannmauguin_output_tl

\cs_new_protected:Nn \hermannmauguin_group:n
 {
  \tl_set:Nn \l_hermannmauguin_input_tl { #1 }
  \tl_clear:N \l_hermannmauguin_output_tl
  \tl_map_inline:Nn \l_hermannmauguin_input_tl
   {
    \__hermannmauguin_item:n { ##1 }
   }
  \! % kill the first \,
  \tl_use:N \l_hermannmauguin_output_tl
 }

\cs_new_protected:Nn \__hermannmauguin_item:n
 {
  \str_case:nnF { #1 }
   {
    {*}{ \__hermannmauguin_put:n { \__hermannmauguin_inverse:Nn } }
    {-}{ \__hermannmauguin_put:n { \__hermannmauguin_overline:Nn } }
    {i}{ \__hermannmauguin_put:n { \,\infty } }
   }
   { \__hermannmauguin_put:n { \, {#1} } }
 }

\cs_new_protected:Nn \__hermannmauguin_put:n
 {
  \tl_put_right:Nn \l_hermannmauguin_output_tl { #1 }
 }

\cs_new_protected:Nn \__hermannmauguin_overline:Nn
 {% #1 should be \,; #2 is the number to operate on
  #1 \mkern1mu\overline{\mkern-1mu#2\mkern-1mu}\mkern1mu
 }
\cs_new_protected:Nn \__hermannmauguin_inverse:Nn
 {% #1 should be \,; #2 is the number to operate on
  #1 \frac{ #2 } { m }
 }

\ExplSyntaxOff

\begin{document}

\hmn{-6}\quad
\hmn{*4}\quad
\hmn{8mm}\quad
\hmn{im}\quad
\hmn{-3 *2}\quad
\hmn{-4 2 m}\quad
\hmn{*i m}\quad
\hmn{-3m-2-{10}}

\[
\hmn{-6}\quad
\hmn{*4}\quad
\hmn{8mm}\quad
\hmn{im}\quad
\hmn{-3 *2}\quad
\hmn{-4 2 m}\quad
\hmn{*i m}\quad
\hmn{-3m-2-{10}}
\]

\end{document}

在标记列表上进行映射;项*-被带有两个参数的宏替换(一个参数来自\,以下项),而i\,\infty和类似数字(或带括号的数字组)替换。接下来传递列表。

在此处输入图片描述

相关内容