picture環境(pict2e, \usepackage{pict2e})
Tips
Draw
- Draw タブでは、polyvector, polyline, polygon, Vector, Line, crossing, qbezier, cbezier を作成できます。
- Delete では、canvas 上の図形をクリックして削除できます。
- Poly cut/join では、polyline, polyvector, Line, Vector の切断と結合を行います。
TeX Source (Main/Sub)
- Main のコマンドは黒、Sub のコマンドは青、カーソル行のコマンドは赤で描画されます。
- Tab を押すごとに picture 環境の命令を補完できます。
- Round numbers をオンにすると、変換後の数値を指定桁数で丸めます。
座標入力
- Point input をオン、または Alt+クリックで、canvas 上の点をカーソル位置に (x,y) 形式で挿入します。
- Reveal canvas edits をオンにすると、canvas 上の編集後に対応する TeX Source の行を表示します。
図形の点に対するマウス編集
- 点をドラッグすると、その点を移動します。
- Shift+ドラッグで、対応コマンド全体を平行移動します。
- Ctrl+ドラッグで、対応コマンドをコピーして平行移動します。
Controls
- reverse は、最後にフォーカスのあった TeX Source のカーソル行にあるコマンドの向きを反転します。
- Translate, Scale, Rotate は、最後にフォーカスのあった TeX Source のルートレベルのコマンドに適用します。
- ToDashed (bezier) は、qbezier, cbezier, Line, Vector を破線化します。
- ToQbezier (cbezier) は、cbezier を qbezier の列に変換します。
- Circle は、qbezier の列として円弧を作成します。
表示操作(パン・ズーム)
- 空白部分をドラッグすると、表示の中心を移動します。
- Ctrl+ホイールで、マウス位置を中心に表示を拡大・縮小します。
Export
- Export SVG では、現在の図形を SVG ファイルとして出力します。
- Export PDF では、現在の図形を PDF ファイルとして出力します。PDF 出力にはインターネット接続が必要です。
交点用の LaTeX マクロ
\ExplSyntaxOn
\cs_new_protected:Npn \crossing
{
\peek_meaning:NTF [
{ \crossing_with_option:w }
{ \crossing_with_option:w [6] }
}
\cs_new_protected:Npn \crossing_with_option:w [#1](#2,#3)(#4,#5)(#6,#7)(#8,#9)
{
\fp_set:Nn \l_tmpa_fp { #2 } % x1
\fp_set:Nn \l_tmpb_fp { #3 } % y1
\fp_set:Nn \l_tmpc_fp { #4 } % x2
\fp_set:Nn \l_tmpd_fp { #5 } % y2
\fp_set:Nn \l_tmpe_fp { #6 } % x3
\fp_set:Nn \l_tmpf_fp { #7 } % y3
\fp_set:Nn \l_tmpg_fp { #8 } % x4
\fp_set:Nn \l_tmph_fp { #9 } % y4
\fp_set:Nn \l_tmpi_fp { #1 } % d
% over, under の方向ベクトル
\fp_set:Nn \l_tmpj_fp { \l_tmpc_fp - \l_tmpa_fp }
\fp_set:Nn \l_tmpk_fp { \l_tmpd_fp - \l_tmpb_fp }
\fp_set:Nn \l_tmpl_fp { \l_tmpg_fp - \l_tmpe_fp }
\fp_set:Nn \l_tmpm_fp { \l_tmph_fp - \l_tmpf_fp }
% 平行判定用の外積
\fp_set:Nn \l_tmpn_fp
{ \l_tmpj_fp * \l_tmpm_fp - \l_tmpk_fp * \l_tmpl_fp }
% 平行またはほぼ平行なら何も出力しない
\fp_compare:nF { abs(\l_tmpn_fp) < 1e-12 }
{
% 交点パラメータ t
\fp_set:Nn \l_tmpo_fp
{
((\l_tmpe_fp - \l_tmpa_fp) * \l_tmpm_fp - (\l_tmpf_fp - \l_tmpb_fp) * \l_tmpl_fp)
/ \l_tmpn_fp
}
% 交点
\fp_set:Nn \l_tmpp_fp { \l_tmpa_fp + \l_tmpo_fp * \l_tmpj_fp }
\fp_set:Nn \l_tmpq_fp { \l_tmpb_fp + \l_tmpo_fp * \l_tmpk_fp }
% under strand の単位方向ベクトル
\fp_set:Nn \l_tmpr_fp { sqrt((\l_tmpl_fp)^2 + (\l_tmpm_fp)^2) }
\fp_set:Nn \l_tmps_fp { \l_tmpl_fp / \l_tmpr_fp }
\fp_set:Nn \l_tmpt_fp { \l_tmpm_fp / \l_tmpr_fp }
% under strand の切れ目両端
\fp_set:Nn \l_tmpu_fp { \l_tmpp_fp - (#1 / 2) * \l_tmps_fp }
\fp_set:Nn \l_tmpv_fp { \l_tmpq_fp - (#1 / 2) * \l_tmpt_fp }
\fp_set:Nn \l_tmpw_fp { \l_tmpp_fp + (#1 / 2) * \l_tmps_fp }
\fp_set:Nn \l_tmpx_fp { \l_tmpq_fp + (#1 / 2) * \l_tmpt_fp }
\Line(#2,#3)(#4,#5)
\Line(#6,#7)(\fp_to_decimal:N \l_tmpu_fp,\fp_to_decimal:N \l_tmpv_fp)
\Line(\fp_to_decimal:N \l_tmpw_fp,\fp_to_decimal:N \l_tmpx_fp)(#8,#9)
}
}
\ExplSyntaxOff