Rmdファイルの変換

Rmd(Rマークダウン)ファイルの変換メモ。

library(rmarkdown)
render("rm-sample.Rmd", "html_document") # HTMLレポート
render("rm-sample.Rmd", "pdf_document") # PDFレポート
render("rm-sample.Rmd", "word_document") # MS Wordレポート
render("rm-sample.Rmd", "revealjs_presentation", "rm-sample-reveal.html") # revealjs ウェブスライド
render("rm-sample.Rmd", "ioslides_presentation", "rm-sample-io2012.html") # io2012 ウェブスライド
render("rm-sample.Rmd", "beamer_presentation", "rm-sample-beamer.pdf") # beamer スライド

MathjaxにおけるLatexコマンドのテスト

$$\TeX$$


$$\TeX$$

$$\LaTeX$$

$$\LaTeX$$

$$
\begin{align}
(a+b)^2 &= (a+b)(a+b)          \tag{3.1c}      \\
        &= a^2 + ab + ba + b^2 \tag{$\dagger$} \\
        &= a^2 + 2ab + b^2     \tag{$\ast$}
\end{align}
$$

$$
\begin{align}
(a+b)^2 &= (a+b)(a+b) \tag{3.1c} \\
&= a^2 + ab + ba + b^2 \tag{$\dagger$} \\
&= a^2 + 2ab + b^2 \tag{$\ast$}
\end{align}
$$

Mathjax Latex のテスト

Mathjax Latex のインストールについては、下の参考リンクを見てください。
参考リンク:http://webshufu.com/mathjax-latex/

数式を表示するには、[mathjax]をロードする必要がありますので
数式の直前に[mathjax]を使指定してください。

[mathjax]
$$(三角形の面積)=\frac{(底辺)\times(高さ)}{2}$$

2つ目以降の式には、[mathjax]をロードする必要はありません。

【例1】

[mathjax]
$$(三角形の面積)=\frac{(底辺)\times(高さ)}{2}$$


$$(三角形の面積)=\frac{(底辺)\times(高さ)}{2}$$

【例2】

$$N=\frac{r(r+1)^{n} }{(r+1)^{n}-1}$$

$$N=\frac{r(r+1)^{n} }{(r+1)^{n}-1}$$

【例3】インライン表示

[latex]式[/latex] を使用すると、インライン表示 [latex]E=mc^2[/latex] も可能です。

[latex]式[/latex] を使用すると、インライン表示 \(E=mc^2\) も可能です。

Pukiwiki-1.5.1にSyntaxHighlighterを設定する

正式にはサポートされなくなった(?)のか
Pluginが消えてしまった。

仕方がないので、Pukiwiki-1.4.7で使用していたPluginを
そのまま使用してみた。

【導入手順】
(1) プラグイン sh.inc.phpをダウンロードし、解凍後、
Pukiwikiのpluginフォルダに配置してください。
(なお、このプラグインは、現在リンク切れになっているので、筆者のパソコンに設定してあったものです。
利用する場合は、自己責任でどうぞ)
(3) SyntaxHighlighterをダウンロードし、解凍します。
解凍したフォルダ内の「scripts」、「styles」の両フォルダを、pukiwiki フォルダ内の skin/sh フォルダにそのままコピーします。
(4) pukiwiki.ini.php の56行目付近を次のように変更します。

//define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 1); // 1 = Disabled この行をコメントアウトします
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0); // 1 = Disabled  この行を追加します

これで、ハイライト表示が可能になるが、見映えを改善するため
pukiwiki 内の、skin/sh/styles にある「shCore.css」に次の変更を加えます。

(1) 表示領域の右側に、無条件に縦スクロールバーが表示されるので
それを表示しないようにする

55行目付近

.syntaxhighlighter {
  width: 100% !important;
  margin: 1em 0 1em 0 !important;
  position: relative !important;
  overflow: auto !important;
  font-size: 1em !important;
  overflow-y: hidden !important;  /* この行を追加する */
}

(2) フォントスタイルを変更する

47行目付近

font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;

font-family: "Meiry UI",メイリオ,"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;

好みのフォントを追加する。

【使い方】

#sh(brush){{

ここにコードを配置する

}}

brush の種類は、こちら を見てください。

名前空間付きの要素にアクセスする

かつて、こんな投稿を公開している。

