我想将包含非 ASCII 字符的文本存储在 latex3 字符串变量中。使用 xelatex 和 lualatex 效果很好,但使用 pdflatex next mwe 会产生不正确的输出。由于遗留原因,在我正在进行的项目上切换到 xelatex 或 lualatex 并不容易,那么能否让 next mwe 正常工作?
梅威瑟:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\savestring}{mm}{%
\str_clear_new:c{g_mwe_#1_str}
\str_gset:cn{g_mwe_#1_str}{#2}
}
\NewDocumentCommand{\printstring}{m}{%
\str_use:c{g_mwe_#1_str}
}
\ExplSyntaxOff
\begin{document}
\savestring{umlaut}{hääyöaie}
Hääyöaie
\printstring{umlaut}
\end{document}
结果是:
答案1
字符串被“去标记化”:其中每个字符都有类别代码 12,除了空格有类别代码 10。
您可以重新扫描字符串:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\savestring}{mm}
{
\str_clear_new:c{g_mwe_#1_str}
\str_gset:cn{g_mwe_#1_str}{#2}
}
\NewDocumentCommand{\printstring}{m}
{
\tl_rescan:nv {} {g_mwe_#1_str}
}
\cs_generate_variant:Nn \tl_rescan:nn { nv }
\ExplSyntaxOff
\begin{document}
\savestring{umlaut}{hääyöaie}
Hääyöaie
\printstring{umlaut}
\end{document}
但您真正想要的是将标记保存在标记列表变量中。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\savestring}{mm}
{
\tl_clear_new:c {g_mwe_#1_tl}
\tl_gset:cn {g_mwe_#1_tl}{#2}
}
\NewDocumentCommand{\printstring}{m}
{
\tl_use:c {g_mwe_#1_tl}
}
\ExplSyntaxOff
\begin{document}
\savestring{umlaut}{hääyöaie}
Hääyöaie
\printstring{umlaut}
\end{document}