「
TeX文書のコンパイル
」を編集中
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
== 手石 版 == 編集中のTeX文書を保存してコンパイルし、pdfで表示します。 <syntaxhighlight lang="javascript"> // タイプセット.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( "\\" ); } </syntaxhighlight> == Isari 版 == 手石さんの版を元に、TeX処理系と受け入れる拡張子、PDF表示ソフトをカスタムできるようにしました。オプションの値を変更してお好みの設定にしてください。手石版で指定できた用紙サイズなどはTeX側のクラスオプションで行うものとします。 === 更新履歴 === * 2020/10/16 ** 初版公開 * 2023/07/16 ** escキーでキャンセルができていなかったのと、キャンセルされても補助ファイルを削除してしまっていたのを修正。 === ソースコード === <syntaxhighlight lang="javascript"> #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>
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
編集を中止
編集の仕方
(新しいウィンドウで開きます)
スポンサーリンク
案内メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク