【发布时间】:2013-07-21 13:21:04
【问题描述】:
我对 bash 脚本比较陌生,对 LaTeX 没有经验。我被要求开发一个脚本,将 LaTeX 文档中的便捷快捷方式替换为更繁琐的长格式等价物。
到目前为止,我的方法是将快捷方式和长格式隔离在单独的变量中,然后尝试使用 sed 在文本中替换它们。我在下面附上了简短的示例文件。
目前脚本有 2 个参数,一个是 expr 文件,它从中检索快捷方式和长格式术语,一个 infile 应该对其进行适当的更改。我知道该脚本正确隔离了快捷方式和长格式并可以返回它们,但它似乎无法执行 sed 命令。
我试过在网上搜索这个问题,发现了多个类似的问题,其中的建议是 sed 难以识别变量,并且各种类型的引用组合可能会解决问题。我尝试了许多排列,但似乎都没有。在许多情况下,长格式术语包含特殊字符,例如“$”和“{}”,所以我怀疑这可能是问题,但我不确定。我也非常愿意接受有关如何解决问题的其他想法。请在下面找到脚本和 2 个参数文件 expr 和 infile 的示例。
包含快捷方式和长格式的 expr 文件
% a
\newcommand{\ao}{$^{18}$O}
\newcommand{\aodso}{$^{18}$O/$^{16}$O}
% b
\newcommand{\bea}{\begin{equation}}
\newcommand{\beaa}{\begin{eqnarray}}
% c
\newcommand{\cthree}{C$_3$}
\newcommand{\cfour}{C$_4$}
\newcommand{\coz}{CO$_2$}
包含要被长格式替换的快捷方式的infile
This is my test {\ao}
{\aodso} my test is this
Does it work {\bea}
{\beaa} test test test
work work work {\cthree}
{\cfour} This is my test
my test is this {\coz}
以 expr 和 infile 作为参数调用的脚本的相关小节
while read line; do
if [[ $line == \newcommand* ]]; then
temp=${line#*\{}
sc=${temp%%\}*}
templf=${temp#*\{}
lf=${templf%\}}
#echo $sc, $lf
sed -i -e 's/${sc}/${lf}/g' ${infile}
fi
done < ${expr}
更新: 为了澄清起见,这就是期望的结果,infile 中的快捷方式将替换为适当的长格式
This is my test {$^{18}$O}
{$^{18}$O/$^{16}$O} my test is this
Does it work {\begin{equation}}
{\begin{eqnarray}} test test test
work work work {C$_3$}
{C$_4$} This is my test
my test is this {CO$_2$}
【问题讨论】:
-
您提供了两个输入文件。好的。现在添加想要的输出。更容易了解您的需求。
-
所需的输出是用 infile 中的长格式替换所有快捷方式,使其看起来像这样
code这是我的测试 {$^{18}$O} @ 987654327@{$^{18}$O/$^{16}$O} 我的测试是这样的code它是否有效 {\begin{equation}}code{\begin{eqnarray}} test test test @ 987654330@work work work {C$_3$}code{C$_4$} 这是我的测试code我的测试是这个{CO$_2$}
标签: bash sed latex variable-substitution