付け焼刃でTeXを解読

\makeatletter ~ \makeatother

名前に@を含むマクロ名を書く場合、上書きする場合はこれらで囲むお約束。

\def

マクロを定義する。TeXでは\def, LaTeXでは\newcommandを使う。

\@makechapterhead#1{ ~ }

章見出しのマクロ。#1は引数を1個取ることを示す。
ここでは見出しの文字列が引数として渡される。

\vbox to 15mm{ ~ }

垂直方向に要素を並べる箱。to 15mm は箱の高さを指定している。
無指定なら箱の高さは内容物の高さで決まる。

\kern0mm

間隔0mmで並べる。

\parindent

インデント幅。

\z@

ゼロを表す定数。(こんなんほとんど暗号やろ!)

  • \@ne:常に 1
  • \tw@:常に 2
  • \m@ne:常に -1
  • \z@:常に 0
\raggedright

右揃え。

\reset@font

通常のフォントに戻す。

\huge

フォントサイズを大きくする。
\tiny < \scriptsize < \footnotesize < \small < \normalsize
\normalsize < \large < \Large < \LARGE < \huge < \Huge

\bfseries

太字にする。

\ifnum \c@secnumdepth > \m@ne ~ \fi

整数を比較する条件文。
\c@secnumdepth は見出し番号をつける見出しレベルの深さ。
-1なら部まで、0なら章まで、1なら節まで、2なら小節まで…
\m@ne は -1を表す定数。

\vskip.5mm

垂直方向に0.5mm空白をあける。

\hrule

水平線を引く。

\begin{flushleft} ~ \end{flushleft}

\begin と \end で「環境」の範囲を示す。
flushleftとは、左寄せの「環境」である。

\leftskip=5mm

左余白を5mmに指定する。

\fontfamily{gt}

フォントファミリーにゴシック体を指定する。
明朝体なら\mc。

\fontsize{26Q}{29Q}

フォントサイズ26Q、行送り29Qを指定する。
Qは級数での指定。日本独特の単位であり、1Q=1/4mmである。

\selectfont

実際にフォントを選択する。

#1

1番目の引数。
ここでは見出しの文字列が渡される。

\par

段落。改行してインデントする。
ただの改行なら \newline

\vfill

垂直方向を最大限の空白で埋める。

\nobreak

ここでの改行の禁止。

Re:VIEW (LaTeX) でNotoフォントを埋め込む

前記事 Re:VIEW (LaTeX) でのフォント指定について - 滴了庵日録 の続きです。

やりたいこと

Re:VIEWのPDF出力でNotoフォントを埋め込みたい。(環境はUbuntu)

フォントの入手とインストール

Google Noto Fontsのサイトから Noto Sans CJK JP (ゴシック体)と Noto Serif CJK JP (明朝体)をダウンロードする。

適当な作業フォルダでzipを解凍し、フォントをインストールする。

unzip -n NotoSansCJKjp-hinted.zip
unzip -n NotoSerifCJKjp-hinted.zip
sudo mkdir /usr/share/fonts/opentype/noto
sudo mv *.otf /usr/share/fonts/opentype/noto/

/usr/share/fonts/に置くのはすこし行儀が悪い気もするが /usr/local/share/fonts/に置くとうまくいかなかった。

失敗談

前記事ではフォントマップの使い方を調査したが、Notoフォントを使うためのフォントマップを作成してみたもののよく分からないエラーが多発してうまくいかなかった。フォントを指定したいだけなのにこのあたりの仕組みが非常に難解である。

方針

フォントマップは使わず、sty/review-custom.sty で個別にフォントを指定する。

sty/review-custom.sty の編集

下記の設定を追記する。

% \usepackage[ipaex]{pxchfon}  ←フォントマップの指定はコメントアウト
\usepackage[noalphabet,unicode]{pxchfon}        % pxchfonパッケージを使用する ※
\setminchofont{NotoSerifCJKjp-Regular.otf}      % 明朝・デフォルト
\setlightminchofont{NotoSerifCJKjp-Light.otf}   % 明朝・細ウェイト
\setmediumminchofont{NotoSerifCJKjp-Medium.otf} % 明朝・中ウェイト
\setboldminchofont{NotoSerifCJKjp-Bold.otf}     % 明朝・太ウェイト
\setgothicfont{NotoSansCJKjp-Regular.otf}       % ゴシック・通常ウェイト
\setmediumgothicfont{NotoSansCJKjp-Medium.otf}  % ゴシック・中ウェイト
\setboldgothicfont{NotoSansCJKjp-Bold.otf}      % ゴシック・太ウェイト
\setxboldgothicfont{NotoSansCJKjp-Black.otf}    % ゴシック・極太ウェイト

