マセマもどき

マセマもどき

- ウッ キー の投稿
返信数: 0
以前、大学数学・物理のマセマシリーズのような紙面作りがしたい、とここに書き込みしました。
マセマのサンプル
http://www.mathema.jp/books/abst/en_denjiki.pdf
今回、tikzを使ってなんとか「それらしく」しました。まだ試行錯誤がかなり必要でこれからもっと便利なやり方を模索しますが、「やってやれないことはないな 」とは感じてします。主な点は
・pxpgfmarkパッケージを使って、日本語環境でremember pictureを可能にする
・tikzのremember picture, overlayを使って、数式上に四角やアンダーラインなどのグラフィックを自由に描く
・数式の中の一部の文字に「ノード名」を与え、グラフィックの位置をそのノード名による「相対指定」によって行う。これにより、数式を変更してもグラフィックがそれに合わせて移動するようになる。
もっと良いやり方があると思いますので、アドバイスいただけると嬉しいです。(このレベルにするだけでも、僕的には大変でしたが・・・。)よろしくお願いします。
****************************************************************************
\documentclass[dvipdfmx]{jsarticle}

\usepackage{amsmath}

\usepackage[svgnames]{xcolor}

\usepackage{tikz}

\usepackage{pxpgfmark} % remember picture を可能にする

\usepackage{bm}

\usetikzlibrary{calc,decorations.pathmorphing,backgrounds,intersections}


%ノード名を付与(ウッキー作。もっとよい方法があれば教えてください)

