0

我有一个 tex 文件,其中包含形式命令的实例,\qdb{123}其中 123 可以概括为任意长度的任意数量。我需要将这些语句转换成更复杂的东西:比如\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 回答