※ pxchfonパッケージは和文フォントを指定する機能を提供する。noalphabet は欧文フォントは置き換えないオプション、unicodeUnicode直接指定のオプション。

成功!

これだけでNotoフォントの埋め込みに成功! フォントマップなんていらんかったんや!

BIZ UDフォントの場合

ちなみにBIZ UDゴシック/明朝を埋め込むなら下記のようにする。

% \usepackage[ipaex]{pxchfon}  ←フォントマップの指定はコメントアウト
\usepackage[noalphabet,unicode]{pxchfon}        % pxchfonパッケージを使用する
\setminchofont[0]{BIZ-UDMinchoM.ttc}
\setlightminchofont[0]{BIZ-UDMinchoM.ttc}
\setmediumminchofont[0]{BIZ-UDMinchoM.ttc}
\setboldminchofont[0]{BIZ-UDMinchoM.ttc}
\setgothicfont[0]{BIZ-UDGothicR.ttc}
\setmediumgothicfont[0]{BIZ-UDGothicB.ttc}
\setboldgothicfont[0]{BIZ-UDGothicB.ttc}
\setxboldgothicfont[0]{BIZ-UDGothicB.ttc}
  • フォントファイルは /usr/share/fonts/truetype/biz に置く。
  • TTC形式なので番号を指定。[0]が等幅フォントである。
  • 明朝体のウェイトは1種類のみ、ゴシック体のウェイトは2種類しかない。

Re:VIEW (LaTeX) でのフォント指定について

LaTeXでの和文フォント指定はHTML/CSSやWord等にくらべてすこぶる難解。

前提

フォントの指定 (埋め込み)

和文フォントは「フォントマップ」という複数のフォントの対応付けで指定する。
たとえばIPAexフォント(IPAex明朝・IPAexゴシック)なら ipaex と指定。

デフォルトのフォント指定

kanji-config-updmap-sysを実行して設定する。

$ sudo kanji-config-updmap-sys ipaex    # IPAexフォントを指定
$ kanji-config-updmap-sys status        # 現在のフォント指定を確認
CURRENT family for ja: ipaex
Standby family : ipa
$ sudo kanji-config-updmap-sys nofont   # フォント指定の解除
文書ごとのフォント指定

pxchfonパッケージを用いて指定する。
Re:VIEWの場合、sty/review-custom.sty で下記のように設定する。

\usepackage[ipaex]{pxchfon}

利用できるフォントマップ

kanji-config-updmap-sysで確認できる。
デフォルトで利用できるのはIPAフォントとIPAexフォントのみのようだ。

$ kanji-config-updmap-sys status
CURRENT family for ja: ipa
Standby family : ipaex

フォントマップファイルはどこに存在するか?

IPAexフォントのフォントマップファイルはptex-ipaex.map等のファイル名である。
これがどこに存在するか、下記のコマンドで検索する。
(私の環境では/mntにドライブがマウントされているので検索から除外している。)

$ sudo find / -type d -name mnt -prune -o -type f -name  ptex-ipaex.map
/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/ptex-fontmaps/ipaex/ptex-ipaex.map

このようにUbuntu環境ではTeX Live関連のファイルは /usr/share/texlive/ に置かれるようだ。

フォントマップファイルの書式

ptex-ipa.mapの内容を見てみる。

rml     H       ipam.ttf %!PS IPAMincho
rmlv    V       ipam.ttf %!PS IPAMincho
gbm     H       ipag.ttf %!PS IPAGothic
gbmv    V       ipag.ttf %!PS IPAGothic

見ての通り、横書きと縦書き用の明朝体およびゴシック体のフォントが指定されている。

フォントマップが参照するフォントファイルのパス

フォントマップが参照しているフォントは形式別に次の場所にある。

/usr/share/texlive/texmf-dist/fonts/truetype/ TrueTypeフォント
/usr/share/texlive/texmf-dist/fonts/opentype/ OpenTypeフォント

ただしここにあるのはシンボリックリンクであり、実体は別の場所にある。
たとえばIPAexフォントの場合、下記のように実体は/usr/share/fonts/opentype/にある。

$ ls -l /usr/share/texlive/texmf-dist/fonts/truetype/public/ipaex/
ipaexg.ttf -> ../../../../../../fonts/opentype/ipaexfont-gothic/ipaexg.ttf
ipaexm.ttf -> ../../../../../../fonts/opentype/ipaexfont-mincho/ipaexm.ttf
ipag.ttf -> ../../../../../../fonts/opentype/ipafont-gothic/ipag.ttf
ipagp.ttf -> ../../../../../../fonts/opentype/ipafont-gothic/ipagp.ttf
ipam.ttf -> ../../../../../../fonts/opentype/ipafont-mincho/ipam.ttf
ipamp.ttf -> ../../../../../../fonts/opentype/ipafont-mincho/ipamp.ttf

