我怎样才能将 \iow_now:Nx 与变音符号/unicode 一起使用?

我怎样才能将 \iow_now:Nx 与变音符号/unicode 一起使用?

我使用 进行了一些文件写入expl3,但也需要Nx版本,这与变音符号的使用相冲突。Nn版本可以正确处理变音符号,但不会扩展将其写入文件的标记列表。

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{csvsimple,xparse}

\ExplSyntaxOn

\iow_new:N \tobi_file_iow

\tl_const:Nn \c_tobi_something_tl { Something }

\AtBeginDocument {
   \iow_open:Nn \tobi_file_iow { \jobname-file.csv }
}

\AtEndDocument {
   \iow_close:N \tobi_file_iow
   \par\bigskip
   \csvautotabular { \jobname-file.csv }
}

\NewDocumentCommand { \writetofile } { m } {
%   \iow_now:Nn \tobi_file_iow { \c_tobi_something_tl , #1 }
   \iow_now:Nx \tobi_file_iow { \c_tobi_something_tl , #1 }
}

\ExplSyntaxOff

\begin{document}
Test \writetofile{Test}

Täst \writetofile{Täst}
Täst \writetofile{Südwand}
\end{document}

是否可以Nx正确使用变音符号?

答案1

我假设您正在使用 pdfTeX,否则您不会遇到 Unicode 问题。

有几个选项,取决于您到底想做什么。

如果你不想让争论扩大根本,然后您可以使用\exp_not:n {#1}来防止\write弄乱活动的 UTF-8 令牌:

\NewDocumentCommand { \writetofile } { m }
  { \iow_now:Nx \tobi_file_iow { \c_tobi_something_tl , \exp_not:n {#1} } }

但是如果你想扩展#1,如果其中有宏,那么你可以使用\text_expand:n

\NewDocumentCommand { \writetofile } { m }
  { \iow_now:Nx \tobi_file_iow { \c_tobi_something_tl , \text_expand:n {#1} } }

至于\c_tobi_something_tl,如果您希望它完全展开,请像以前一样使用它。如果您希望它展开到其内容,请使用\exp_not:V

\NewDocumentCommand { \writetofile } { m }
  { \iow_now:Nx \tobi_file_iow { \exp_not:V \c_tobi_something_tl , \text_expand:n {#1} } }

或者如果你想要完全扩展而又不破坏 Unicode,那么\text_expand:n再说一遍:

\NewDocumentCommand { \writetofile } { m }
  { \iow_now:Nx \tobi_file_iow { \text_expand:n { \c_tobi_something_tl } , \text_expand:n {#1} } }

相关内容