Другой вывод - при запуске mathtext в командной строке и при выполнении команды из Java-программы с использованием apache-commons-exec

Я пытаюсь запустить mathtext из Java-программы, используя apache-commons-exec. Проблема в том, что я получаю другой вывод, когда запускаю одну и ту же команду из Java-программы и когда я запускаю ее через оболочку. так что если в командной строке запустить 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:(

Может ли кто-нибудь помочь мне в решении проблемы? Я хочу получить точный вывод. Благодарю.

1 ответ

Решение

Я выяснил, где проблема была:

$ - это специальный символ для оболочки Unix, а не для Java. Так что даже если в командной строке ввод должен экранировать $ как:

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

внутри Java-программы мне не нужно экранировать '$' или ставить " (двойные кавычки) в начале и в конце. Я должен был поместить команду как:

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

Надеюсь, это кому-нибудь поможет:)

--Shankhoneer

Другие вопросы по тегам