LaTeX文書にスクリーンショット埋め込むとと、非常に汚い結果になります。これを解決しましたのでメモ代わりに書いておきます。
LaTeXは文書をきれいに作ってくれますが、画像を張り付ける場合に限っては上手くいかないことがあります。きれいに貼りつけることができるのはベクターグラフィックスと写真の類で、PNG画像などはかなり神経を使っても汚くなります。
そこであれこれ調べてみたのですが、結局のところ「スクリーンショットを撮影する前に拡大する」というあまり面白くない結果に落ち着きました。とはいえ、これでずいぶんきれいな文書を作ることができるようになります。
方法として二つ挙げておきます。いずれも
- Windowsの画面表示を拡大し
- スクリーンショットを撮る
方法です。画面を拡大すると作業性が落ちます。私はこの問題をVMwareを使って回避しています。作業環境は
- VMware Workstation 17
- Windows 11 ( ゲストOS )
- Windows 11 ( ホストOS。解像度はWQHD : 2560×1440 )
です。
仮想4kディスプレイを使う方法
これは仮想4kディスプレイに表示したゲストOSのデスクトップを200%表示モードで使う方法です。
設定としては単純で、ゲストOSであるWindowsで、ディスプレイを下の図のように4k解像度、200%表示とします。
こうするとゲストOSの表示サイズが私の物理ディスプレイのサイズを超えてしまいます。しかし、これはVMwareの「ゲストを拡大縮小」で解決可能です。
この機能を使えば、ゲストOSに対しては4kのディスプレイに描画させつつ、その描画結果を自分のウィンドウサイズに縮小することができます。
この方法でVMwareゲストのウインドウを最大化すると物理ディスプレイには4k画面が縮小されて表示されます。しかし、ゲストは200%拡大描画ですので、結局
「2Kディスプレイで作業している」
時と同じ画面が見えます。
作業体験は2kですのでアプリケーションの表示などの操作は比較的容易です。一方、表示はあくまで4kです。したがって、スクリーンショットをとると同じ範囲をキャプチャーしても通常の場合の倍のサイズで撮影されます。
この方法で撮影したスクリーンショットは通常の倍のサイズです。したがって、LaTeX文書に張り付けると実際には縮小されて表示されます。ですので、逆に拡大してもきれいに見えるというわけです。
実際には200%拡大でスクリーンショットをとっても印刷すると粗が見えます。また、画面に表示しても
「なんとなく粗があるな」
と分かってしまいます。
仮想8kディスプレイを使う方法
原理は4kの場合と同じです。ただし、私の手元ではデフォルトの状態ではゲストを8k表示できなかったため、作業が必要でした。作業は2段に分かれています。
- VMが提供する仮想ディスプレイの最大解像度を8kにする。
- ゲストのWindows11を8k表示可能にする。
仮想ディスプレイの最大解像度を8kにする方法は、VMwareの公式ドキュメントに従いました。
具体的にはVMのvmxファイルを編集して、以下のように値を設定します。
svga.maxWidth = "7680" svga.maxHeight = "4320" svga.vramSize = "268435456" svga.autodetect = "TRUE"
svga.maxWidthとsvga.maxHeightは画面サイズです。8kですので7680と4320に設定します。svga.vramSizeは「maxWidth*maxHeight*4」より大きな65536の倍数を設定します。8kの場合、134217728( =2^28 )でよいはずですが、VMwareを起動した際にいつの間にか268435456 (=2^29 )にされていました。
修正が終わったらVMwareを起動し、VMの設定画面からディスプレイサイズを調整します。8kにできるはずです。
次にゲストOSを起動しますが、そのままではWindowsの「システム>設定」で8kを選べません。そこで、ゲストOSの最大解像度を上げます。この方法も先の公式ページに解説されてるのですが、実際にはvmx_svgaキーがレジストリ中にないため、どうにもなりません。そこで、以下の情報を参考に最大解像度を変更しました。
作業は仮想マシン上のゲストOSで行います。
- VMware Toolsをゲストにインストールします。
- Windowsのレジストリエディタを開きます。
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{device id}\0000を探します。{device id}は環境ごとに変わります。
- 0000の中にvidPNSource0WidthとvidPNSource0Heightというキーを探し、それぞれの値を7680, 4320にします。
- ゲストOSを再起動します。
これでゲストOSを8kにすることができました。私の環境はGPUがGeForce 710と非力なためか、仮想4kの場合に比べてものすごくGUIが遅くなります。常用はしたくないが、スクリーンショットをとるときくらいなら…と言う感じです。
LaTeX文書の品質
拡大スナップショットによる文書の品質をチェックしてみました。いくつかの場合を比較しています。倍率はゲストOSの画面の描画設定です。
倍率 | コメント |
100%(拡大無し) | PDF文書を画面に表示させると粗く見える。文書の品質が落ちたと思うレベル。 |
200% | 100%より劇的に良い。画面でも印刷でもわずかに粗いなと感じる。技術文書のスクリーンショットとしては十分。 |
200%をimagemagickでさらに200%リサイズ | 画面でも印刷でもわずかに粗いなと感じる。ひょっとすると200%の時よりも劣化しているかもしれない。 |
200%をphotoshopでさらに200%リサイズ | 画面でも印刷でもわずかに粗いなと感じる。200%の時よりもまし。 |
400% | 画面では粗がわからない。印刷結果は出版物としても問題なく感じる。 |
結論としては
- 200%拡大表示のスクリーンショットは、フリーで配布する技術文書としては十分な品質になる。
- 400%拡大表示のスクリーンショットは、おそらく出版物としても十分な品質。
- 200%拡大表示のスクリーンショットを後から拡大しても、労力に見合った品質にはならない。
となりました。