カテゴリー別アーカイブ: 未分類

GitLabのwikiでMathjaxを利用する方法

こんにちは、Sayahamittです。

 

GithubのようなGitのリモートリポジトリサーバーを構築するためのアプリケーションの一つに、GitLabがあります。

これは非常によく出来ていて、使いやすいのですが、markdownで記述したページの中でmathjaxが使えるともっと良いですよね。 (デフォルトではできません。)

 

Google先生に聞くとこのページ( Integrate Mathjax with Gitlab ) がヒットし、この通りに設定すると確かにmathjaxが使えるようになります。

しかし、少なくとも GitLab version 8.15.2 ではハット記号 ” ^ ” をmarkdownファイル中に記述すると、それはmathjax中のlatexとしては認識されず、superscriptとしてレンダリングされてしまいます。

source

On CentOS 7.1

えねるぎぃは... $ E = mc^2 $ だよ

$$
\frac{\pi}{2} =
\left( \int_{0}^{\infty} \frac{\sin x}{\sqrt{x}} dx \right)^2 =
\sum_{k=0}^{\infty} \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
\prod_{k=1}^{\infty} \frac{4k^2}{4k^2 - 1}
$$

#### ハット記号なしの場合は上手くいきます。

$$
\partial_t \int_{\Omega} \mathbf{q} d \Omega =
\int_{\partial \Omega} \mathbf{f} (
\mathbf{q}) \cdot \mathbf{n}d \partial
\Omega - \int_{\Omega} hg \nabla z_b
$$


faild

ハット記号がsuperscriptとしてレンダリングされmathjaxのレンダリングを邪魔している

そこで、GitLab側でmarkdownレンダリングを行う際にsuperscriptを無効にする設定をする必要があります。
上の記事で紹介されている手順に加えて以下を行ってください。

 

手順

  • パスの読み替え
    上記事では/home以下にgitlabがあると書いてあるが、aptやyumでインストールした場合は/opt以下のrailsのディレクトリに格納される。Gitlab 8.12.3-ce を CentOS7 にyum でインストールした場合のパスは以下の通り。(Debian や Ubuntu でも同様の模様)
    /opt/gitlab/embedded/service/gitlab-rails
  • Integrate Mathjax with Gitlab に書いてある手順の実行
  • superscriptの無効化
    /opt/gitlab/embedded/service/gitlab-rails/lib/banzai/filter/markdown_filter.rb
    の 31 行目
    superscript:         true,

    superscript:         false,
    に書き換える。
  • シェルコマンドでGitLabの再起動
    $ sudo gitlab-ctl restart

以上でひとまずGitLabのwikiでmathjaxによる数式表示が可能になります。

 

また、Mathjaxの設定を行いたい場合は、app/views/layaout/_mathjax.haml.html の中に記述する JavaScript の即時関数の中でdocument.createElement()を利用して<script type=’text/x-mathjax-config’>エレメントを挿入します。

 

例えば、ブロック表示時に左寄せ&インデントを行い、インライン表示の記号を’$’にする設定を追加した _mathjax.haml.htmlは以下のようになります。

:javascript
  (function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = ('https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML');
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);

    var gb = document.createElement('script');
    gb.type = 'text/x-mathjax-config';
    gb.async = true;
    gb.text = ('MathJax.Hub.Config({displayAlign: "left", displayIndent: "2em", tex2jax: {inlineMath: [ [\'$\',\'$\'] ]} } )');
    var t = document.getElementsByTagName('script')[0]; t.parentNode.insertBefore(gb, t);
  })();

以上の設定を行うと、上で示したソースが以下のようにレンダリングされます。

success

 

これで、Gitlabのweb上で好きなようにMathjaxが使えるようになりました。めでたしめでたし。

 

追記
どうやらgitlabのページ読み込みの仕様で、webページ上のボタンをクリックして画面遷移するとmathjax.jsが読み込まれないようです。
ひとまずはページを再読込することでMathjaxが有効になりますが、現在解決策を模索中です。

【Samba】共有フォルダの中に特定のアカウントのみ変更可能なフォルダを作る

こんにちは、Sayahamittです。

CentOS7 と Samba4 を利用して研究室用のファイルサーバーを作ったのですが、ちょっと変なアクセス制御をやったのでメモメモφ(..)

やりたかったこと

研究室のファイルサーバーに、メンバー各々の個別フォルダが欲しい

そのフォルダの内容は所有者のみが変更でき、かつ、全員がすべてのフォルダの中身を閲覧出来るようにしたい。

さらには、個々人のフォルダは各ユーザー自身や、他のユーザーによって消去されないようにしたいわけです。

 

研究室で共有するファイルサーバーに個々人のプライバシーが高いレベルで確保される領域を作りたくなかったので、このような構成を試そうと考えました。

 

フォルダ構成
Personal	
  +--Bob
  |    +--fileA
  |
  +--Alice
       +--fileB

具体的には、上の囲みの中に示したような共有フォルダが有ったときに、

BobはfileAを削除できますが、fileBや、フォルダAlice、フォルダBobを削除できない。

AliceはfileBを削除できますが、fileAや、フォルダBob、フォルダAliceを削除できない。

という状態にしたいのです。

続きを読む

文字列終端でハマった

こんにちは、Sayahamittです。

TLに流れてきたAOJの問題を解答しようとしたらあらぬ勘違いで1時間くらいハマったので

戒めを込めて書きます。

解いたのは次の問題

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0006&lang=jp

20文字までの半角英数字の文字列入力に対して、文字の順序を反転させて出力せよ。

という簡単な問題です。 続きを読む

ブログ新設・移行

前のブログ http://roki0gjm.hateblo.jp/ を長らく放置していましたが、以前からやろうやろうと思っていたやってなかった独自ドメインとレンタルサーバによるHP/Blogに対するモチベーションが微増したので、思い立ったが吉日?と一気にサーバーレンタルからドメイン申請までやって開設しました。

 

また、新ブログ開設に伴ってTwitterアカウントも新しい物を用意してみたので(実際に運用するかどうかは気分次第かも) @roki0gjm をフォローして下さっている方は是非@sayahamittもフォローして頂けると幸いです。

 

WordPressを使うのは初めてだったのですが、隅々まで気を使おうとすると結構面倒ですね^^;

PHPもMySQLも全然触ったことが無かったので何をやるにも時間が掛かってしまいました。

落としてきたテーマのレイアウトに、パディングを詰めたりタイトル文字を大きくしたりといった手直しを加えるだけで3時間以上も掛かるとは…Chromeの要素解析に大変お世話になりましたww

 

さて当面の方針はというと、実は新しくこのブログを作ることを見込んで前のブログに書いてなかった出来事もあるので(言い訳)それらを書いたり、前の方から記事を移植したりしていく予定です。

それでは以後よろしくお願いします。