SumatraPDFでプレビューしたい

SumatraPDFでプレビューしたい

- 藤井 深 の投稿
返信数: 0
皆様、こんにちは、いつもお世話になります。

1.TeXをタイプセット後自動的にSumatraPDFがpdfで表示され、結果に不満な場合に、再び、TeXに戻り、エディタで修正し、タイプセットし、という繰り返しを行いたいです。

2.エディタはMmEditorで、作者が、タイプセットマクロを作って下さいまして、TeX格納フォルダ内にpdfは生成されます。

3.MmEditorはC言語で記述され、タイプセットマクロも同じです。

4.作者は、タイプセットマクロ実行後自動的にpdfが生成されpdfに関連づけたpdfヴューアーが自動的に起動するようタイプセットマクロを設計したと仰います。

5.しかし、作者主張通りには、pdfヴューアーは自動的に起動しませんので、作者に、タイプセットマクロを修正して、pdfは、生成されますので、生成されたpdfを強制的にpdfヴューアーで表示するようにして頂きたいと申し出たのですが、断られました。

6.タイプセットマクロは以下の通りです。

相談に乗って頂けると幸いです。

2020年12月16日(水)午後8時54分2秒

────────────────────────────────────────────────

#define GENERIC_READ (0x80000000L)
#define OPEN_EXISTING 3
#define SW_SHOWNORMAL 1
main()
{
char *p, dir[300], fname[300], pfname[300], cfname[300], command[500];
HANDLE shFile, dhFile;
FILETIME sft, dft;
char *ptex2pdf = "ptex2pdf -l -od \"-f ptex-ipaex.map\"" ;
char *TexWorks = "TexWorks.exe";

Save();
GetFileName(fname);
p = Strrchr(fname, '.');
if(p == NULL || (Strcmpi(p+1, "tex") != 0 && Strcmpi(p+1, "dtx") != 0))
{
Message("このファイルの拡張子は tex ではありません。\n終了します。");
return;
}

strcpy(pfname, fname);
p = strrchr(pfname, '.');
if(p)
strcpy(p+1, "pdf");
else
strcat(pfname, ".pdf");

shFile = CreateFile(pfname, GENERIC_READ, 0,
(void*)NULL, OPEN_EXISTING, 0, (HANDLE)NULL);
if(shFile != -1) // pdf
{ // .pdf は存在
GetFileTime(shFile, (void*)NULL, (void*)NULL, &sft);
CloseHandle(shFile);
}

p = strrchr(fname, '\\');
strcpy(cfname, p+1);
*p = '\0';
GetCurDirectory(dir);
SetCurDirectory(fname);
sprintf(command, "%s %s", ptex2pdf, cfname);
WinExec2(command);
Sleep(2000); // 少し時間を置く
//Message(command);
dhFile = CreateFile(pfname, GENERIC_READ, 0,
(void*)NULL, OPEN_EXISTING, 0, (HANDLE)NULL);
if(dhFile != -1) // pdf
{ // .pdf は存在
GetFileTime(dhFile, (void*)NULL, (void*)NULL, &dft);
CloseHandle(dhFile);

if(CompareFileTime(&sft, &dft) < 0) // pdfが更新されているなら表示
ShellExecute(Handle(), "open", pfname, NULL, NULL, SW_SHOWNORMAL);
}
else // pdfの作成に失敗
Message("pdfの作成に失敗しました");
SetCurDirectory(dir);
}

────────────────────────────────────────────────