我需要擴展變數\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
您想要存取V
tl 變數的值,但您還必須注意冒號的範圍\ExplSyntaxOn
與正常設定中的範圍不同。
如果您想在冒號處分割儲存在 中的內容\l_pmbc_bounds_tl
,那麼正確的方法是
\seq_set_split:NVV \l_tmpb_seq \c_colon_str \l_pmbc_bounds_tl
請注意,大括號應該總是當參數類型為N
orV
時被省略每一個變數應在其名稱中聲明其範圍(l
或g
或):是無效名稱。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}