埃及数字(分数)

埃及数字(分数)

我正在尝试在使用 XeLaTex 编译的投影仪演示文稿中插入一些罗马数字和希腊数字(选择取决于我还必须插入一些埃及、巴比伦和玛雅数字)

我有一个问题:埃及分数和“加号和减号”可以在 XeLatex 中呈现吗?参见例如维基百科中的埃及数字如果是,怎么办?

我认为重新提出这个问题会很有用,因为我认为@yasper 的代码有点问题。它正确地呈现了除 1,000,000 之外的所有数字,而 1,000,000 被呈现为 1,100,000。由于@yasper 的回答很棒,我认为这个小错误值得纠正,并重新提出答案。

很抱歉,但我无法自己纠正这个错误,因为代码对我来说太复杂了。

提前谢谢您。

答案1

抱歉,我可能误读了您的问题,所以它没有准确回答您的问题。但是,关于如何插入埃及象形文字,您可以使用\char"00000并替换00000相关的 Unicode 代码点。\shortstack例如,您可以使用以下代码堆叠象形文字。

因此,为了排版负数的象形文字,您可以输入\char"130BB。对于四分之一,您可以写\shortstack{ \char"1308B \\ \char"133FD }。当然,您需要安装支持埃及象形文字的字体。


以下代码提供了一个宏,将整数(正数、负数和零)转换为埃及象形文字中的等值数字,最大为 9,999,999。

由于您对分数感兴趣,因此可以轻松扩展以支持分数(埃及象形文字书写系统仅支持单位分数,但有 ⅔ 和 ¾ 的特殊字形):

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Noto Sans Egyptian Hieroglyphs}

\ExplSyntaxOn
\int_new:N \l_egyptiannumeral_tempa_int
\int_new:N \l_egyptiannumeral_tempb_int
\int_new:N \l_egyptiannumeral_currentpower_int
\seq_new:N \l_egyptiannumeral_egyptiandigits_seq

\NewDocumentCommand { \egyptiannumeral } { m } {
    \int_set:Nn \l_egyptiannumeral_tempa_int { #1 }
    \int_compare:nNnT { \int_use:N \l_egyptiannumeral_tempa_int } = { 0 } { 
        \char"13124
    }
    \int_compare:nNnT { \int_use:N \l_egyptiannumeral_tempa_int } < { 0 } { 
        \char"130BB
        \int_set:Nn \l_egyptiannumeral_tempa_int { 
            #1 * -1
        }
    }
    \seq_clear:N \l_egyptiannumeral_egyptiandigits_seq
    \int_set:Nn \l_egyptiannumeral_currentpower_int { 0 }
    \int_do_until:nn { \l_egyptiannumeral_tempa_int <= 0 } {
        \int_set:Nn \l_egyptiannumeral_tempb_int { \int_mod:nn { \l_egyptiannumeral_tempa_int } { 10 } }
        \int_sub:Nn \l_egyptiannumeral_tempa_int { \l_egyptiannumeral_tempb_int } 
        \int_set:Nn \l_egyptiannumeral_tempa_int { \int_div_truncate:nn \l_egyptiannumeral_tempa_int { 10 } }
        \seq_put_left:Nx \l_egyptiannumeral_egyptiandigits_seq { \int_use:N \l_egyptiannumeral_tempb_int } 
        \int_incr:N \l_egyptiannumeral_currentpower_int
    }
    \seq_map_inline:Nn \l_egyptiannumeral_egyptiandigits_seq {
        \int_case:nn { \l_egyptiannumeral_currentpower_int } {
            { 1 } {
                \str_case:nn { ##1 } {
                    { 0 } {  }
                    { 1 } { \char"133FA }
                    { 2 } { \char"133FB }
                    { 3 } { \char"133FC }
                    { 4 } { \char"133FD }
                    { 5 } { \char"133FE }
                    { 6 } { \char"133FF }
                    { 7 } { \char"13400 }
                    { 8 } { \char"13401 }
                    { 9 } { \char"13402 }
                }
            }
            { 2 } {
                \str_case:nn { ##1 } {
                    { 0 } {  }
                    { 1 } { \char"13386 }
                    { 2 } { \char"13387 }
                    { 3 } { \char"13388 }
                    { 4 } { \char"13389 }
                    { 5 } { \char"1338A }
                    { 6 } { \char"1338B }
                    { 7 } { \char"1338C }
                    { 8 } { \char"1338D }
                    { 9 } { \char"1338E }
                }
            }
            { 3 } {
                \str_case:nn { ##1 } {
                    { 0 } {  }
                    { 1 } { \char"13362 }
                    { 2 } { \char"13363 }
                    { 3 } { \char"13364 }
                    { 4 } { \char"13365 }
                    { 5 } { \char"13366 }
                    { 6 } { \char"13367 }
                    { 7 } { \char"13368 }
                    { 8 } { \char"13369 }
                    { 9 } { \char"1336A }
                }
            }
            { 4 } {
                \str_case:nn { ##1 } {
                    { 0 } {  }
                    { 1 } { \char"131BC }
                    { 2 } { \char"131BD }
                    { 3 } { \char"131BE }
                    { 4 } { \char"131BF }
                    { 5 } { \char"131C0 }
                    { 6 } { \char"131C1 }
                    { 7 } { \char"131C2 }
                    { 8 } { \char"131C3 }
                    { 9 } { \char"131C4 }
                }
            }
            { 5 } {
                \str_case:nn { ##1 } {
                    { 0 } {  }
                    { 1 } { \char"130AD }
                    { 2 } { \char"130AE }
                    { 3 } { \char"130AF }
                    { 4 } { \char"130B0 }
                    { 5 } { \char"130B1 }
                    { 6 } { \char"130B2 }
                    { 7 } { \char"130B3 }
                    { 8 } { \char"130B4 }
                    { 9 } { \char"130B5 }
                }
            }
            { 6 } {
                \int_set:Nn \l_egyptiannumeral_tempa_int { ##1 } 
                \int_until_do:nn { \l_egyptiannumeral_tempa_int <= 0 } {
                    \char"13190
                    \int_decr:N \l_egyptiannumeral_tempa_int
                }
            }
            { 7 } {
                \int_set:Nn \l_egyptiannumeral_tempa_int { ##1 } 
                \int_until_do:nn { \l_egyptiannumeral_tempa_int <= 0 } {
                    \char"13068
                    \int_decr:N \l_egyptiannumeral_tempa_int
                }
            }
        }
        \int_decr:N \l_egyptiannumeral_currentpower_int
    }
}

\NewDocumentCommand { \egyptianfractiontwothirds } { } { \char"1308C }

\NewDocumentCommand { \egyptianfractionthreefourths } { } { \char"1308D }

\NewDocumentCommand { \egyptianfraction } { m } {
    \int_set:Nn \l_egyptiannumeral_tempa_int { #1 }
    \int_compare:nNnTF { \int_use:N \l_egyptiannumeral_tempa_int } = { 2 } { 
        \char"1341E
    } {
        \shortstack {
            \char"1308B \\
            \egyptiannumeral { #1 }
        }
    }
}
\ExplSyntaxOff


\begin{document}

\egyptiannumeral{0}

\egyptiannumeral{2020}

\egyptiannumeral{1234567}

\egyptiannumeral{-145}

\bigskip

\egyptianfraction{2} \quad \egyptianfraction{3} \quad \egyptianfraction{12}

\egyptianfractiontwothirds

\egyptianfractionthreefourths

\end{document}

在此处输入图片描述

相关内容