문제

LaTeX에서 문자열의 하위 문자열 교체를 수행하는 방법을 찾고 있습니다.제가 하고 싶은 것은 다음과 같이 호출할 수 있는 명령을 작성하는 것입니다.

\replace{File,New}

그러면 다음과 같은 결과가 생성됩니다.

\textbf{File}$\rightarrow$\textbf{New}

이것은 간단한 예이지만 문서 전체에 서식을 지정하는 대신 단일 명령에 서식/구조를 지정할 수 있기를 바랍니다.점점 더 많은 수의 매개변수를 사용하는 여러 명령을 작성할 수 있다는 것을 알고 있지만 더 쉬운 방법이 있기를 바랍니다.

설명을 위해 편집

나는 동등한 것을 찾고 있습니다

string.replace(",", "$\rightarrow$)

임의의 문자열을 받아 하위 문자열을 다른 하위 문자열로 바꿀 수 있는 것입니다.

따라서 eplace{File}, eplace{File,New}, eplace{File,Options,User} 등을 사용하여 명령을 호출하고, 단어를 굵은 형식으로 묶고, 쉼표를 오른쪽 화살표 명령으로 바꿀 수 있습니다. ."굵게 표시" 부분이 너무 어렵더라도(내 생각에는 그럴 수 있음) 교체 부분만 있으면 도움이 될 것입니다.

도움이 되었습니까?

해결책

일반적인 경우는 좀 더 까다롭습니다(쉼표를 구분 기호로 사용하지 않는 경우). 하지만 제공한 예제는 LaTeX 내부에 대한 지식이 있으면 큰 문제 없이 코딩할 수 있습니다.

\documentclass[12pt]{article}
\makeatletter
\newcommand\formatnice[1]{%
  \let\@formatsep\@formatsepinit
  \@for\@ii:=#1\do{%
    \@formatsep
    \formatentry{\@ii}%
  }%
}
\def\@formatsepinit{\let\@formatsep\formatsep}
\makeatother
\newcommand\formatsep{,}
\newcommand\formatentry[1]{#1}
\begin{document}
\formatnice{abc,def}

\renewcommand\formatsep{\,$\rightarrow$\,}
\renewcommand\formatentry[1]{\textbf{#1}}
\formatnice{abc,def}
\end{document}

다른 팁

"공백" 문제는 해당 패키지의 버그로 인한 것 같습니다."\GetTokens" 매크로를 쉼표 등으로 묶으면 해당 매크로에 의해 추가 공간이 삽입되는 것을 볼 수 있습니다.

예, 토크나이저 패키지에 버그가 있습니다.내가 말했듯이 블로그, 버그 수정은 "\usepackage[trim]{tokenizer}" 대신 다음 수정 코드를 사용하는 것입니다.

\usepackage[trim]{tokenizer}  

\def\SH@GetTokens#1,#2\@empty{%
    \def\SH@token{#1}%
    \ifx\SH@trimtokens\SH@true% strip spaces if requested
        \TrimSpaces\SH@token%
    \fi%
    \SH@DefineCommand{\SH@FirstArgName}{\SH@token}%
    \SH@DefineCommand{\SH@SecondArgName}{#2}%
    }
\def\SH@CheckTokenSep#1,#2\@empty{%
    \def\SH@CTSArgTwo{#2}%
    \ifx\SH@CTSArgTwo\@empty%
        \edef\SH@TokenValid{\SH@false}%
    \else%
        \edef\SH@TokenValid{\SH@true}%
    \fi%
    }

이 버그 수정을 개발자에게 보고하겠습니다. 사샤 허퍼스

LaTeX 패키지가 있습니다. 토크나이저 당신이 원하는 것을 하는 데 도움이 될 수 있습니다.

여기에 당신이 원한다고 생각하는 것에 근접한 해킹(그러나 내부가 없는 순수 LaTeX)이 있습니다. 하지만 일부 관련 없는 공간이 있어 고칠 수 없었습니다.아마도 윌 로버트슨 더 조언해 주실 수 있나요?그의 약간 더 세련된 답변과 달리 나는 세부 사항을 매개 변수화하지 않았습니다. 다음은 다음과 같습니다.

\usepackage{forloop}  
\usepackage[trim]{tokenizer}  
...  
\newcounter{rrCount}  
\newcommand{\replace}[1]{%  
    \GetTokens{rrFirst}{rrRest}{#1,}%  
    \textbf{\rrFirst}%  
    \forloop{rrCount}{0}{\value{rrCount} < 100}{%  
        \ifthenelse{\equal{\rrRest}{}}{%  
            \setcounter{rrCount}{101}%  
        }{%  
            \GetTokens{rrFirst}{rrRest}{\rrRest}%  
            $\rightarrow$\textbf{\rrFirst}%  
        }%  
    }%  
}%  
% -----------------------------------------------------------------  
\replace{a1}\\  
\replace{a2,b2}\\  
\replace{a3,b3,c3}\\  

시도해 보세요 xstring 패키지:

\usepackage{xstring}

[…]

\StrSubstitute{File,New}{,}{\(\rightarrow\)}

좋아요, 이 답변을 취소합니다.질문을 명확히 해 주셔서 감사합니다.


나는 이것이 당신이 원하는 것이 아닐 수도 있다고 생각하지만 어쨌든 여기에 있습니다.

\newcommand{\replace}[2]{\textbf{#1}$\rightarrow$\textbf{#2}}  
\replace{File}{New}  

이것이 당신이 찾고 있는 것이 아니라면, 질문을 명확히 해주시겠습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top