정규식 교체 후 텍스트 컴파일

정규식 교체 후 텍스트 컴파일

짝수 개의 라틴 문자로 구성된 가변 크기 문자열을 생성해야 하며 각 쌍은 형식이 입니다 a\textrightarrow A;. 각 쌍은 빈 공간(예: 1cm)으로 다른 쌍과 구분됩니다. 이를 위해 의 인수를 수정하기 위한 명령 \midarrow과 사용을 \regex_replace정의 합니다 .expl3\midarrow

\midarrow변환하고 싶어요

  1. "a,A;b,B;c,C"를 "(a->A); (b->B); (c->C)"로

  2. "a,A;b,B;c,C;d,D"를 "(a->A); (b->B); (c->C); (d->D)"로

  3. 위의 "->"는 다음에서 생성된 실제 화살표여야 합니다.\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_allpdfLaTeX로 컴파일되어 원하는 출력을 생성해야 하는지 어떻게 확인합니까 ?

추신: 저는 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.pdfl3regex, 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
}

관련 정보