LaTeX3-正则表达式和换行符

LaTeX3-正则表达式和换行符

我想用 替换参数的每一行,+但我无法实现。可能是参数格式不对...

我错过了什么?

\documentclass{article}

\ExplSyntaxOn
    \str_new:N \l__crypto_code_str
    
    \NewDocumentCommand\cryptocode{m}{
        \str_set:Nn \l__crypto_code_str {#1}
        \regex_replace_all:nnN {\n} { + } \l__crypto_code_str
        \regex_replace_all:nnN {\s} { , } \l__crypto_code_str
        
        Result:
        \par
        \str_use:N \l__crypto_code_str
    }
\ExplSyntaxOff


\begin{document}

\cryptocode{X H C M O N O Y J F O C D L D
T Z L O B O T O Q L O T H Y F
O M W M C L F V S R V L R G I
V Y C Y P O D Y R D X M I E Z
E K O D V J D E C A B R A E O
J B N X L V P R I L V A C A A
A A E V V G J C I R A Q U Y D
W L J S P B B G L L Y B A N I
G L O F C P Z V S K O G E L F
A E C L E A T O V P U D J J K
T N H M R T B R R T I C Z A A
O A G V A F W A R R O F R P B
R I J S N B F O L E O Z G E J
T Q R W A U T E O L N I D R W
G B J L E Y C G E C O P M X J}

\end{document}

答案1

下面通过使用+v参数类型\NewDocumentCommand(多行逐字)来实现您想要的功能。这也使用\str_replace_all:Nnn而不是\regex_replace_all:nnN,因为前者速度更快,并且在这种情况下您根本不需要正则表达式。

\documentclass{article}

\ExplSyntaxOn
    \str_new:N \l__crypto_code_str
    
    \cs_new_protected:Npx \__cryptocode_process_string:
      {
        \str_replace_all:Nnn \exp_not:N \l__crypto_code_str { ~ } { , }
        \str_replace_all:Nnn \exp_not:N \l__crypto_code_str
          { \char_generate:nn { 13 } { 12 } } { + }
      }
    \NewDocumentCommand\cryptocode{+v}{
        \str_set:Nn \l__crypto_code_str {#1}
        \__cryptocode_process_string:
        \par
        Result:
        \par
        \str_use:N \l__crypto_code_str
    }
\ExplSyntaxOff


\begin{document}

\cryptocode{X H C M O N O Y J F O C D L D
T Z L O B O T O Q L O T H Y F
O M W M C L F V S R V L R G I
V Y C Y P O D Y R D X M I E Z
E K O D V J D E C A B R A E O
J B N X L V P R I L V A C A A
A A E V V G J C I R A Q U Y D
W L J S P B B G L L Y B A N I
G L O F C P Z V S K O G E L F
A E C L E A T O V P U D J J K
T N H M R T B R R T I C Z A A
O A G V A F W A R R O F R P B
R I J S N B F O L E O Z G E J
T Q R W A U T E O L N I D R W
G B J L E Y C G E C O P M X J}

\end{document}

相关内容