格式化晶体学指数

格式化晶体学指数

我想在 LaTeX 中创建一个可以像这样使用的命令:

\zoneaxis{1 2 -3}
\zoneaxis{2 -1 -1 10}

并会产生如下结果:

$[1\,2\,\overline{3}]$
$[2\,\overline{1}\,\overline{1}\,10]$

也就是说,将三到四个数字放在括号中,将减号设为上划线,数字之间留有小空格。

看起来我必须进行逐个字符的解析,但我不知道在哪里寻找如何做到这一点。

类似的东西已经存在了吗?如果没有,我在哪里可以找到如何做到这一点?

答案1

磨坊主包可能就是您要找的。使排版米勒指数变得非常容易。

答案2

我建议使用 xstring,这使得解析更容易:

\documentclass{minimal}
\usepackage{xstring}
\makeatletter
\newcommand\zoneaxis[1]{%
    \begingroup
        \expandarg
        \def\remain@arg{#1 }%
        \ensuremath{[\zoneaxis@]}%
    \endgroup}

\newcommand\zoneaxis@{%
    \StrBefore\remain@arg\space[\current@arg]%
    \StrBehind\remain@arg\space[\remain@arg]%
    \IfBeginWith\current@arg-%
        {\overline{\expandafter\@gobble\current@arg}}%
        \current@arg
    \ifx\@empty\remain@arg\else
        \thinspace\expandafter\zoneaxis@
    \fi}
\makeatother
\begin{document}
$[2\,\overline{1}\,\overline{1}\,10]$

\zoneaxis{2 -1 -1 10}
\end{document}

相关内容