他のフォントマップファイル

では、IPAフォントとIPAexフォント以外にどのようなフォントマップファイルがあるか調べてみる。

$ ls -l /usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/ptex-fontmaps/
drwxr-xr-x 1 root root 512 Jan  8 21:24 adobe
drwxr-xr-x 1 root root 512 Jan  8 21:24 apple
drwxr-xr-x 1 root root 512 Jan  8 21:24 arphic
drwxr-xr-x 1 root root 512 Jan  8 21:24 baekmuk
drwxr-xr-x 1 root root 512 Jan  8 21:24 canon
drwxr-xr-x 1 root root 512 Jan  8 21:24 cjkunifonts
drwxr-xr-x 1 root root 512 Jan  8 21:24 cjkunifonts-ttf
drwxr-xr-x 1 root root 512 Jan  8 21:24 dynacomware
drwxr-xr-x 1 root root 512 Jan  8 21:24 fandol
drwxr-xr-x 1 root root 512 Jan  8 21:24 founder
drwxr-xr-x 1 root root 512 Jan  8 21:24 hiragino
drwxr-xr-x 1 root root 512 Jan  8 21:24 hiragino-elcapitan
drwxr-xr-x 1 root root 512 Jan  8 21:24 hiragino-elcapitan-pron
drwxr-xr-x 1 root root 512 Jan  8 21:24 hiragino-pron
drwxr-xr-x 1 root root 512 Jan  8 21:24 ipa
drwxr-xr-x 1 root root 512 Jan  8 21:24 ipaex
drwxr-xr-x 1 root root 512 Jan  8 21:24 kozuka
drwxr-xr-x 1 root root 512 Jan  8 21:24 kozuka-pr6
drwxr-xr-x 1 root root 512 Jan  8 21:24 kozuka-pr6n
drwxr-xr-x 1 root root 512 Jan  8 21:24 moga-mobo
drwxr-xr-x 1 root root 512 Jan  8 21:24 moga-mobo-ex
drwxr-xr-x 1 root root 512 Jan  8 21:24 morisawa
drwxr-xr-x 1 root root 512 Jan  8 21:24 morisawa-pr6n
drwxr-xr-x 1 root root 512 Jan  8 21:24 ms
drwxr-xr-x 1 root root 512 Jan  8 21:24 ms-osx
drwxr-xr-x 1 root root 512 Jan  8 21:24 ms-win10
drwxr-xr-x 1 root root 512 Jan  8 21:24 noEmbed
drwxr-xr-x 1 root root 512 Jan  8 21:24 solaris
drwxr-xr-x 1 root root 512 Jan  8 21:24 toppanbunkyu-sierra
drwxr-xr-x 1 root root 512 Jan  8 21:24 ume
drwxr-xr-x 1 root root 512 Jan  8 21:24 unfonts
drwxr-xr-x 1 root root 512 Jan  8 21:24 yu-osx
drwxr-xr-x 1 root root 512 Jan  8 21:24 yu-win
drwxr-xr-x 1 root root 512 Jan  8 21:24 yu-win10

このように多数のフォントマップファイルが存在する。たとえば、

ではなぜ利用できないかというと、かんじんのフォントファイル本体が存在しないからである。モリサワフォント持ってないのに使えるわけはない。

IPAexフォントの例と同様に、フォントファイルを用意してシンボリックリンクを作成すれば他のフォントマップも利用できる。ただし、当然のことながらフォントのライセンス条件は順守すること。ファイルを配置した後で、おまじないとして次のコマンドを実行する。

sudo mktexlsr

renesas_gr-peach.cfgの修正

症状

e2studioと最新版のOpenOCDでGR-PEACHデバッグを実行すると、renesas_gr-peach.cfgでエラーが発生する。

f:id:licheng:20200203201402p:plain

最新版のOpenOCDのインストール

最新版のOpenOCDはパッケージ管理のためにNode.jsが必要となる。
詳しくはこちらを参照。

下記コマンドでインストールできる。

xpm install --global @gnu-mcu-eclipse/openocd

インストール先は、

C:/Users/ユーザー名/AppData/Roaming/xPacks/@xpack-dev-tools/openocd/バージョン

renesas_gr-peach.cfgの修正

11行目

target create $_TARGETNAME cortex_a -chain-position $_TARGETNAME

 ↓

dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
target create $_TARGETNAME cortex_a -dap $_CHIPNAME.dap

GR-PEACHのデバッグ環境構築 (Windows)

