0

\qdb{123}私は、123を任意の数の任意の長さに一般化できる形式のコマンドのインスタンスを含むtexファイルを持っています。これらのステートメントを、より複雑なものに変換する必要があり\text1{123}\text2{123}ます。括弧内の数字は、新しい出力内で何度も使用されているという考え方です。

tex\newcommand関数の外部にメソッドが必要です(これは前処理ステップになります)。sedは適切なツールですか?もしそうなら、どのように?

4

2 に答える 2

1

簡単な解決策は次のようになります。

入力:

asldkfj aslfj ;aldfj \qdb{123} asdflk
% 
\qdb{452345} somecommand \texttt{asdf}

出力:

asldkfj aslfj ;aldfj \text1{123}\text2{123} asdflk
% 
\text1{452345}\text2{452345} somecommand \texttt{asdf}

実行することにより (コンソールへの出力、テスト用):

sed -e 's/\\qdb{\([0-9]*\)}/\\text1{\1}\\text2{\1}/g' test.txt

実行する (ファイルを直接変更する):

sed -i -e 's/\\qdb{\([0-9]*\)}/\\text1{\1}\\text2{\1}/g' test.txt

\\text1{\1}\\text2{\1}をニーズに合わせて調整します。\1一致した番号への後方参照です。

言うまでもありませんが、必ずバックアップを取ってください。

于 2012-10-14T18:36:36.217 に答える
0

Ruby が利用可能な場合、おそらく次のようになります。

prompt> irb
>> s = "lorem \\qdb{123} ipsum \\qdb{123} lorem"
=> "lorem \\qdb{123} ipsum \\qdb{123} lorem"
>> s.gsub /\\qdb\{(\d+)\}/m, '\text1{\1}\text2{\1}'
=> "lorem \\text1{123}\\text2{123} ipsum \\text1{123}\\text2{123} lorem"
>>

バックスラッシュには、追加のバックスラッシュ エスケープが必要です。

于 2012-10-14T18:41:14.943 に答える