擴展 l3 變數以拆分它

擴展 l3 變數以拆分它

我需要擴展變數\pmbc_bounds_tl來拆分它。我嘗試過嘗試但exp_args沒有成功。我應該使用哪個版本exp_args

\documentclass{article}

\ExplSyntaxOn

\tl_new:N \pmbc_bounds_tl

\NewDocumentEnvironment{foo}{b}{
  \seq_set_split:Nnn \l_tmpa_seq { ; } { #1 }
%  \seq_show:N  \l_tmpa_seq
    
  \seq_pop_left:NNTF \l_tmpa_seq \pmbc_bounds_tl { } {
    BOUNDS ~ PB !
  }
%  \tl_show:N \pmbc_bounds_tl
  
% WHICH VERSION TO USE?
  \seq_set_split:Nnn \l_tmpb_seq { : } { \pmbc_bounds_tl }
  \seq_show:N  \l_tmpb_seq
}{}

\ExplSyntaxOff


\begin{document}

TEST.

\begin{foo}
    a = b : c ;
    d = e : f
\end{foo}

\end{document}

答案1

您想要存取Vtl 變數的值,但您還必須注意冒號的範圍\ExplSyntaxOn與正常設定中的範圍不同。

如果您想在冒號處分割儲存在 中的內容\l_pmbc_bounds_tl,那麼正確的方法是

\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl

請注意,大括號應該總是當參數類型為NorV時被省略每一個變數應在其名稱中聲明其範圍(lg或):是無效名稱。c\pmbc_bounds_tl

每個函數的n簽名中都可以有一個帶有V替換的變體n,在本例中我們\seq_set_split:Nnn在變體中使用 but \seq_set_split:NVV

此變體是預先定義的,但情況並非總是如此。如果 LaTeX 對未定義的變體猶豫不決,最好使用執行的標準方法

\cs_generate_variant:Nn

而不是嘗試使用某些\exp_args:...功能:程式碼將變得更加清晰,並且效能不會受到重大影響。

在這種情況下,從宏觀擴展的角度思考並不是正確的方法,因為它更像是“訪問價值”,而且這是通過宏觀擴展在內部實現的這一事實不應引起關注。

答案2

感謝前兩條評論,上面給出了解決方案。

\documentclass{article}

\ExplSyntaxOn

\tl_new:N \l_pmbc_bounds_tl

\NewDocumentEnvironment{foo}{b}{
  \seq_set_split:Nnn \l_tmpa_seq { ; } { #1 }
%  \seq_show:N  \l_tmpa_seq
    
  \seq_pop_left:NNTF \l_tmpa_seq \l_pmbc_bounds_tl { } {
    BOUNDS ~ PB !
  }
%  \tl_show:N \l_pmbc_bounds_tl

  \seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl
  \seq_show:N  \l_tmpb_seq
}{}

\ExplSyntaxOff


\begin{document}

TEST.

\begin{foo}
    a = b : c ;
    d = e : f
\end{foo}

\end{document}

相關內容