前提

  • プラットフォームはWindows10
  • 最新のe2studio (バージョン7以降) でGR-PEACHのビルド環境が構築ずみであること
  • Lチカのプロジェクトがビルドできて、GR-PEACHでの実行が確認できていること

OpenOCDのセットアップ

シリアルポートドライバをインストール

下記サイトからMbedのWindows用シリアルポートドライバをダウンロードしてインストールする。
Windows serial configuration - Handbook | Mbed

OpenOCDのインストール

下記サイトからOpenOCDをインストールする。
Releases · ilg-archived/openocd · GitHub

※ 最新版ではe2studioでのデバッグ開始時にエラーが発生する。
 これについては調査中。とりあえず、v0.10.0-5-20171110 を使用する。
 Release GNU MCU Eclipse OpenOCD v0.10.0-5-20171110
  gnu-mcu-eclipse-openocd-0.10.0-5-20171110-1117-win32-setup.exe

【2020/02/04 追記】
解決しました。下記を参照してください。
renesas_gr-peach.cfgの修正 - 滴了庵日録

OpenOCDの設定ファイルのコピー

renesas_gr-peach.cfgをダウンロードし、
前述のOpenOCDのフォルダの下の scripts/board フォルダにコピーする。

e2studioにOpenOCDのパスを設定

e2studioを起動し、「ウィンドウ」→「設定」で設定画面を開き、
MCU」→「Global OpenOCD Path」で、

  • 「Executable」に openocd.exe を設定。
  • 「Folder」に、OpenOCDのフォルダの下の bin フォルダを設定。

プロジェクトの設定

デバッグの構成

e2stuioでGR-PEACHのプロジェクトを選択し、「実行」→「デバッグの構成」でデバッグ構成の画面を開き、
GDB OpenOCD Debugging」→「プロジェクト名 ビルド構成名」を選択する。
無い場合は「GDB OpenOCD Debugging」で右クリックし、「新規」で作成する。

「メイン」タブ
「プロジェクト名」が正しく、「C/C++アプリケーション」に正しくelfファイルの場所が設定されていることを確認する。

「Debugger」タブ
OpenOCDのパスが正しく設定されていることを確認する。
また、「Config options」に「-f board/renesas_gr-peach.cfg」と設定する。

「Startup」タブ
「Initial Reset」と「Enable ARM semihosting」のチェックを外す。
「Load executable」のチェックを外す。

「ソース」「共通」「SVD Path」タブ
デフォルトのままでよい。

ビルドの設定(最適化)

ステップ実行のためには最適化は無効化しておいたほうがよい。
プロジェクトの「プロパティ」を開き、
C/C++ビルド」→「設定」→「ツール設定」→「Optimization」で、
「Optimization Level」を「None(-O0)」に設定する。

デバッグの実行

GR-PEACHをUSBケーブルでPCに接続し、binファイルをmbedドライブにコピーする。
デバッグボタン(虫のアイコン)をクリックするとデバッグが開始する。

参考ページ

os.mbed.com

qiita.com

1月のまとめ

進捗

  • e2studioの環境導入
  • SOEMのGR-ROSE対応
  • SOEMのGR-SAKURA不具合修正
  • SOEMのGR-PEACH対応
  • Re:VIEWの環境導入と使い方習得
  • GR-ROSEの同人誌原稿執筆 (ICSサーボ)
  • GR-ROSEの同人誌原稿執筆 (EtherCAT)

イベント等

動画公開


所感

心身とも万全といえないコンディションのなかでまずまずのスタートだったと思う。

メモ: PDFのグレースケール化

PDFをグレースケール化するには下記のコマンドを実行する

gs -q -r600 -dNOPAUSE -sDEVICE=pdfwrite -o output.pdf -dPDFSETTINGS=/prepress -dOverrideICC -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -sColorConversionStrategyForImage=Gray -dGrayImageResolution=600 -dMonoImageResolution=600 -dColorImageResolution=600 input.pdf
オプションの意味

しょうじきよく分からない。

お約束のやつ

-q
-dNOPAUSE

入出力ファイルの指定

-o output.pdf
input.pdf

たぶんこのへんはPDF出力の指定

-sDEVICE=pdfwrite
-dPDFSETTINGS=/prepress

たぶんここらへんがグレースケール指定

-dOverrideICC
-sProcessColorModel=DeviceGray
-sColorConversionStrategy=Gray
-sColorConversionStrategyForImage=Gray 

たぶんこのへんは解像度の指定

-r600
-dGrayImageResolution=600
-dMonoImageResolution=600
-dColorImageResolution=600

-r600 は "-dDEVICEXRESOLUTION=600 -dDEVICEYRESOLUTION=600" と等価