10

LaTeXで文字列の部分文字列を置き換える方法を探しています。私がやりたいのは、次のように呼び出すことができるコマンドを作成することです。

\replace{File,New}

そしてそれは次のようなものを生成します

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

これは単純な例ですが、ドキュメント内のどこにでも配置するのではなく、単一のコマンドに書式設定/構造を配置できるようにしたいと思います。ますます多くのパラメーターを受け取るいくつかのコマンドを作成できることは知っていますが、もっと簡単な方法があることを望んでいます。

明確にするために編集する

私は同等のものを探しています

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

任意の文字列を取り、部分文字列を別の部分文字列に置き換えることができるもの。

したがって、コマンドを\ replace {File}、\ replace {File、New}、\ replace {File、Options、User}などで呼び出し、単語を太字で折り返し、カンマを右矢印コマンドに置き換えることができます。 。「太字でラッピングする」ビットが難しすぎる場合でも(私が思うに)、交換部分だけが役に立ちます。

4

5 に答える 5

6

一般的なケースはかなりトリッキーですが(コンマを区切り文字として使用していない場合)、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}
于 2008-09-19T12:22:30.623 に答える
4

「スペース」の問題は、そのパッケージのバグに起因するようです。「\GetTokens」マクロをコンマなどで囲むと、そのマクロによって余分なスペースが挿入されることがわかります。

はい、tokenizer パッケージにバグがあります。私のブログで述べたように、バグ修正は "\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%
    }

このバグ修正を開発者のSascha Herpersに報告します

于 2011-02-25T18:31:02.037 に答える
3

xstringパッケージを試してください:

\usepackage{xstring}

[…]

\StrSubstitute{File,New}{,}{\(\rightarrow\)}
于 2009-06-09T18:54:48.520 に答える
2

トークンライザーと呼ばれる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}\\  
于 2008-09-19T10:45:33.657 に答える
-1

OK、この回答を撤回します。質問を明確にしていただきありがとうございます。


これはあなたが望むものではないかもしれませんが、とにかくここに行きます:

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

これがあなたが探しているものでない場合は、質問を明確にしていただけますか?

于 2008-09-18T19:20:46.097 に答える