Representação de número separado por vírgula alimentada no modo matemático látex de \sage{}

Representação de número separado por vírgula alimentada no modo matemático látex de \sage{}

Me deparei com outras questões de texto em que as pessoas perguntavam maneiras de representar números em formato separado por vírgula. Isso significa escrever 1234567 como 1.234.567. Preciso disso enquanto ensino adição/subtração para meu filho. Estou tentando gerar uma lista aleatória de problemas de adição que ficam mais difíceis a cada dia. Basicamente, quero executar o código e gerar, digamos, 30 dias de conjuntos de problemas diários, o que fica mais difícil à medida que avançamos. Embora eu possa ajustá-lo para meu filho em qualquer lugar, há outras crianças envolvidas e elas não terão a chance de me acessar. Então, isso cabe aos pais. Resumindo, aqui está o desafio que tenho:

As soluções fornecidas anteriormente para este problema têm dois problemas:

  1. Muitos não funcionam bem o suficiente no modo matemático!

  2. (e este é o meu problema principal) Eu gostaria de fazer algo assim (usando o pacote numprint como exemplo de falha): $\numprint{\sage{12454785*34}}$

Como você pode imaginar, isso não funciona quando \numprintse lê uma string e não é um bom presságio \sage{...}! Pensei em definir minha própria função sage e depois usá-la, \sagestr{}mas ela fornece uma solução temporária, pois mais tarde usarei o mesmo conjunto de arquivos para gerar algum conteúdo online que NÃO é um bom presságio \sagestr(outra história!).

Responder1

Apenas alguns pensamentos em vez de uma resposta:

  • Pessoalmente, eu evitaria o sábio. O LaTeX pode fazer cálculos por conta própria (pelo menos com o expl3).
  • Você não deve reinventar a roda. Em qualquer caso, você \numprintseria inferior ao siunitxde \num.
  • Atualização: Como Mico mencionou nos comentários abaixo da sua pergunta, você pode considerar adaptar uma das soluções deessa questão. Em combinação com meu trecho de código a seguir, a versão do egreg caberia.

Aqui está uma abordagem muito simples de uma \numberfromcalcmacro que espera apenas que alguma expressão numérica seja calculada e então imprime o resultado formatado, independentemente de você estar no modo matemático ou não.

\documentclass{article}

\usepackage{siunitx}

\ExplSyntaxOn
\NewDocumentCommand { \numberfromcalc } { m }
    {
        \int_set:Nn \l_tmpa_int { #1 }
        \num[group-separator={,}]{\int_use:N \l_tmpa_int}
    }
\ExplSyntaxOff

\begin{document}
    \noindent\numberfromcalc{12454785*34}\\
    $\numberfromcalc{12454785*34}$
\end{document}

números

Como você não postou nenhum código não vou tentar gerar algumas listas aleatórias aqui, mas também não seria tão difícil. Como eu disse, isso é apenas um começo.

Responder2

Uma das vantagens de usar o Sage é que ele é baseado em Python. Assim, você obtém muitas funcionalidades integradas sem códigos longos e difíceis de ler. Neste caso, altere os números para strings no Sage e insira as vírgulas antes de ir para o LaTeX.

\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
a = Integer(randint(1000,10000))
b = Integer(randint(1000,10000))
\end{sagesilent}
\noindent What's $\sagestr{"{0:12,.0f}".format(a)} \times \sagestr{"{0:12,.0f}".format(b)}$?\\
Answer: $\sagestr{"{0:12,.0f}".format(a*b)}$
\end{document}

A saída executada no CoCalc é semelhante a esta: insira a descrição da imagem aqui

As informações sobre o comando para criar as vírgulas sãoaqui.

informação relacionada