「TeX文書のコンパイル」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
isari版を追加 |
||
| 1行目: | 1行目: | ||
<div>__TOC__</div> | |||
= 手石 版 = | |||
編集中のTeX文書を保存してコンパイルし、pdfで表示します。 | 編集中のTeX文書を保存してコンパイルし、pdfで表示します。 | ||
| 139行目: | 143行目: | ||
} | } | ||
</pre> | </pre> | ||
= isari 版 (2020/10) = | |||
手石さんの版を元に、TeX処理系と受け入れる拡張子、PDF表示ソフトをカスタムできるようにしました。オプションの値を変更してお好みの設定にしてください。 | |||
<source lang="javascript"> | |||
// タイプセット改.js | |||
// 2020/10/16 | |||
// ------------ オプション ------------ | |||
// 受け入れる拡張子 | |||
var exts = [ "tex", "bib", "txt" ]; | |||
// TeX処理系 | |||
// キーをポップアップメニューに表示したい文字列、値をシェルに渡す文字列として適宜追加・編集してください。各処理系にはパスが通っている必要があります。 | |||
var engines = { "pLaTeX": "ptex2pdf -l -ot -kanji=utf8", "upLaTeX": "ptex2pdf -u -l -ot", "LuaLaTeX": "lualatex", "XeLaTeX": "xelatex" }; | |||
// syncTeXオプション | |||
var synctex = "-synctex=1"; | |||
// シェルの表示オプション | |||
// 1にするとシェルのウィンドウが立ち上がり出力を表示、0にすると非表示になります。他にも10までの整数が指定できます。詳細は[https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc364421(v=msdn.10) WSHのドキュメント]を参照してください。 | |||
var windowStyle = 1 | |||
// PDFビューワー | |||
// 実行ファイルの場所をフルパス、バックスラッシュ2つ区切りで指定してください。必ず外側をシングル、内側をダブルのクオーテーションで囲みます。nullにすると規定のプログラムで開きます。 | |||
var pdfViewer = '"C:\\Program Files\\SumatraPDF\\SumatraPDF.exe"'; | |||
// ------------------------------------ | |||
// 拡張子のチェック | |||
var sary = document.Name.split( "." ); | |||
if ( ( sary.length <= 1 ) || ( exts.indexOf( sary.pop() ) == -1 ) ){ | |||
Alert( "TeX文書ではありません。" ); | |||
Quit(); | |||
} | |||
document.Save(); | |||
var filename = document.Name; | |||
var path = document.Path; | |||
var filepath = document.FullName; | |||
// 古いpdfファイルと補助ファイルの削除 | |||
var SFso = new ActiveXObject( "Scripting.FileSystemObject" ); | |||
var ary = new Array( "pdf", "aux", "dvi", "log", "TMP" ); | |||
for ( var i in ary ){ | |||
var file_delete = changeExt( filepath, ary[ i ] ); | |||
if ( SFso.FileExists( file_delete ) ){ SFso.DeleteFile( file_delete ) } | |||
} | |||
var menu = CreatePopupMenu(); | |||
var keys = Object.keys( engines ); | |||
keys.forEach( function( key, index ) { | |||
menu.Add( key, index ); | |||
} ); | |||
menu.Add( "キャンセル", 99 ); | |||
// マウスポインタの位置にポップアップを表示したければTrack( mePosMouse )に | |||
var r = menu.Track( 0 ); | |||
var key = "", engine = ""; | |||
if ( r <= keys.length ){ | |||
key = keys[r]; | |||
engine = engines[key]; | |||
}else if ( r == 99 ){ | |||
Quit(); | |||
}else{ | |||
Alert( "指定が正しくありません。" ); | |||
Quit(); | |||
} | |||
var typeset = engine + " " + synctex + " " + filename; | |||
var WshShell = new ActiveXObject( "WScript.Shell" ); | |||
WshShell.CurrentDirectory = path; | |||
WshShell.Run( typeset, windowStyle, true ); | |||
// pdfファイルを開く | |||
var pdfpath = changeExt( filepath, "pdf" ); | |||
var openpdf = pdfViewer ? pdfViewer + " " + pdfpath : pdfpath; | |||
var trymax = 3; | |||
for ( var tryCount = 0; tryCount < trymax; tryCount++){ | |||
if ( SFso.FileExists( pdfpath ) ){ | |||
WshShell.Run( openpdf ); | |||
break; | |||
}else{ | |||
Sleep( 500 ); | |||
} | |||
} | |||
if ( tryCount >= trymax ){ | |||
Alert( "pdfファイルが見つかりませんでした。" ); | |||
var log = changeExt( filepath, "log" ); | |||
if ( SFso.FileExists( log ) ){ | |||
editor.OpenFile( log, meOpenAllowNewWindow ); | |||
} | |||
}; | |||
SFso = null; | |||
WshShell = null; | |||
function changeExt( filename, ext ){ | |||
var s = filename.split( "\\" ); | |||
var f = s.pop().split( "." ); | |||
if ( f.length >= 2 ){ | |||
f.pop(); | |||
if ( ext.length > 0 ){ f.push( ext ) } | |||
}else{ | |||
if ( ext.length > 0 ){ f.push( ext ) } | |||
} | |||
s.push( f.join( "." ) ); | |||
return s.join( "\\" ); | |||
} | |||
</source> | |||
2020年10月16日 (金) 06:19時点における版
手石 版
編集中のTeX文書を保存してコンパイルし、pdfで表示します。
// タイプセット.js
// 2013/10/21
// platex と dvipdfmx はパスが通っている必要があります。
// 拡張子のチェック
var sary = document.Name.split( "." );
if ( ( sary.length <= 1 ) || ( sary.pop() != "tex" ) ){ Alert( ".texではありません。" ); Quit(); }
document.Save();
var pathdoc = document.FullName;
var jobname = changeExt( document.Name, "" );
// 最後にpdfファイルを開くタイミングを当該ファイルの有無で判断しているので、
// 古いpdfファイルは削除する。ついでにその他のファイルも……。
var SFso = new ActiveXObject( "Scripting.FileSystemObject" );
var ary = new Array( "pdf", "aux", "dvi", "log", "TMP" );
for ( var i in ary ){
var file_delete = changeExt( pathdoc, ary[ i ] );
if ( SFso.FileExists( file_delete ) ){ SFso.DeleteFile( file_delete ) }
}
var menu = CreatePopupMenu();
menu.Add( "A4縦置き", 41, meMenuChecked );
menu.Add( "A4横置き", 42, 0 );
menu.Add( "区切り", 0, meMenuSeparator );
menu.Add( "B5縦置き", 51, 0 );
menu.Add( "B5横置き", 52, 0 );
menu.Add( "区切り", 0, meMenuSeparator );
menu.Add( "キャンセル", 99, 0 );
//var r = menu.Track( mePosMouse )
var r = menu.Track( 0 );
var op_p = "";
var op_l = "";
switch ( r ){
case 41:
break;
case 42:
op_l = " -l";
break;
case 51:
op_p = " -p b5";
break;
case 52:
op_l = " -l";
op_p = " -p b5";
break;
case 99:
Quit();
default:
}
var stdout_log = changeExt( pathdoc, "TMP" );
var cmd_cd = 'cmd /c cd /d "' + document.Path + '"';
var cmd_p = 'platex -jobname="' + jobname + '" "' + pathdoc + '" >>"' + stdout_log + '" 2>&1';
var cmd_d = 'dvipdfmx -v' + op_l + op_p + ' "' + changeExt( pathdoc, "" ) + '" >>"' + stdout_log + '" 2>&1';
var cmd_echo1 = 'echo.>"' + stdout_log + '"';
var cmd_echo2 = 'echo.>>"' + stdout_log + '"';
var cmd_echo1line = 'echo ---------->"' + stdout_log + '"';
var cmd_echo2line = 'echo ---------->>"' + stdout_log + '"';
var cmd_ary = [
cmd_cd
, cmd_echo1line
, cmd_p
, cmd_echo2, cmd_echo2, cmd_echo2line
, cmd_d
]
var WshShell = new ActiveXObject( "WScript.Shell" );
var windowStyle = { HIDE: 0, NORMALFOCUS: 1 };
// 処理が終わるまで次へ進まないようブロック(第3引数を”true”)。
WshShell.Run( cmd_ary.join( " & " ), windowStyle.NORMALFOCUS, true );
// pdfファイルを関連付けで開く。
var pathpdf = changeExt( pathdoc, "pdf" );
var trymax = 3;
for ( var tryCount = 0; tryCount < trymax; tryCount++){
if ( SFso.FileExists( pathpdf ) ){
WshShell.Run( 'cmd /c "' + pathpdf + '"', windowStyle.NORMALFOCUS, false );
break;
}else{
Sleep( 500 );
}
}
if ( tryCount >= trymax ){
Alert( "pdfファイルが見つかりませんでした。" );
openFile( stdout_log );
};
SFso = null;
WshShell = null;
function openFile( fullname ){
var i = fileIndex( fullname );
if ( i == -1 ){
if ( fileExists( fullname ) ){
Editor.NewFile();
Editor.OpenFile( fullname );
}else{
Alert( ".TMPがみつかりません!" );
return -1;
}
}else{
Editor.Documents.Item( i ).Activate();
}
return i;
function fileIndex( fullname ){
for ( var i = Editor.Documents.Count-1; i>=0; i-- ){
if ( Editor.Documents.Item( i ).FullName == fullname ){ return i }
}
return -1;
}
}
function fileExists( filename ){
var objFso = new ActiveXObject( "Scripting.FileSystemObject" );
var result = objFso.FileExists( filename );
objFso = null;
return result;
}
function changeExt( filename, ext ){
var s = filename.split( "\\" );
var f = s.pop().split( "." );
if ( f.length >= 2 ){
f.pop();
if ( ext.length > 0 ){ f.push( ext ) }
}else{
if ( ext.length > 0 ){ f.push( ext ) }
}
s.push( f.join( "." ) );
return s.join( "\\" );
}
isari 版 (2020/10)
手石さんの版を元に、TeX処理系と受け入れる拡張子、PDF表示ソフトをカスタムできるようにしました。オプションの値を変更してお好みの設定にしてください。
// タイプセット改.js
// 2020/10/16
// ------------ オプション ------------
// 受け入れる拡張子
var exts = [ "tex", "bib", "txt" ];
// TeX処理系
// キーをポップアップメニューに表示したい文字列、値をシェルに渡す文字列として適宜追加・編集してください。各処理系にはパスが通っている必要があります。
var engines = { "pLaTeX": "ptex2pdf -l -ot -kanji=utf8", "upLaTeX": "ptex2pdf -u -l -ot", "LuaLaTeX": "lualatex", "XeLaTeX": "xelatex" };
// syncTeXオプション
var synctex = "-synctex=1";
// シェルの表示オプション
// 1にするとシェルのウィンドウが立ち上がり出力を表示、0にすると非表示になります。他にも10までの整数が指定できます。詳細は[https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc364421(v=msdn.10) WSHのドキュメント]を参照してください。
var windowStyle = 1
// PDFビューワー
// 実行ファイルの場所をフルパス、バックスラッシュ2つ区切りで指定してください。必ず外側をシングル、内側をダブルのクオーテーションで囲みます。nullにすると規定のプログラムで開きます。
var pdfViewer = '"C:\\Program Files\\SumatraPDF\\SumatraPDF.exe"';
// ------------------------------------
// 拡張子のチェック
var sary = document.Name.split( "." );
if ( ( sary.length <= 1 ) || ( exts.indexOf( sary.pop() ) == -1 ) ){
Alert( "TeX文書ではありません。" );
Quit();
}
document.Save();
var filename = document.Name;
var path = document.Path;
var filepath = document.FullName;
// 古いpdfファイルと補助ファイルの削除
var SFso = new ActiveXObject( "Scripting.FileSystemObject" );
var ary = new Array( "pdf", "aux", "dvi", "log", "TMP" );
for ( var i in ary ){
var file_delete = changeExt( filepath, ary[ i ] );
if ( SFso.FileExists( file_delete ) ){ SFso.DeleteFile( file_delete ) }
}
var menu = CreatePopupMenu();
var keys = Object.keys( engines );
keys.forEach( function( key, index ) {
menu.Add( key, index );
} );
menu.Add( "キャンセル", 99 );
// マウスポインタの位置にポップアップを表示したければTrack( mePosMouse )に
var r = menu.Track( 0 );
var key = "", engine = "";
if ( r <= keys.length ){
key = keys[r];
engine = engines[key];
}else if ( r == 99 ){
Quit();
}else{
Alert( "指定が正しくありません。" );
Quit();
}
var typeset = engine + " " + synctex + " " + filename;
var WshShell = new ActiveXObject( "WScript.Shell" );
WshShell.CurrentDirectory = path;
WshShell.Run( typeset, windowStyle, true );
// pdfファイルを開く
var pdfpath = changeExt( filepath, "pdf" );
var openpdf = pdfViewer ? pdfViewer + " " + pdfpath : pdfpath;
var trymax = 3;
for ( var tryCount = 0; tryCount < trymax; tryCount++){
if ( SFso.FileExists( pdfpath ) ){
WshShell.Run( openpdf );
break;
}else{
Sleep( 500 );
}
}
if ( tryCount >= trymax ){
Alert( "pdfファイルが見つかりませんでした。" );
var log = changeExt( filepath, "log" );
if ( SFso.FileExists( log ) ){
editor.OpenFile( log, meOpenAllowNewWindow );
}
};
SFso = null;
WshShell = null;
function changeExt( filename, ext ){
var s = filename.split( "\\" );
var f = s.pop().split( "." );
if ( f.length >= 2 ){
f.pop();
if ( ext.length > 0 ){ f.push( ext ) }
}else{
if ( ext.length > 0 ){ f.push( ext ) }
}
s.push( f.join( "." ) );
return s.join( "\\" );
}
スポンサーリンク