blefloch / latex-unravel

Watching TeX digest tokens
25 stars 1 forks source link

`\unless` became `\reverse_if:N` in action part #49

Closed muzimuzhi closed 9 months ago

muzimuzhi commented 3 years ago

Example

\documentclass{article}
\usepackage{unravel}

\begin{document}
\unravel{\unless\iftrue F\else T\fi}
\end{document}
||
|> \unless \iftrue F\else T\fi

[===== Step 1 =====] \unless = \unless
|| \reverse_if:N \iftrue
|> F\else T\fi

[===== Step 2 =====] \reverse_if:N \iftrue =false => skip to \else
||
|> T\fi

Version

PhelypeOleinik commented 3 years ago

This seems to do the trick:

\documentclass{article}
\usepackage{unravel}

\ExplSyntaxOn
\cs_gset_protected:Npn \__unravel_unless:
  {
    \gtl_set_eq:NN \l__unravel_tmpb_gtl \l__unravel_head_gtl % ADDED
    \__unravel_get_token:
    \int_compare:nNnTF
      \l__unravel_head_cmd_int = { \__unravel_tex_use:n { if_test } }
      {
        \token_if_eq_meaning:NNTF \l__unravel_head_token \tex_ifcase:D
          { \__unravel_unless_bad: }
          {
            \tl_put_left:Nx \l__unravel_head_tl % CHANGED
              { \gtl_head_do:NN \l__unravel_tmpb_gtl \exp_not:N } % CHANGED
            % \int_add:Nn \l__unravel_head_char_int { 32 }
            \__unravel_expand_nonmacro:
          }
      }
      { \__unravel_unless_bad: }
  }
\ExplSyntaxOff

\begin{document}
\unravel{\unless\iftrue F\else T\fi}
\end{document}