1

LaTeXに依存せずにTeXから画像をレンダリングするために使用するための適切なライブラリがC++で見つからなかったため、GIWSを使用することにしました。mimeTeX も試しましたが、自分のプロジェクトに十分なものを見つけることができませんでした (C++ では簡単に動作せず、レンダリングされた画像は良くなく、さらに .png ではなく .gif です)
これは私の Java コードです:

package clatex;

import java.io.IOException;
import org.scilab.forge.jlatexmath.TeXConstants;
import org.scilab.forge.jlatexmath.TeXFormula;
import org.scilab.forge.jlatexmath.TeXIcon;

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class CLatex {
    public CLatex(){

    }

    public int turn(int a) throws IOException{
        String math = "X+X";

        TeXFormula formule = new TeXFormula(math);
        TeXIcon ti = formule.createTeXIcon(TeXConstants.STYLE_DISPLAY, 40);
        BufferedImage b = new BufferedImage(ti.getIconWidth(), ti.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR);

        File outputfile = new File("saved.png");
        ImageIO.write(b, "png", outputfile);
        return 0;
    }
}`

このコードを要約すると、clatex というパッケージがあり、org.scilab.forge.jlatexmath を使用しています。メソッド int turn() は「saved.png」を作成し、コンストラクターは空です。このコードもテストしました。
これは CLatex.giws.xml です。

<?xml version="1.0" encoding="UTF-8"?>
<package name="CLatex">
  <object name="CLatex">
      <method name="turn" returnType="int">
        <param type="int" name="a" />
      </method>
  </object>
</package>

このコードは GIWS に関連しています。

GIWS はこのコードをレンダリングし、CLatex.cpp と CLatex.h を生成します。これは私のC++コードです:

#include "latex/CLatex.h"
#include <jni.h>
JavaVM* create_vm() {
    JavaVM* jvm; JNIEnv* env;

    JavaVMInitArgs args;
    JavaVMOption options[2];

    /* There is a new JNI_VERSION_1_4, but it doesn't add anything for the purposes of our example. */
    args.version = JNI_VERSION_1_4;

    args.nOptions = 2;
    options[0].optionString = "-Djava.class.path=.";

    options[1].optionString = "-Xcheck:jni";
    args.options = options;

    args.ignoreUnrecognized = JNI_FALSE;

    JNI_CreateJavaVM(&jvm, (void **)&env, &args);

    return jvm;
}

int main(){
    JavaVM* jvm = create_vm();

    CLatex::CLatex *test =
    new CLatex::CLatex(jvm);

    return test->turn(22);
}

このコードを使用すると、「プロセスはステータス 1 (0 分、0 秒) で終了しました」と表示されます。コンパイルされず、エラーが発生します。
コードのどの部分が間違っているのか、Java、XML、または C++ かわかりません (GIWS に何か問題があるのでしょうか?)。残念ながら私はJavaが苦手ですが、それを処理しようとしています。ご協力ありがとうございました。
注意として、C++ の GCC で Code::Blocks を使用します。Java 用の NetBeans は、Ubuntu Quantal Quetzal の下にあります。

4

2 に答える 2

1

git リポジトリでラッパーを JLaTeXMath使用して C++から呼び出す方法の例を追加しました: http://forge.scilab.org/index.php/p/jlatexmath/source/tree/master/examples/GIWSGIWS

于 2013-02-23T17:24:12.770 に答える
0

GIWS は C++ コードを生成します。そのため、CLatex.h を取得する方法がわかりません。

使用している GIWS のバージョンも教えてください。

最後に、デバッガを使用して何が起こっているかを確認する必要があります。

于 2013-02-20T22:52:34.267 に答える