Latex3:Unicode(utf8)字符串,使用pdflatex输出奇怪的结果

Latex3:Unicode(utf8)字符串,使用pdflatex输出奇怪的结果

我想将包含非 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}

结果是:

mwe 的结果

答案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}

在此处输入图片描述

相关内容