我有一个tex文件,其中包含\qdb{123}
形式的命令实例,其中123可以推广到任意长度的任意数量。我需要将这些语句转换为更复杂的语句:例如\text1{123}\text2{123}
。这个想法是括号内的数字在新输出中被多次使用。
我需要一个tex \newcommand
函数之外的方法(这将是一个预处理步骤)。是不是正确的工具,如果是,那么如何?
答案 0 :(得分: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
是对匹配数字的反向引用。
不用说:确保备份!
答案 1 :(得分:0)
如果红宝石可用,那么可能是这样的:
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"
>>
反斜杠需要额外的反斜杠转义。