我想用 替换参数的每一行,+
但我无法实现。可能是参数格式不对...
我错过了什么?
\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}