\newcommand{\●}[2] {</p> <p style="margin:0px;text-indent:0px;"> \settowidth{\dimen0}{#2}

\settoheight{\dimen1}{#2}

\begin{tikzpicture}[remember picture,inner sep=0]

\useasboundingbox (0,0) rectangle (\the\dimen0, \the\dimen1);

\node[xshift=\the\dimen0 /2,yshift=\the\dimen1 /2] (#1) {#2};

\end{tikzpicture}

}

%上に0mmずらす。これしないと何故か「ずれる」←理由を教えてください

\newcommand{\raisezero}[1]{\raisebox{0mm}[0pt][0pt]{#1}}


\begin{document}

\begin{align*}

\bm{H}(\bm{r})

&=

\dfrac{1}{4\pi}

\iiint_{V'}

\bm{i}(\bm{r}')

\times

\dfrac

{\●{第1行左上}{$\bm{r}$}

-

\●{第1行右上}{$\bm{r}'$}}

{\●{第1行左下}{\raisezero{$\|$}}

\bm{r}-\bm{r}'

\●{第1行右下}{\raisezero{$\|$}}

^3}

\,\textrm{d}V'

\\[2ex]

&=

-\dfrac{1}{4\pi}

\iiint_{V'}

\●{第2行左}{$\bm{i}$}

(\bm{r}')

\times\nabla

\dfrac

{\●{第2行上}{$\!\!1$}}

{\|</p> <p style="margin:0px;text-indent:0px;"> \bm{r}-\bm{r}'

\●{第2行右下}{\raisezero{$\|$}}

}

\,\textrm{d}V' \\[5ex]

&=\dfrac{1}{4\pi}\iiint_{V'}\nabla\times\dfrac{\bm{i}(\bm{r}')}{\|\bm{r}-\bm{r}'\|}\textrm{d}V' \\

&=\nabla\times\dfrac{1}{4\pi}\iiint_{V'}\dfrac{\bm{i}(\bm{r}')}{\|\bm{r}-\bm{r}'\|}\textrm{d}V'

\end{align*}

\begin{tikzpicture}[remember picture,overlay]

%第1行被注釈

\path [name path=被注釈, red,draw,rounded corners=1ex]

let \p1=(第1行左下.south west), \p2=(第1行左上.north), \p3=(第1行右下.east) in

(\x1-0.4ex, \y1-0.7ex) rectangle (\x3+1.4ex, \y2+0.9ex) node (被注釈) {};

%第1行注釈

\path

let \p1=(第1行右上.north east) in

(\x1+3.5ex, \y1+0ex) node [anchor=south west] (temp)

{$-\nabla\dfrac{1}{\|\bm{r}-\bm{r}'\|}$(公式(a)より)};

 

\begin{scope}[on background layer]

\path [name path=注釈, rounded corners=1ex, draw, fill=red!20]

(temp.north east) rectangle (temp.south west) node (注釈) {} ;

\end{scope}

%第1行被注釈=第1行注釈の上側

\path [name path=イコール]

let \p1=(被注釈.center), \p2=(注釈.center) in

(\x1-1ex, \y1-0.8ex) -- (\x2+1ex, \y2+0.5ex);

 

\path [name intersections={of=イコール and 被注釈}];

\coordinate (Y) at (intersection-1);

 

\path [name intersections={of=イコール and 注釈}];

\coordinate (Z) at (intersection-1);

 

\begin{scope}[on background layer]

\draw (Y)--(Z);

\end{scope}

%第1行被注釈=第1行注釈の下側

\path [name path=イコール]

let \p1=(被注釈.center), \p2=(注釈.center) in

(\x1-1ex, \y1-0.5ex) -- (\x2+1ex, \y2+0.8ex);

 

\path [name intersections={of=イコール and 被注釈}];

\coordinate (Y) at (intersection-1);

 

\path [name intersections={of=イコール and 注釈}];

\coordinate (Z) at (intersection-1);

 

\begin{scope}[on background layer]

\draw (Y)--(Z);

\end{scope}

%第2行被注釈

\path [name path=被注釈, red,draw,rounded corners=1ex]

let \p1=(第2行左.west), \p2=(第2行上.north), \p3=(第2行右下.south east) in

(\x1-0.4ex, \y3-0.7ex) rectangle (\x3+0.4ex, \y2+0.4ex) node (被注釈) {};

%第2行注釈

\path

let \p1=(第2行上.north), \p2=(第2行右下.east) in

(\x2+2ex, \y1+0ex) node [anchor=south west] (temp)

{$-\nabla\times\dfrac{\bm{i}(\bm{r}')}{\|\bm{r}-\bm{r}'\|}$(公式(b)より)};

 

\begin{scope}[on background layer]

\path [name path=注釈, rounded corners=1ex, draw, fill=red!20]

(temp.north east) rectangle (temp.south west) node (注釈) {} ;

\end{scope}

%第2行被注釈=第2行注釈の上側

\path [name path=イコール]

let \p1=(被注釈.center), \p2=(注釈.center) in

(\x1-1ex, \y1-0.8ex) -- (\x2+1ex, \y2+0.5ex);

 

\path [name intersections={of=イコール and 被注釈}];

\coordinate (Y) at (intersection-1);

 

\path [name intersections={of=イコール and 注釈}];

\coordinate (Z) at (intersection-1);

 

\begin{scope}[on background layer]

\draw (Y)--(Z);

\end{scope}

%第2行被注釈=第2行注釈の下側

\path [name path=イコール]

let \p1=(被注釈.center), \p2=(注釈.center) in

(\x1-1ex, \y1-0.5ex) -- (\x2+1ex, \y2+0.8ex);

 

\path [name intersections={of=イコール and 被注釈}];

\coordinate (Y) at (intersection-1);

 

\path [name intersections={of=イコール and 注釈}];

\coordinate (Z) at (intersection-1);

 

\begin{scope}[on background layer]

\draw (Y)--(Z);

\end{scope}

%第2行アンダーライン

\path [name path=アンダーライン, red,draw]

let \p1=(第2行左.south west) in

(\x1-0.2ex, \y1-0.7ex) -- (\x1+4.8ex, \y1-0.7ex) node {};

%第2行アンダーラインの注釈

\path

let \p1=(第2行左.south west) in

(\x1-6ex, \y1-3.2ex) node [anchor=north] (temp)

{定ベクトル$\bm{a}$に相当};

 

\begin{scope}[on background layer]

\path [name path=注釈, rounded corners=1ex, draw, fill=red!20]

(temp.south west) rectangle (temp.north east) node (注釈) {} ;

\end{scope}

%第2行被注釈=第1行注釈の左側

\path[fill=white]

let \p1=(注釈.center) in

(\x1-3.5ex, \y1+0.5ex) rectangle +(1ex, 1ex);

 

\path [name path=イコール]

let \p1=(注釈.center) in

(\x1-3.5ex, \y1-1ex) -- +(1ex, 5ex);

 

\path [name intersections={of=イコール and アンダーライン}];

\coordinate (Y) at (intersection-1);

 

\path [name intersections={of=イコール and 注釈}];

\coordinate (Z) at (intersection-1);

 

\draw (Y)--(Z);

%第2行被注釈=第1行注釈の右側

\path [name path=イコール]

let \p1=(注釈.center) in

(\x1-3.2ex, \y1-1ex) -- +(1ex, 5ex);

 

\path [name intersections={of=イコール and アンダーライン}];

\coordinate (Y) at (intersection-1);

 

\path [name intersections={of=イコール and 注釈}];

\coordinate (Z) at (intersection-1);

 

\draw (Y)--(Z);

%第2行アンダーライン(上書き)

\path [name path=アンダーライン, red,draw]

let \p1=(第2行左.south west) in

(\x1-0.2ex, \y1-0.7ex) -- (\x1+4.8ex, \y1-0.7ex) node {};

\end{tikzpicture}

\end{document}