$(xml).find('ksjc\\:PrefCd').each(function(){

確かに、この方法はFirefoxでは正しい対処方法です。
全く未確認のまま公開したものではありません。

でも、Chromeでは未確認でした。
今日、これがChromeでは全く動かないことが分かりました。
今朝4時からず~っと悩み続けました。

結論
名前空間付き要素へのアクセス方法がブラウザ毎に異なる
Qiitaに、この違いが記載されています。

上記の例の場合は、次の通り書き換えます。

$(xml).find('ksjc\\:PrefCd, PrefCd').each(function(){

これで、FirefoxでもChromeでも動くようになります。
なお、find(‘ksjc\\:PrefCd, PrefCd’)は、‘ksjc\\:PrefCd’ または ‘PrefCd’ の意です。

<gml:Point gml:id="p1">
  <gml:pos>35.60733100 140.10638000</gml:pos>
</gml:Point>

この様な、xmlの属性 gml:id にアクセスする場合は

$(xml).find("Point").each(function(){
  gid = ($(this).attr("gml:id");

名前空間(gml)が必要ですので注意が要ります。

xamppへのXdebugのインストールと設定

諸般の都合でXdebugが必要になった。
インストールしようと、いろいろググってみると
大半の情報が、\xampp\php\extにxdebug.dllが存在し
php.iniにもその指定がコメントで記述してあること
を前提としたもの。
つい最近、phpを5.6.30にv-upした所為なのだろうか、
私の環境にはそれが無いし、
php.iniにもそのような記述がない。

とは言え、あちこち調べて朧げに分かったことは、
Xdebugのインストールとは、次の内容の作業ことを
言うらしいとのこと。
(1)Xdebugをダウンロードする。
(2)ダウンロードした dll を\xampp\php\extに配置する。
(3)php.ini にxdebug 情報を追記する。
(このことは、GitHubに端的に記述してありました。)

今回は、こちらから「PHP 5.6 VC11 TS (32 bit) 」をダウンロードしました。
xampp phpのv-upで、64bit版のインストールができなかったので
32bit版をダウンロードしています。

これを(2)にコピーして、php.iniの最下部に次の行を追加します。

[XDebug]
zend_extension = "c:\xampp\php\ext\php_xdebug-2.5.0-5.6-vc11.dll"
xdebug.remote_autostart = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "c:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_log="c:\xampp\tmp\xdebug.txt"
xdebug.remote_port = 9000
xdebug.trace_output_dir = "c:\xampp\tmp"
; 3600 (1 hour), 36000 = 10h
xdebug.remote_cookie_expire_time = 36000

なお、

zend_extension = "c:\xampp\php\ext\php_xdebug-2.5.0-5.6-vc11.dll"

の部分は、自分の環境やダウンロードしたXdebugに基づいて変更する
必要があります。

変更したphp.iniを保存後は、xamppコントロール・パネルから
Apacheを、stop→start としてphp.iniの変更を反映させます。

PHP loadHTMLFile に再びハマる

PHP DOM操作における文字化けで1回既にハマっていたのに、今回また同じ様にハマってしまった。
しかも、2日がかりで。
悔しいので、今回気付いた点を纏めておきたい。

(1)UTF-8Nで書いたソースは何にエンコードされるのか?

UTF-8(BOMあり)にエンコードされるようです。
試しに、sample.htmlをUTF-8(BOMあり)で保存して実行すると
文字化けをせず、正しく表示されます。

(2)loadHTMLFile()以外の場合は?

$sou = file_get_contents(./sample.html);
echo &sou;

として確認してみると、文字化けはしません。
と言うことは

$dom = new DOMDocument();  // ①
@$dom->loadHTML($sou);     // ②

②の中で、HTMLのmeta情報に基づいてコードが変換される
と言うことなのでしょう。

(3)php.iniとの関連は?

本件に関しては、、全く関連なしでした。
原因が(2)にあるので、当然と言えば当然です。
いろいろと、2日間ももがき苦しんだ中で、php.iniのmbstringの設定が
推奨されなく成っている所が何点かあるのが分かりました。

対策ついでに、PHP-5.4.7からPHP-5.6.30にバージョンアップも
行いましたが、php.iniのmbstringの設定を以下の通り変更しています。

名前 設定値 説明
mbstring.language Japanese コメントを外しただけです
mbstring.encoding_translation Off コメントを外しました

mbstring.http_input,mbstring.http_output,mbstring.internal_encoding
は、5.6.0以降は非推奨とのことなので、コメントのままにしてあります。

Scoutが動かない

標記のソフトをインスト-ルしようとするとエラーが発生する。
インストールに失敗したのかと思いきや、java.exe の位置が探せずに起動でき
ことが原因でした。
< /gecko >に対策が書いてあります。
大変お世話になり感謝申し上げます。

少々手間取った点をメモします。
(1) インストール(解凍したものをコピーしただけのよう見えますが)先の、
C:\Program Files (x86)\Scout\javascripts\app\フォルダ内にある process_interaction.js を開きます。
(2) 秀丸では、更新不可のメッセージが出るので、一旦別フォルダ(デスクトップなど)へコピーしてから開いた方が良いでしょう。
(3) < /gecko >さんのページでは95行目とありましたが、最新のものでは108行目を変更します。

function javaDir() {
  if(air.Capabilities.os.match(/Windows/)) {
    path = air.File.applicationDirectory.resolvePath("C:\\Program Files\\Java\\jre1.8.0_77\\bin\\java.exe");
    // (以下略)

以上です。
jreにバージョンが付いているけど大丈夫なのかな?
自分の環境変数が不安になってしまう・・・。
(追)
環境変数:C:\ProgramData\Oracle\Java\javapath
このフォルダ内に、java.exe へのシンボリックリンクが張られているので
v-up 時には、このリンクを張り替えているようですので心配は無用でした。

Google Map に Bootstrap を適用する

見映えの問題で、標記のことについて実施しているところですが
問題が発生しました。
例えば

<html lang="ja">
<head>
<meta charset="UTF-8">
<title>GoogleMap Test</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- GoogleMaps API -->
<script src="http://maps.google.com/maps/api/js?sensor=false&language=ja"></script>
<!-- jQuery -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<!-- Bootstrap -->
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<style>
  #map_canvas { height: 100% }
</style>
<script>
$(function(){
  var latlng = new google.maps.LatLng(35.66, 139.69);
  var options = {
    zoom: 15,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var map = new google.maps.Map($('#map_canvas').get(0), options);
});
</script>
</head>
<body>
  <div class="container-fluid">
    <div class="row">
      <div id="map_canvas"></div>
    </div>
  </div>
</body>
</html>

は、正しくMapが表示されます。
このソースの先頭に

<!DOCTYPE html>

を追加すると、途端に表示されなくなります。
色々調べて行くと、原因は行の高さにあるらしい。

<style>
  #map_canvas { height: 500px }
</style>

のように、明示的に高さを指定すると確かに表示されるようになります。
でも、これじゃBootstrapを使用する意味がないではないか!
と言うことで、再び「%」に戻すため「height %」でググり、cssの勉強し直し。
“height 100%” が有効になるためには、親要素全てが “height 100%” で
なけれならないとのこと。されば、

<style>
  html,body,body > div,body > div > div { height: 100%; }
  #map_canvas { height: 100%;}
</style>

としたところ、見事表示されました。
先ずは、目出度し目出度しと言いたいところだが
Bootstrapを使用すると、どうしてもコンテナの階層が深くなるので
これを適用するのが良いのか悪いのか?
悩ましい問題ではあります。

なお、指定をもっと簡単にしようと

<style>
  html,body,body div { height: 100%; }
  #map_canvas { height: 100%;}
</style>

等とすると、map_canvas 内に設定された要素(Google Map)にまで
影響が出るので、丁寧に map_canvas の親要素のみを指定する必要
があります。

オブジェクトの中身を簡単に確認する

他の方からの貴重な情報です。
(1) FireFox の場合

var person = {Name:"John", 
    Hobby:[{Hobby1:"Tennis"},{Hobby2:"Golf"}]};
console.log(person);

/* 結果
Object { Name: "John", Hobby: Array[2] }
*/

Array[2]の部分も表示するには、以下のようにします。

var person = {Name:"John", 
    Hobby:[{Hobby1:"Tennis"},{Hobby2:"Golf"}]};
console.log(person.toSource());

/* 結果
({Name:"John", Hobby:[{Hobby1:"Tennis"}, {Hobby2:"Golf"}]})
*/

なお、Chromeでは toSource() がないので、以下のようにするそうです。

var person = {Name:"John", 
    Hobby:[{Hobby1:"Tennis"},{Hobby2:"Golf"}]};
console.log(JSON.stringify(person));

以上です。