0

我正在尝试使用 apache-commons-exec 从 java 程序运行 mathtext。问题是当我从 java 程序运行相同的命令和通过 shell 运行它时,我得到不同的输出。所以如果在shell中像这样运行mathtext:

./mathtext test.png "\$\frac{{\left( {{p^2} - {q^2}} \right)}}{2}\$"

在外壳中,我得到了完美的 png,但是当我使用 apache-commons-exec 运行相同的东西时

Map map = new HashMap();    

        map.put("target", new File(trgtFileName));
        DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
        Executor exec = new DefaultExecutor();
        exec.setWorkingDirectory(/*I set the working directory where the mathtext is*/);
        CommandLine cl = new CommandLine("./mathtext"); 
        cl.addArgument("${target}");
        cl.addArgument(latex);
        cl.setSubstitutionMap(map);
//      Logger.log4j.info("command is:::"+cl.toString());
        ExecuteWatchdog watchdog = new ExecuteWatchdog(5000);
        exec.setWatchdog(watchdog);
        exec.execute(cl,EnvironmentUtils.getProcEnvironment(),resultHandler);
        resultHandler.waitFor();

我得到了图像,不是方程,而是原始的 TeX 字符串:(

有人可以帮我解决这个问题吗?我想得到确切的输出。谢谢。

4

1 回答 1

1

我发现问题出在哪里:

$ 是 unix shell 的特殊字符,而不是 java 的特殊字符。所以即使在命令行中输入需要转义 $ 像:

"\$\frac{{\left( {{p^2} - {q^2}} \right)}}{2}\$"

在Java程序中,我不需要转义'$'或在开头和结尾加上“(双引号)。我必须像这样输入命令:

$\frac{{\left( {{p^2} - {q^2}} \right)}}{2}$

希望这可以帮助某人:)

——香科内尔

于 2012-05-26T01:37:21.547 回答