
짝수 개의 라틴 문자로 구성된 가변 크기 문자열을 생성해야 하며 각 쌍은 형식이 입니다 a\textrightarrow A;
. 각 쌍은 빈 공간(예: 1cm)으로 다른 쌍과 구분됩니다. 이를 위해 의 인수를 수정하기 위한 명령 \midarrow
과 사용을 \regex_replace
정의 합니다 .expl3
\midarrow
\midarrow
변환하고 싶어요
"a,A;b,B;c,C"를 "(a->A); (b->B); (c->C)"로
"a,A;b,B;c,C;d,D"를 "(a->A); (b->B); (c->C); (d->D)"로
위의 "->"는 다음에서 생성된 실제 화살표여야 합니다.
\textrightarrow
MWE는 다음과 같습니다.
\documentclass[a4paper,11pt]{article}
\usepackage{expl3,xparse}
\usepackage{textcomp}
\ExplSyntaxOn
\NewDocumentCommand{\midarrow}{m}
{
\tl_set:Nn \l_tmpa_tl { (#1) }
\regex_replace_all:nnN { , } { \textrightarrow } \l_tmpa_tl
\regex_replace_all:nnN { ; } { );\hspace{1cm}( } \l_tmpa_tl
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\midarrow{a,A;b,B;c,C}
\end{document}
그러나 결과적으로 쓰레기가 발생합니다. 결과가 \regex_replace_all
pdfLaTeX로 컴파일되어 원하는 출력을 생성해야 하는지 어떻게 확인합니까 ?
추신: 저는 latex3에 능숙하지 않습니다. 나는 이 사이트에서 찾은 코드를 내 목적에 맞게 재사용하고 수정했습니다.
답변1
대체 텍스트에서는 특별한 규칙을 따라야 합니다.
\c{cmd}
제어 순서를 나타내는 데 사용됩니다\cmd
.- 사용
\cB\{
하고\cE\}
표현하기비에긴과이자형nd 그룹 버팀대. - 카테고리 코드를 확인하려면 이외의 인쇄 가능한 모든 문자를 이스케이프하세요
a-zA-Z0-9
. 예를 들어\(
문자를 나타내는 데 사용(
하고(...)
캡처 그룹을 나타내는 데 사용합니다. (@frougon 님의 의견에 감사드립니다.)
따라서 귀하의 예는 다음과 같이 수정될 수 있습니다
\documentclass[a4paper,11pt]{article}
\usepackage{expl3,xparse}
\usepackage{textcomp}
\ExplSyntaxOn
\NewDocumentCommand{\midarrow}{m}
{
\tl_set:Nn \l_tmpa_tl { (#1) }
\regex_replace_all:nnN { \, } { \c{textrightarrow} } \l_tmpa_tl
\regex_replace_all:nnN { \; } { \)\; \c{hspace}\cB\{ 1cm \cE\} \( } \l_tmpa_tl
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\midarrow{a,A;b,B;c,C}
\end{document}
사용문서interface3.pdf
l3regex
, XXVII 부분은 도서관 에 대한 철저한 소개입니다 .
답변2
나는 \regex_replace:nnN
이 일에 사용하지 않을 것이다.
내 제안은 입력을 세미콜론으로 나누는 것입니다. 그런 다음 각 항목에 화살표에 대한 명령을 적용하고 마지막으로 항목 사이에 원하는 공간이 있는 시퀀스를 사용합니다.
화살표 만들기 기능은 쉼표로 구분된 두 개의 항목이 있다는 사실을 이용하므로 clist
.
\documentclass[a4paper,11pt]{article}
\usepackage{expl3,xparse}
\usepackage{textcomp}
\ExplSyntaxOn
\NewDocumentCommand{\midarrow}{m}
{
\seq_set_split:Nnn \l_magguu_arrows_in_seq { ; } { #1 }
\seq_set_map:NNn \l_magguu_arrows_out_seq \l_magguu_arrows_in_seq
{ \magguu_arrows_make:n { ##1 } }
\seq_use:Nn \l_magguu_arrows_out_seq { \hspace{1cm} }
}
\cs_new_protected:Nn \magguu_arrows_make:n
{
\clist_item:nn { #1 } { 1 }
\textrightarrow
\clist_item:nn { #1 } { 2 }
}
\ExplSyntaxOff
\begin{document}
\midarrow{a,A;b,B;c,C}
\end{document}
입력 \midarrow{a,A;b,B;c,C}
하거나
\midarrow{
a, A;
b, B;
c, C
}