Skip to content

Instantly share code, notes, and snippets.

@phck
Last active December 12, 2019 23:09
Show Gist options
  • Save phck/3dd9834a2a8e61dbc882ad981ba2b936 to your computer and use it in GitHub Desktop.
Save phck/3dd9834a2a8e61dbc882ad981ba2b936 to your computer and use it in GitHub Desktop.
% Slightly adapted from https://tex.stackexchange.com/a/197322
\documentclass{article}
\usepackage{amssymb}
\usepackage{xparse}
\input{random}
\ExplSyntaxOn
% alias \setrannum to an expl3 function
\cs_set_eq:NN \benutzer_set_rannum:Nnn \setrannum
\NewDocumentCommand{\newrandomcommand}{mm}
{% #1 is the macro name, #2 is the data
\cs_if_exist:cTF { #1 }
{
ERROR!
}
{
\benutzer_new_random_command:nn { #1 } { #2 }
}
}
\seq_new:N \l__benutzer_data_seq
\int_new:N \l__benutzer_random_int
\cs_new_protected:Npn \benutzer_new_random_command:nn #1 #2
{
\seq_set_split:Nnn \l__benutzer_data_seq { , } { #2 }
\seq_new:c { g_benutzer_#1_data_seq }
\benutzer_process_data:n { #1 }
\cs_new_protected:cpn { #1 }
{
\benutzer_set_rannum:Nnn \l__benutzer_random_int { 1 }
{ \seq_count:c { g_benutzer_#1_data_seq } }
\seq_item:cn { g_benutzer_#1_data_seq } { \l__benutzer_random_int }
}
}
\cs_new_protected:Npn \benutzer_process_data:n #1
{
\seq_map_inline:Nn \l__benutzer_data_seq
{
\__benutzer_process_item:nw { #1 } ##1 // \q_stop
}
}
\cs_new:Npn \__benutzer_process_item:nw #1 #2 / #3 / #4 \q_stop
{
\tl_if_blank:nTF { #3 }
{
\__benutzer_add_item:nnn { #1 } { #2 } { 1 }
}
{
\__benutzer_add_item:nnn { #1 } { #2 } { #3 }
}
}
\cs_new_protected:Npn \__benutzer_add_item:nnn #1 #2 #3
{
\prg_replicate:nn { #3 }
{
\seq_put_right:cn { g_benutzer_#1_data_seq } { #2 }
}
}
% this is just for testing
\NewDocumentCommand{\test}{mm}
{
\prg_replicate:nn { #2 } { #1\space }
}
\ExplSyntaxOff
\newrandomcommand{emptyness}{\varnothing, \emptyset, \mathchar"001F}
\newrandomcommand{emptier}{\varnothing/10, \emptyset/10, \mathchar"001F/10, \{\}}
\begin{document}
\raggedright
\test{$\emptyness$}{10000}
\test{$\emptier$}{10000}
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment