「TeX文書のコンパイル」の版間の差分
ページの作成:「編集中のTeX文書を保存してコンパイルし、pdfで表示します。 <pre> // タイプセット.js // 2013/10/21 // platex と dvipdfmx はパスが通...」 |
SyntaxHighlightにcopyの追加 |
||
| (3人の利用者による、間の14版が非表示) | |||
| 1行目: | 1行目: | ||
== 手石 版 == | |||
編集中のTeX文書を保存してコンパイルし、pdfで表示します。 | 編集中のTeX文書を保存してコンパイルし、pdfで表示します。 | ||
< | <syntaxhighlight lang="javascript" copy> | ||
// タイプセット.js | // タイプセット.js | ||
// 2013 | // 2013-10-21 | ||
// platex と dvipdfmx はパスが通っている必要があります。 | // platex と dvipdfmx はパスが通っている必要があります。 | ||
| 14行目: | 15行目: | ||
var jobname = changeExt( document.Name, "" ); | var jobname = changeExt( document.Name, "" ); | ||
// | // 最後にpdfファイルを開くタイミングを当該ファイルの有無で判断しているので、 | ||
// | // 古いpdfファイルは削除する。ついでにその他のファイルも……。 | ||
var SFso = new ActiveXObject( "Scripting.FileSystemObject" ); | var SFso = new ActiveXObject( "Scripting.FileSystemObject" ); | ||
var ary = new Array( "pdf", "aux", "dvi", "log", "TMP" ); | var ary = new Array( "pdf", "aux", "dvi", "log", "TMP" ); | ||
| 28行目: | 29行目: | ||
menu.Add( "区切り", 0, meMenuSeparator ); | menu.Add( "区切り", 0, meMenuSeparator ); | ||
menu.Add( "B5縦置き", 51, 0 ); | menu.Add( "B5縦置き", 51, 0 ); | ||
menu.Add( " | menu.Add( "B5横置き", 52, 0 ); | ||
menu.Add( "区切り", 0, meMenuSeparator ); | menu.Add( "区切り", 0, meMenuSeparator ); | ||
menu.Add( "キャンセル", 99, 0 ); | menu.Add( "キャンセル", 99, 0 ); | ||
| 73行目: | 74行目: | ||
var WshShell = new ActiveXObject( "WScript.Shell" ); | var WshShell = new ActiveXObject( "WScript.Shell" ); | ||
var windowStyle = { HIDE: 0, NORMALFOCUS: 1 }; | var windowStyle = { HIDE: 0, NORMALFOCUS: 1 }; | ||
// | // 処理が終わるまで次へ進まないようブロック(第3引数を”true”)。 | ||
WshShell.Run( cmd_ary.join( " & " ), windowStyle.NORMALFOCUS, true ); | WshShell.Run( cmd_ary.join( " & " ), windowStyle.NORMALFOCUS, true ); | ||
| 138行目: | 139行目: | ||
return s.join( "\\" ); | return s.join( "\\" ); | ||
} | } | ||
</ | </syntaxhighlight> | ||
== isari 版 == | |||
手石さんの版を元に、TeX処理系と受け入れる拡張子、PDF表示ソフトをカスタムできるようにしました。オプションの値を変更してお好みの設定にしてください。手石版で指定できた用紙サイズなどはTeX側のクラスオプションで行うものとします。 | |||
=== 変更履歴 === | |||
* 1.0.1 (2023-07-16) | |||
** escキーでキャンセルができていなかったのと、キャンセルされても補助ファイルを削除してしまっていたのを修正 | |||
* 1.0.0 (2020-10-16) | |||
** 初版公開 | |||
=== ソースコード === | |||
<syntaxhighlight lang="javascript" copy> | |||
#title = "TeXコンパイル改" | |||
// 2020-10-16 - 2023-07-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までの整数が指定できます。詳細は[WSHのドキュメント](https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc364421(v=msdn.10))を参照してください。 | |||
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(); | |||
} | |||
var filename = document.Name; | |||
var path = document.Path; | |||
var filepath = document.FullName; | |||
var menu = CreatePopupMenu(); | |||
var keys = Object.keys( engines ); | |||
keys.forEach( function( key, index ) { | |||
menu.Add( key, index + 1 ); | |||
} ); | |||
menu.Add( "キャンセル", 0 ); | |||
// マウスポインタの位置にポップアップを表示したければTrack( mePosMouse )に | |||
var r = menu.Track( 0 ); | |||
var key = "", engine = ""; | |||
if ( r !== 0 && r <= keys.length ){ | |||
key = keys[r - 1]; | |||
engine = engines[key]; | |||
}else if ( r === 0 ){ | |||
Quit(); | |||
}else{ | |||
Alert( "指定が正しくありません。" ); | |||
Quit(); | |||
} | |||
// 手動で保存したければ次の行をコメントアウト | |||
document.Save(); | |||
// 古い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 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( "\\" ); | |||
} | |||
</syntaxhighlight> | |||
スポンサーリンク