Guest User

Untitled

a guest
Jun 21st, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. MyCommand[
  2. opt1="this is val1",
  3. opt4="this is val4",
  4. optN="this is valN"
  5. ]{argument1}
  6.  
  7. MyCommand{
  8. arg1="this is val1",
  9. arg4="this is val4",
  10. argN="this is valN"
  11. }
  12.  
  13. documentclass{article}
  14.  
  15. usepackage{xparse}
  16.  
  17. ExplSyntaxOn
  18.  
  19. NewDocumentCommand kvargcommand { +m +m }
  20. {
  21. omnesia_kvargcommand:nn { #1 } { #2 }
  22. }
  23. cs_new_protected:Npn omnesia_kvargcommand:nn #1 #2
  24. {
  25. group_begin:
  26. keys_set:nn { omnesia / kvargcommand } { #1 }
  27. cs_set:Npn omnesia_action:nnnnnnnnn ##1 ##2 ##3 ##4 ##5 ##6 ##7 ##8 ##9 { #2 }
  28. cs_set:Npx __omnesia_tmp:w
  29. {
  30. exp_not:N omnesia_action:nnnnnnnnn
  31. { exp_not:V l_omnesia_arg_i_tl }
  32. { exp_not:V l_omnesia_arg_ii_tl }
  33. { exp_not:V l_omnesia_arg_iii_tl }
  34. { exp_not:V l_omnesia_arg_iv_tl }
  35. { exp_not:V l_omnesia_arg_v_tl }
  36. { exp_not:V l_omnesia_arg_vi_tl }
  37. { exp_not:V l_omnesia_arg_vii_tl }
  38. { exp_not:V l_omnesia_arg_viii_tl }
  39. { exp_not:V l_omnesia_arg_ix_tl }
  40. }
  41. __omnesia_tmp:w
  42. group_end:
  43. }
  44. keys_define:nn { omnesia / kvargcommand }
  45. {
  46. opt1 .tl_set:N = l_omnesia_arg_i_tl ,
  47. opt2 .tl_set:N = l_omnesia_arg_ii_tl ,
  48. opt3 .tl_set:N = l_omnesia_arg_iii_tl ,
  49. opt4 .tl_set:N = l_omnesia_arg_iv_tl ,
  50. opt5 .tl_set:N = l_omnesia_arg_v_tl ,
  51. opt6 .tl_set:N = l_omnesia_arg_vi_tl ,
  52. opt7 .tl_set:N = l_omnesia_arg_vii_tl ,
  53. opt8 .tl_set:N = l_omnesia_arg_viii_tl ,
  54. opt9 .tl_set:N = l_omnesia_arg_ix_tl ,
  55. }
  56.  
  57. ExplSyntaxOff
  58.  
  59. begin{document}
  60.  
  61. kvargcommand{
  62. opt1 = this is val1,
  63. opt4 = this is val4,
  64. opt7 = this is val7,
  65. opt6 = {this is val6, that contains a comma, so it has to be enclosed in braces},
  66. }
  67. {do something with one [#1] and four [#4] and seven [#7], the special case six [[#6]]
  68. and also some empty ones by default like (#2) and (#3)}
  69.  
  70. end{document}
Add Comment
Please, Sign In to add comment