解析 expl3 中的檔名時出現問題

解析 expl3 中的檔名時出現問題

我正在嘗試解析 expl3 中用戶給定路徑的文件擴展名。我已經獲得了文件擴展名,但無法將其與預期的文件擴展名進行比較。我的 MWE 是

\documentclass[]{article}
\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn
\ior_new:N \g_slo_input_stream_ior
\tl_new:N \l_slo_input_dir_tl
\tl_new:N \l_slo_input_base_tl
\tl_new:N \l_slo_input_ext_tl
\cs_generate_variant:Nn \tl_if_eq:nnTF { V }

\cs_new:Nn \slo_open_file:n {
    \file_parse_full_name:nNNN { #1 } \l_slo_input_dir_tl \l_slo_input_base_tl \l_slo_input_ext_tl

    \tl_if_eq:VnTF \l_slo_input_ext_tl { .abc } { 
        #1~is~.abc-file.
    } { 
        #1~is~\l_slo_input_ext_tl-file,~expected~.abc-file.
    }
}
\NewDocumentCommand { \abcfile } { m } { \slo_open_file:n { #1 } }
\ExplSyntaxOff

\begin{document}
    \abcfile{example.test} \par
    \abcfile{filename.abc}
\end{document}

產生

example.test is .test-file, expected .abc-file.
filename.abc is .abc-file, expected .abc-file.

當我期待的時候

example.test is .test-file, expected .abc-file.
filename.abc is .abc-file

據我了解,比較\tl_if_eq失敗。為什麼?

答案1

如文件所述,\file_parse_full_name:nNNN以字串形式提供「返回」值,而不是標記清單。也就是說,所有字元的類別代碼為 12(「其他」),條形空格為類別代碼 10(「空格」)。比較tl會檢查標記,因此這裡類別代碼很重要。您的文字「.abc」的類別代碼為 11(「字母」)abc,因此測試失敗。

大多數時候,當然在這裡,您可能最好使用基於字串的測試來檢查“文字”。這裡只看字元代碼,所以我們不用擔心類別代碼業務。

\cs_new_protected:Npn \slo_open_file:n #1
  {
    \file_parse_full_name:nNNN {#1}
      \l__slo_input_dir_tl
      \l__slo_input_base_tl
      \l__slo_input_ext_tl
    \str_if_eq:VnTF \l__slo_input_ext_tl { .abc }
      { #1 ~is~.abc~file. }
      { #1~is~\l__slo_input_ext_tl-file,~expected~.abc-file. }
  }

相關內容