はじめに
先の記事 MATLAB Home サブスクリプション版の導入結果報告 で、永久版からサブスクリプション版への移行が無事に済んだことを報告しました。しかし、私にはまだ試練が待ち受けていました。上記の記事の最後に示したように、今までの R2019a では問題なく動作していたスクリプトなのに、R2026a では figure に不可解な表示崩れが起こるようになったのです。この原因を追究して解決しなければなりません。ところが、この慣らし運転の過程で、上記の問題以外にも、新バージョンへの不満が幾つも湧き出すことになってしまいました。
前回は、MathWorks からの回し者 か、MathWorks の太鼓持ち が書いたような推し記事になってしまいました。しかし、今回は容赦のない辛口な評価記事になります。MATLAB の発展を願うがゆえの愛の鞭です。
問題点
ここに挙げているものは、すべて figure に関連している問題ばかりです。
レイアウトの崩れ(望まない Position の変更)
図1と図2に、前記事と同じ画像を再掲します。図1は、弊 Qiita記事「【光学レンズの近軸近似】近似というのに、計算結果は精確そのもの」の 図11を print 出力する前の原 figure になります。今回は実際の画面サイズとして比較できるよう、図1と図2の横幅は相対関係を調整しています (PC 画面の拡大率によっては正しく再現できていないこともありそうですが)。
レイアウトが大幅に崩れていますが、原因は直ぐに分かりました。デフォルトの figure の Position が、バージョンによって異なるためです。( R2019a = [360 278 560 420]、R2026a = [242 118 795 479] )。サイズが 560×420 ピクセルから 795×479 ピクセルと、大きさだけでなくアスペクト比まで変わっています(モニタのサイズに応じて自動調整される部分もあるようなので、標準的に固定された数値ではないかもしれません)。しかし、この中に収められる axes の Position(normalized 値)には変更はありません。
私のスクリプトでは、標準サイズからの倍率によって好みのサイズを指定し、トリミングではピクセル単位を使って編集するという変則的なことをしていました。このために動作に齟齬が生じてしまったようです。
対策としては例えば下記のように、figure を生成した直後に、強制的に旧バージョンのサイズに合わせるための一行を追加すれば済みます。これを入れれば、旧バージョンの動作は変えずに、新バージョンでの表示の崩れが修正できます。
hf=figure(1);
hf.Position=[360 278 560 420]; % 旧バージョンのサイズに合わせ、dock からも外す
startup.m に次の記述を追加するという対策も良く見受けられます。しかし、本来の新バージョンの動作を期待しているユーザーにとっては受け入れ難いものでしょう。また、startup.m ではなく自分のスクリプトの中に追加した場合でも、その後に実行される無関係の他のスクリプトの動作にも影響を与えてしまいます。一旦 MATLAB をシャットダウンしてから再起動しなければ、default 設定の効果は消えません。したがって、下記よりも上記の対策のほうが無難です。
set(groot,'defaultFigurePosition',[360 278 560 420]); % 旧バージョンのサイズを指定
set(groot,'defaultFigureWindowStyle','normal'); % dock から外す
hf.Position=[360 278 560 420]; を追加したあとの R2026a による出力結果を次に示します。
ほぼ修正できていることは分かりました。しかし、新バージョンでの figure サイズの変更が何のために行われたのかは全く理解できません。時代の流れでモニタサイズが大きくなってきたといっても、figure のサイズまで大きくする必要はありません。複数の figure を並べて比較するには、むしろ従来のサイズの方が便利です。もしサイズを大きくしたい場合には、今まででもコマンドの操作によって自由にできていました。
MathWorks 社の「MATLAB R2025a の大幅アップデート — その理由と背景」には、
よく聞かれる質問のひとつが、「旧デスクトップに戻すことはできないの?」というものです。答えは 「できません」。旧デスクトップに戻す唯一の方法は、R2024b を使用することです。
とありますが、とんでもない捨て台詞に聞こえます。
目盛文字の弱々しさ
R2019a の図1と R2026a の図3を比べると、図3の目盛数値の文字が細すぎるのが不自然に目立ちます。無指定だった 'FontWeight' をわざわざ 'bold' に設定すればちょうど良い太さにはなります。しかし、なんと面倒なことか。
ただし、後述のように、この図を print コマンドによって画像ファイル化すると、無指定のままでも理想の太さで出力されます。
軸線の目立ちすぎ
同じく、図3の x,y 軸などの線が図1よりも太いのが気になります。文字は細すぎるのに線は太すぎるというチグハグな状態になっています。全く美しくありません。XAxis などの 'LineWidth' を指定することで、より太くすることはできますが、細い方向に変化させることはできません。
ところで、図1と図3を、print コマンドによって画像ファイル化したものを図4と図5に示します。有難いことに、目盛の文字や軸線の太さは、画像ファイル化された両図間では見分けがつかないほどに揃います。それにしても、画面表示と印刷結果はピッタリと一致し WYSIWYG となるのがアプリの基本です。MATLAB はその方向を指向する努力はしていないのでしょうか?
なぜか 図5の x軸目盛の「60」の位置がずれていますが、この程度のことには目を瞑りましょう。図3の拡大図枠の右肩にある少々目障りな「…」マークが図5では消えています。これは有難い心遣いです。
VerticalAlign のいい加減さ
図4と図5をじっくりと見比べると、左上の「No.113 ....」の文字列の上下位置がわずかに異なっています。「この程度の違いまで責めるのは、常識外れの異常人格」と思われそうですが、込み入った図を見やすくするうえでは軽視できない問題です。使用するバージョンによって、位置が勝手にズレてもらっては困るのです。実際の作業では、微細なステップでカット&トライして、長時間かけて位置決めしています。この努力を甘く見てもらっては困ります。
下図に VerticalAlign の様子を示します。左が R2019a、右が R2026a のものです。どちらのバージョンでも納得できる規則性は見られません。非常に困ります。
図4,5の VerticalAlign は無指定のままなので、デフォルトの 'middle' になっています。フォントの指定は「メイリオ」です。図5に 'baseline' を指定すると、図4の 'middle' と同位置になります。これは図6からも予想できる結果ですが、バージョンが変わるたびに手入れが必要になるとは困ったものです。
数式文字の改悪
これが今回の最大の不満です。
昔の弊 Qiita記事「【MATLAB の figure で使用可能な数式の確認】と【Qiita の数式との相性】」では次のようなことを呟いていました。ここからも分かるように、私が新バーシヨンに最も期待していたことは、書体 \boldsymbol ($\boldsymbol{ABCuvw}$)が使えるようになっているかどうかということでした。しかし、この期待は見事に裏切られました。そればかりではありません。全体の書体が、私が忌み嫌っている Microsoft Word 似のものに変わってしまったのです。最悪の事態で、許せない蛮行です。
私が、数式の相性という点で最も気になるのは、各表の1行1列目にある $ABCuvw$ の中の $v$ の文字です。使用ツールによっては、この文字が $\nu$ と見分けが付きにくい字体になっていることがあります(今では、以前よりは大分マシになっているようですが、Microsoft Word など)。この文字は、電圧や速度など多くの物理量を表すときに頻繁に使用されるので、フォントが揃っていないと気分が良くありません。
この点では、MATLAB と Qiita では $v$ の表示に殆ど差はなく、相性は良いといえます。現在の最大の難点は、MATLAB で\boldsymbolが使えないことでしょう。
なお、今回は MATLAB 本体の figure に絞った話だったので、上では触れませんでしたが、Simulink の「v」の字は私が嫌いな「$\nu$」 字風の書体です。なぜ、MATLAB と Simulink で書体が異なるのでしょうか?
図7と図8に、書体の改悪の様子が分かる例を示します。図7は R2019a によって生成されたもので、既述の 弊Qiita記事の 図1と全く同じものです。図8は同じスクリプトによって R2026a に生成させたものです。数式の書体が、柔らかくて親しみのあるものから、醜くて刺々しい形に変わっています。これでは、$i$ と $i'$ の見分けも困難です。他にも、R2019a では対応できていた \phantom コマンドが無視されたり、等号や演算記号の前後にある無駄なスペースを削除するための {=}, {+}, {-} のような記法も受け付けられず、間延びした形の式になっています。この記法は、図中に数式をコンパクトに収めるためには欠かせないものです。
これも気になる 文字と線の相対的な位置関係のズレについては「VerticalAlign のいい加減さ」によるものでしょうから、重ねての言及は避けておきます。
全てを調査した訳ではありませんが、他にも、連分数や総乗記号の表現などが改悪されています。詳細に調べれば、まだまだ問題は出てきそうです。
先に示した MathWorks 社の文書には、次のような記述もありました。
R2025a は、MATLAB デスクトップおよびグラフィックスシステムを Java から JavaScript と HTML に置き換えるという、大規模な再構築を行ったリリースです。
これを見て、MathJax の書式をそのまま使えるようにするための布石では? という淡い期待を抱いていたのですが、とんでもない思い違いでした。
おわりに
R2019a 以降、MATLAB が対応できるエンコードの種類が Shift-JIS から UTF-8 に変わったらしいことを聞いていたため、古いスクリプトのままでは文字化けするのではないかと心配していました。しかし、これについては何の問題も見られません。MATLAB がエンコードの種類を検出して、自動的に切り替えてくれているのでしょうか?(真相は不明です)。
さて、今回は悪いことばかり書きましたが、サブスクリプション版への切り替えで、憧れの Simscape Electrical も手に入ったし、R2026a では光学アプリも追加され、光学シミュレーションも簡単にできるようになったらしいので、一方でワクワク感も残っています。次の契約更新時期までには、私の不満(特に数式の表示)が解消されていることを期待しています。







