HOME > 電算 > Inkscape メモ旧

Inkscape メモ旧

Inkscape メモ新

目次

  • 抂略
  • 雑感
  • Inkscape ず SVG
  • Inkscape の拡匵
  • 他のファむル圢匏の読み曞き
  • 単䜍のこず
  • 矢印、ずいうかマヌカヌ
  • パスを塗り぀ぶす
  • 文字
  • 敎列・吞着
  • 頓知
  • グラフ
  • Tips

    抂略

    Inkscape は、Linux, Windows, Mac OS X などのプラットホヌムで動䜜するオヌプン゜ヌスか぀フリヌのドロヌむング・ツヌルドロヌ・゜フトである。SVG ずいう圢匏にネむティブに察応しおいるのが著しい特城。私は今は Linux でバヌゞョン 0.46 を䜿いはじめたが、このペヌゞの蚘述はただ 0.43 あるいは 0.44に察しおなされたもののたたのものが倚い。ずくにナヌザむンタヌフェヌスに぀いおはバヌゞョンによりかなり倉わっおいる。たあ、いじっおいお気づいたこずを備忘録぀いでにメモしおおく。圓然誀りも含たれおいるかず思われる  

    本家は http://www.inkscape.org/index.php

    珟圚2008-5-16(Fri)における最新の安定版は 0.46 で、http://wiki.inkscape.org/wiki/index.php/ReleaseNotes046 にリリヌスノヌト。

    Inkscape のマニュアルは http://www.inkscape.org/doc/ からたどるこずができる。

    画面の説明は http://ja.wikibooks.org/wiki/Inkscape/%E7%94%BB%E9%9D%A2%E8%AA%AC%E6%98%8E などを芋れば䞀応了解されるであろう。

    SVG に぀いおは、http://www.w3.org/Graphics/SVG/ 。

    SVG の珟圚最新の完成バヌゞョンは 1.1。Inkscape 0.44 で䜜成した文曞は名前空間ずしお SVG 1.0 を宣蚀しおいる。なお、Inkscape のテキスト流し蟌みの機胜は SVG に準拠しおいない。

    Inkscape 雑感

    Linux で動くフリヌのドロヌ゜フトドロヌむング・ツヌルのなかで、最も䜿いやすいように思える。ちょっずした図を䜜成しお LaTeX に匵り蟌むような堎合にたず遞択できる。

    SVG は XML なので、基本的にテキスト゚ディタでの線集が可胜である。Inkscape は手曞きした SVG を読み蟌んで、必芁な線集を加えるずいう䜿い方ずも盞性が良い。

    簡単に拡匵スクリプトが曞ける。たずえば、pstoedit ず skencil元 sketch に䞋請けさせお Postscript を読み蟌むスクリプトなどがもれなく぀いおくるぞい。手曞きポストスクリプトを GUI で線集できたりしお感動的だぞ。

    「職人の業をコンピュヌタ䞊で再珟できるようにたずナヌザ・むンタヌフェヌス考えお、それを実珟するためにデヌタ構造が決められおいるのがお絵描き゜フトずいうものだ」ず考えおいるず、Inkscape は実際以䞊に質玠なものに芋える。むしろ、SVG ずいうデヌタ構造が先にあり、これを操䜜するための GUI を備えた実装が Inkscape であるず考えるずしっくりいくし、ナヌザむンタヌフェヌスも合理的であるずいうこずに気付く。たた、最初の印象よりもずっず倚くの堎面で䜿えるずいうこずを発芋する。

    ずにかく Inkscape は Adobe Illustrator 嬢ほど埮笑んではくれないが、付き合っおみるずなかなか話のわかるオッサンだ。

    おたけ

    Inkscape で䜜成した SVG ガラス玉。改倉するなりしお自由に䜿う可

    ball.svg (12KB)

    id="stop7629" ず id="stop10344" の stop ゚レメントがも぀ style 属性の stop-color に #00FF00 ずいった RGB 圢匏の色を指定しおやるず、玉の色が倉わるよどちらも同じ色でよし。゚ディタで線集しお遊ばう。

    Inkscape ず SVG

    暙準保存圢匏 Inkscape SVG はどんなものなりや

    Inkscape の暙準的な保存圢匏Inkscape SVGは、たいぞんキュヌトなものである。

    Inkscape の暙準的な保存圢匏は、SVG である。しかし、これは保存されたファむルから SVG の芏栌に定められおいる゚レメントだけを拟っお読んでも期埅した通りにラスタラむズできるずいう意味であり、実際には独自に定矩した゚レメントを含んでいるし、属性も远加されおいる。これらの远加された゚レメントや属性は、もっぱら Inkscape の GUI を䜿い勝手がよいものにするために甚いられおいる。

    たずえば、Inkscape で円は circle ゚レメントではなく、path ゚レメントずしお䜜成される。この path ゚レメントは、円匧曲線を描くための M コマンドを 1 回、A コマンドを 2 回甚いる緑字たはた斜䜓郚分。

        <path
           sodipodi:type="arc"
           style="opacity:1;fill:none;fill-opacity:1;
                  fill-rule:evenodd;stroke:#000000;stroke-width:1;
                  stroke-linecap:round;stroke-miterlimit:4;
                  stroke-dasharray:none;stroke-dashoffset:0;
                  stroke-opacity:1"
           id="path7567"
           sodipodi:cx="-17.172863"
           sodipodi:cy="236.15866"
           sodipodi:rx="125.25864"
           sodipodi:ry="125.25864"
           d="M 108.08577 236.15866 
              A 125.25864 125.25864 0 1 1  -142.4315,236.15866 
              A 125.25864 125.25864 0 1 1  108.08577 236.15866 z" />
    

    M コマンドは珟圚䜍眮を移動する。A コマンドは、珟圚点を始点ずしたうえで、終点を定め、それらを結ぶ楕円の匧を描く。これを描くために、楕円の二぀の半埄、円匧を楕円のどの郚分から切り取っお䜿うのかを瀺す角床あるいは、楕円を回転させる角床、右たわりに行くか巊たわりに行くかを瀺すフラグ、長いほうの匧を䜿うか短いほうの匧を䜿うかを瀺すフラグ、ずいう情報を甚いる。面癜いこずに、楕円の二぀の䞭心円ならばこれらは同じ点になるの座暙デヌタは䜿われない。

    だが、Inkscape SVG は、この円を特定するために必芁な情報をそっくりもう䞀組み保持しおいる赀字たたは倪字郚分。これは、楕円の䞭心ず二぀の半埄を持っおいる。

    実際に Inkscape を䜿っおみおわかるこずは、Inkscape はファむルの読み蟌み時に埌者の情報を利甚しおいお、前者の情報はたんに保存時にファむルが SVG ずしおも読めるように付加されおいるらしいずいうこずである。

    なお、Inkscape は独自の゚レメント定矩や属性定矩を䜿うために、最䞊䜍にあたる svg ゚レメントの䞭で名前空間を远加しおいる。

    <!-- Plain SVG で保存した堎合の名前空間 -->
       xmlns:svg="http://www.w3.org/2000/svg"
       xmlns="http://www.w3.org/2000/svg"
    
    <!-- Inkscape SVG で保存した堎合の名前空間 -->
       xmlns:dc="http://purl.org/dc/elements/1.1/"
       xmlns:cc="http://web.resource.org/cc/"
       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns:svg="http://www.w3.org/2000/svg"
       xmlns="http://www.w3.org/2000/svg"
       xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
       xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    

    SVG の 「XML 名前空間」

    xmlns 属性は XML名前空間を識別するために甚いられる。Inkscape はこの属性を厳栌にチェックするので、手曞きした SVG ファむルを Inkscape で読み蟌むような堎合には泚意が必芁ずなる。

    SVG でデフォルトの名前空間は http://www.w3.org/2000/svg である。しかし、名前空間の宣蚀が xmlns="http://www.w3.org/2000/svg" だけで枈むずは限らない

    たずえば、use ゚レメントを甚いお、パスを再利甚するような堎合、 href ずいう属性を䜿い、他の郚分ですでに定矩したパスを匕甚するこの仕組みは Inkscape の GUI むンタヌフェヌスで「クロヌン」ず呌ばれおいる。しかし、ここでの href ずいう属性はデフォルトの名前空間にはなく http://www.w3.org/1999/xlink ずいう名前空間に属しおいる。

    そのため、use ゚レメントかそれより䞊䜍の゚レメントでたいがいは svg ゚レメントでxmlns:xlink="http://www.w3.org/1999/xlink" のように名前空間の接頭蟞を宣蚀しおおき、use ゚レメントの䞭では xlink:href="#g2115" のように甚いる必芁がある。

    クロヌンずコピヌ

    クロヌンずコピヌは異なる。あるパスをコピヌするず、オリゞナルずそっくりしばしば䜍眮だけ異なるの path ゚レメントがもう䞀぀䜜成されるのに察しお、クロヌンの堎合は use ゚レメントず䜿っお、オリゞナルのオブゞェクトが匕甚されるに過ぎない。

    オリゞナルのパスをそのたた移動させたり拡倧しおもクロヌンの倧きさには倉化がないが、オリゞナルのパスを構成するノヌドのうちの䞀぀を動かしたり、ノヌドやセグメントの削陀・远加を行うず、これはすぐさたクロヌンにも反映される。

    これは、use ゚レメントは、オリゞナルのオブゞェクトずはべ぀に、独自に transform 属性を持っおいるからである。

    レむダヌのこず

    レむダヌは、SVG に芏定がない。Inkscape のレむダヌは、SVG 的にはただのグルヌプに過ぎない。Inkscape では、グルヌプオブゞェクトに独自の名前空間で定矩したプロパティを远加しおナヌザむンタヌフェヌス䞊で特別な扱いがなされるようにしお、それをレむダヌず呌んでいるのである。

    Inkscape 0.44 で新芏に文曞を䜜成するず、デフォルト・レむダヌずしお Layer1 ずいうものが甚意される。xml ゚ディタなどで、SVG ゚レメント盎䞋に、オブゞェクトを配した堎合、Inkscape はこのオブゞェクトが茉るレむダヌ名ずしお (root) を衚瀺する。

    Inkscape で䜜成したレむダヌ぀きの文曞を Plain SVG で保存し、これを再床 Inkscape で開くず、独自定矩のプロパティが倱われた結果、䞀般的なグルヌプが (root) 䞊に茉っおいる状態ずしお読み蟌たれる。

    䞀般的なグルヌプをレむダにするためには、XML ゚ディタを䜿い、グルヌプオブゞェクトに inkscape:groupmode プロパティを䜜成し倀を layer にセットしお、さらに inkscape:label プロパティを䜜成し倀に任意のレむダヌ名を䞎えおやればよい。GUIファンは「グルヌプの切取り、新レむダ䜜成、同じ堎所にペヌスト、グルヌプ解陀、レむダの階局を移動」

    レむダヌがグルヌプオブゞェクトである以䞊、入れ子にするこずができるかもしれないず思い、Inkscape 0.44 で詊みおみた。できた。りィンドりのレむダヌ衚瀺郚には芪レむダヌも子レむダヌも同等に衚瀺されるが、芪レむダヌを䞍可芖にするず、それは子レむダヌにも及び、芪レむダヌを削陀するず子レむダヌも削陀される。

    「倉圢」

    「オブゞェクト」→「倉圢」で出おくるダむアログボックスには 5 ぀のタブがある。「移動」「スケヌル」「回転」「傟斜」「倉圢」である。このうち、はじめの 4 ぀でできるこずは、みな「倉圢」でできるこずである。

    これらのメニュヌに数倀を入れお「適甚」するず、そのたびにオブゞェクトが倉圢移動・回転・傟斜するが、最終的にオブゞェクトにどのような倉圢が加わったかのかは「オブゞェクト」→「プロパティ」を芋るずわかる。

    こうした「倉圢」は、察象ずなるオブゞェクトの transform 属性を曞き倉えるこずによっお実珟しおいる。

    transform 属性は、matrix, translate, scale, rotate, skewX, skewY ずいう 6 皮類の "transform difinitions" いい蚳思い぀かぬ。倉換指定ずいったずころによっおどう「倉圢」するかを指定するこずができる。

    ここでの translate, scale, rotate, skewX, skewY は、みな結局 matrix ひず぀で指定できる倉換であるただし、蚈算を芁する。

    マりスを甚いたオブゞェクトの移動や回転は、この matrix を曞き換えるこずによる実珟する。ただし、「Inkscape の蚭定」→「倉圢」タブから、「transform 属性を䜿わない」をオンにしおおくず、できる限りオブゞェクトの他の属性によっお倉圢を実珟しようずする。

    なお、transform 属性を甚いた堎合、オブゞェクトを拡倧するず、茪郭線も倪くなるのが SVG 通りであるが、Inkscape では、特に「Inkscape の蚭定」→「倉圢」ダむアログボックスから、「線の幅を拡倧瞮小」のチェックを倖し、茪郭が倪くなったり现くなったりしないよう茪郭線の倪さを調節するよう蚭定するこずもできる。

    Inkscape の拡匵

    Inkscape はスクリプトを曞いおやるこずにより、容易に拡匵できる。この仕組みを゚クステンションず呌んでいる。http://wiki.inkscape.org/wiki/index.php/ScriptingHOWTO あたりを芋るず抂略がわかる。

    ゚クステンションをその働きにより分類するず、
    (A) ファむルを読み蟌む
    (B) ファむルを曞き出す
    (C) 線集䞭に SVG を受け取り SVG を返す、
    ずいう 3 ぀のタむプがある。
    はじめの二぀のタむプの堎合、ファむルを開く保存する時にファむルタむプの刀別遞択により起動されるので、ナヌザはそれが倖郚スクリプトであるこずに気付かないかもしれないずいうか、気付かないよねふ぀う。もし Inkscape がどういうファむル圢匏を読み曞きできるのかに関心があるのなら、この皮類の゚クステンションが䜕をしおいるかたずえば、どんな倖郚プログラムに䞋請けに出しおいるかを知っおおく必芁がある。
    さいごの (C)は effects ずいうメニュヌに珟れるので、それず知れる。

    ゚クステンションを実珟手段により分類するず、
    (甲) C や C++ による内郚的な方法。いわゆるネむティブで察応しおいるず考えられおいるものは、これを䜿っおいるそうで、そういう意味では䞀般に゚クステンションず考えられおいるものずは違うかな。
    (乙) (䞀時的に䜜成された) SVG ファむルのパスをコマンドラむン匕数ずしお受け取り、あらたな SVG を暙準出力に出力すような圢で曞くスクリプト向けのやり方。これは、さたざたな蚀語で曞くこずができる。倚くの人が Python で曞いおいるのは、たんに SVG が扱い易いからであらう。Perl もよく䜿われる。シェルスクリプトから倖郚プログラムを呌び出しおいる堎合もあるpstoedit 経由で Postscript が読み蟌めるのはこの仕組みだ。
    (侙) XSLT による方法。未実装Inkscape 0.46 でサポヌトされたもよう。リリヌスノヌトに XSLT is now supported for input, output and effect extensions. 
    (䞁) DOM による方法。私は詊しおない。
    がある。

    参考、http://wiki.inkscape.org/wiki/index.php/ExtensionArchitecture#Functionality_Provided

    こうした゚クステンションを Inkscape から䜿えるようにするためには、INX ファむルずいう圢で必芁なこずを曞いおおいおやる。働きによるずどれに分類されるのか、実珟手段によるずどれに分類されるのかずいうこずも、これに曞いおおく。たた、スクリプトの堎所だずか、Effect を぀くる堎合にナヌザに問う倀だずかもこれに蚘す。INX ファむルの眮き堎所は、私の環境では、/usr/share/inkscape/extensions になっおいる。

    こうしおみるず、われわれが「拡匵しおえ」ず感じる日垞甚途では、(C) を乙で凊理するためのスクリプトを曞いおおくこずになりそうだ。そしお、そうしたスクリプトを曞くために、Python のクラスが甚意されおいるから、利甚するず楜。この䟿利なクラスは、effect ずいい、inkex.py ずいうファむルに曞かれおいる。これを䜿うず、GUI の Effects メニュヌからスクリプトを匕っ匵り出したずきに遞択されおいるオブゞェクトに察しお凊理をしたりするのも簡単だぜ。

    今日の䞀蚀シェルスクリプトの終了コヌドは数字でないず駄目。

    他のファむル圢匏の読み曞き

    Inkscape は、さたざたなファむル圢匏の読み曞きができるが、その倚くは倖郚プログラムを利甚しお SVG 圢匏に倉換しおいるのである。ナヌザはそれず気付かずに利甚するこずができる。Inkscape の拡匵参照。Linux 環境の話であるが、Windows 版でも dill 版の python などがたしか暙準で぀いおくるので、これを利甚しおかなりのこずが行えるず思うが、実際確かめおないよ。

    Adobe Illustrator 圢匏

    読み曞きずも倖郚゚クステンションを利甚。

    読み蟌みai_input.inx の指瀺により、凊理が perl のスクリプトである ill2svg.pl Inkscape に぀いおくるで行われる。これは、シェルからも䜿える独立したもので、倚量に凊理するずきにはいいかも。でも詊しおない。

    曞き出しは、ai_output.inx の指瀺により凊理が Ghostscript により行われる。コマンドは gs -q -dNODISPLAY -dSAFER ps2ai.ps

    Adobe Illustrator の SVG

    読み蟌みはネむティブで察応。ただし  

    Illustrator の人が䜜った SVG のサむズがひどく倧きいので、゚ディタで開いおみた。やたら未知の゚レメントがあお、䜕がなんだかわからぬ。未知の名前空間がどっさり定矩されおいお、デフォルトの名前空間ですら、芋なれた䟋のや぀ではない。

    http://wiki.inkscape.org/wiki/index.php/FAQ#I_exported_an_SVG_file_from_Adobe_Illustrator.2C_edited_it_in_Inkscape.2C_and_imported_back_to_AI.2C_but_there_my_changes_are_lost.21

    和蚳しおいる人いた http://wikiwiki.jp/inkscape/?FAQ#uc6ab4c7

    おな頁を発芋。ようするに、(1) Illustorator が生成した SVG は、SVG ずしお読むこずができる (2) しかし、独自定矩の゚レメントを远加しお、Illustrator 甚のバむナリをそっくり保持しおいる、ずいうのだ。ちなみに、Illustrator で保存するずきに、Preserve Adobe Illustrator Editing ず Optimize for Adobe SVG viewer のチェックを倖せば、この倪っちょな圢匏にはならないらしい。

    Inkscape には XSLT で Illustrator が䜜った重い SVG 曞類から䞍芁な郚分を削陀するスクリプトが぀いおくる。私の環境では、/usr/share/inkscape/extensions/aisvg.xslt ずいうのがそれだ。これは、「.ai.svg」 で終わるファむル名を読み蟌むずきにフィルタヌずしお䜜甚するよう蚭蚈されおいるらしいが、私のずころでは、ファむル名をそのやうに倉えおも機胜しなかった。※これは Inkscape 0.46 で䜿えるようになったもよう。リリヌスノヌトに This is used to support the XAML file format (both import and export) and the Adobe Illustrator SVG import which removes Adobe's stuff from SVG. ずある䜙談この inx ファむルのDescription によるず、「Adobe Illustrator SVGs を開く前に cruft を削陀する」ず曞いおある。cruft をリヌダヌズ第 2 版で匕くず、「いやなもの; 粗末な䜜りの結果」ずある。

    http://wiki.inkscape.org/wiki/index.php/ExtensionArchitecture#Implementation_Types によるず、XSLT プロセッサには libxml のや぀をリンクしお䜿っおいるそうだが、I am not aware of the status of the XSLT implementation. ずしっかり曞いおあるから、未実装なのかなあ。実際にやっおみたけど動かなかったよ。仕方ないから、自前の xsltproc で、

    $ xsltproc aisvg.xslt large_ai_file.svg > modest_one.svg
    

    などずやっおやったら、たずえば 1.9M あるファむルが 602 KB になった。

    Plain SVG

    W3C が定矩しおいる゚レメントや属性だけを SVG 曞類だけちょっず䟋倖ありを䜿った圢匏を、Inkscape では、Plain SVG ず呌んで、デフォルトの Inkscape SVG ず区別しおいる。読み蟌み、曞き出しずもネむティブで察応。

    Inkscape SVG を読み蟌んで、Plain SVG で保存し盎すずいくらかの情報が萜ずされお、ファむルサむズは小さくなる。ただ、たずえば、Adobe Illustrator で䜜成した SVG を読み蟌んで、Plain SVG で保存しおもサむズはほずんど倉わらない。予想しおいない名前空間に属する゚レメントや属性は Plain SVG で保存するずきに、そっくり残しおおいお安党を図っおいるらしい。

    以䞋は、接頭蟞のない゚レメントず、接頭蟞が svg の゚レメント以倖をすべお削陀しおしお無理やり Plain SVG っぜいものにする XSLT スクリプト。属性のほうには手を觊れない。なお、Adobe Illustrator の SVG の枛量に぀いおは、最初から Inkscape におたけ XSLT スクリプトが぀いおくる。

    <?xml version="1.0"?>
    <xsl:stylesheet
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    	xmlns="http://www.w3.org/2000/svg" 
    	xmlns:svg="http://www.w3.org/2000/svg" >
      <xsl:output method="xml" indent="no" />
      <xsl:template match="/">
        <xsl:apply-templates select="svg:svg" />
      </xsl:template>
      <xsl:template match="@*|svg:*">
        <xsl:copy>
          <xsl:apply-templates select="@*|svg:*" />
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
    
    参考
    http://www.w3.org/TR/1999/REC-xslt-19991116#copying
    同邊蚳 http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm#copying
    http://www.asahi-net.or.jp/~ps8a-okzk/xml/xslt10_1/copying.html の䜿甚䟋

    たずえば、プロセッサに xsltproc を䜿うなら、

    $ xsltproc script.xsl old.svg > new.svg
    

    おな感じで。うたくいくかどうか保蚌の限りにあらず。

    Postscript

    曞き出しはネむティブで察応。

    読み蟌みは倖郚゚クステンションを利甚。ようするに、「Postscript --(pstoedit)--> sketch,skencil 圢匏 --(skconvert.py)--> SVG 圢匏」ずいうこずですな。Inkscape が Postscript を読み蟌めないようなら、pstoedit ず skencil をむンストヌルしろずいうこずです。现かく芋おいくず  

    ps_input.inx の指瀺により pstoedit -f sk を実行。sk ずいうのは、Sketch Format のこず。Scketch Format ずは、以前 sketch ず称されえた skencil ずいうドロヌむング・プログラムで䜿う圢匏のこず。次に、ps_input.inx は、その Scketch Format を sk_input.inx ずいう inx ファむルに任せる。この inx ファむルは、sk2svg.sh ずいうシェルスクリプトを起動。これは skconvert ずいうプログラムを起動するが、この skconvert ずいうのは skconvert.py ずいう python のスクリプトで、sckencil をむンストヌルするず同時にむンストヌルされるもの。これによっお SVG ファむルに倉換される。あヌめんどい。

    Dia 圢匏

    Dia ずいうのは、ダむアグラム゚ディタ。フロヌチャヌトなんか曞くのが楜なや぀。Inkscape にもコネクタずいうのがあるが、Dia のほうが特化しおいるのでよい堎合がある。

    読み蟌みは dia.inx が dia2svg.sh に任せる。dia2svg.sh は、なんのこずはない Dia を起動しお SVG で保存するだけのもの。最初から Dia で SVG 保存したのず䜕ら倉わるこずなし。

    曞き蟌みはできない。

    DXF 圢匏

    CAD が䜿うファむル圢匏だそうだが、私には未知のフォヌマット。

    読み蟌みは dxf_input.inx が dxf2svg ずいうプログラムに䞋請けに出す。このプログラムの正䜓は私には䞍明。

    曞き出しは dxf_output.inx に指瀺が曞いおあっお、たず Postscript で出力しおから、ps2dxf.sh ずいう Inkscape 付属のシェル・スクリプトを䜿う。このシェル・スクリプトは pstoedit -f dxf をやるだけのもの。

    曞き出しらしきものにもう䞀぀あっお、dxf_outlines.inx が dxf_outlines.py ずいう Inkscape に぀いおくるプログラムを起動。これが䜕なのかは、私にはさっぱりわからない。

    その他

    ただただいろいろあるが、たたの機䌚に。

    単䜍のこず

    どうも、ピクセルずいう単䜍が気持ち悪いので、メモを䜜成しお敎理。私の誀解、胡麻化し、誀解を生む衚珟などに満ちおいるはず。正しい情報は SVG ず CSS2 の仕様曞から埗お頂きたく存じ候

    たず、あたり前の話

    ピクセルずは、䞀般に出力デバむスが䜜りうる最小限のナニットずいうこずになっおゐるやうである。぀たり、それは「物」であり、䞀個二個ず数えるものである。䞀方、この「物」の䞀蟺の長さを䞀単䜍ずしお、長さを枬るこずが行われる。それを○○ピクセルず衚珟し、この堎合はピクセルは「物」ではなく、長さの単䜍である。ずうぜん、1 ピクセルが䜕ミリメヌトルにあたるかは、出力デバむスに䟝存する。たた、出力デバむスの解像床などを衚珟するために、1 むンチあたりにいく぀のピクセルが入るかずいう衚珟が行われる。dpi ずいうのがそれである。ここで dpi が既知であれば、ピクセルをいく぀぀なげた長さであるかによっお、出力デバむスに䟝存しない絶察的な長さを衚珟するこずができる。90 dpi で 90 ピクセルの長さずいえば、1 むンチずいうのず同じである。このように dpi ずピクセル数で長さを衚珟するずいうのは、広く行われおいる。

    Inkscape の仕様は質玠か

    私の環境の Inkscape は、1/90 むンチを 1 ピクセルず定矩し、これをデフォルトの単䜍ずしおいるビルドによっおこれが異なるのかどうか、私は知らないので、以䞋読み替える必芁があるかもしれない。この関係は Inkscape では垞に䞀定であり、蚭定し盎すこずはできない。これは、人気ペむンティング・ツヌルの Gimp で、長さの単䜍であるピクセルずむンチの関係を自由に蚭定するこずができるのに比べお、䞀芋質玠な仕様のように芋える。

    CSS2 にいうピクセル

    たず、Inkscape は SVG 準拠である。その SVG にはピクセルずいうずきは CSS2 の定矩によるずある。CSS2 では、ピクセルを出力デバむスの解像床に䟝存しない単䜍ずしお定矩し、出力デバむスの最小単䜍ずしおのピクセルのほうは、デバむス・ピクセルず呌んでこれを区別しおいる。

    では、CSS2 では 1/90 むンチを 1 ピクセルの長さず定矩しおいるのかずいうず、そう単玔なものではない。CSS2 は 1 ピクセルを「90 dpi の解像床をも぀出力における 1 デバむス・ピクセルを 28 むンチ離れたずころから芋たのず同じ芖角になる長さ」ず定矩しおいる。

    芖角ずは䜕ぞや

    芖角visual angleずいうのは、察象の端から端たでが芖る者にずっおどのくらいの角床の䞭におさたっお芋えるかずいうこずで、これは察象の倧きさず察象たでの距離に䟝存する。

    察象の倧きさ、察象たでの距離ず芖角の関係は

    芖角 = 2 arctan (察象の倧きさ / 2 / 察象たでの距離) 
    

    のようになる。図に描くず単玔なこずなんだが、難しそうに芋えるぞ

    28 むンチ離れたずころから、1/90 dpi の出力デバむスによる 1 デバむス・ピクセルを眺めるず、芖角は玄 0.0277 床である。぀たり、これが CSS2 のピクセルの正䜓だ。

    ここで、现かいツッコミをさせおくれ。CSS2 の芏栌では 1 ピクセルの長さを定めお、それが 10 個集たったら 10 ピクセルずいうこずになっおいるのであっお、10 ピクセルの芖角が 1 ピクセルの 10 倍の芖角だず蚀っおいるのではない。もし、埌者のような定矩であったならば、芖界の呚蟺郚では 1 ピクセルの絶察的な長さがひどく倧きなものになっおしたい、ピクセルずミリメヌトルの倉換なんおできたもんじゃない。それはそれで、プラネタリりム向きの芏栌かもしれないけどね

    ためしに、地球から倪陜を芋たずき䜕ピクセルになるか蚈算しおみやう。地球から倪陜たでの距離はおよそ 1 億 4900 侇 Km であり、この距離における 1 ピクセルの倧きさは、7 億 2034 Km である。倪陜の倧きさは 139 侇 Km であるから、これは 箄 19.2 ピクセルにあたるこずになる。

    ふたたび Inkscape のこず

    そういうわけなので、Inkscape で 1 ピクセルが 1/90 むンチに固定されおいお、か぀、Inkscape が CSS2 に準拠しおいるずいうこずは、目ず出力の距離に 28 むンチが想定されおいるこずを意味しおいるずも蚀える。

    なお、「1 ピクセル  1/90 むンチ」ずいうのは、Inkscape のディスプレむ䞊の衚瀺にも、印刷の堎合にも甚いられる。もっずも、ディスプレむ画面の堎合は、プラットホヌムによっお違いそうではあるが、私のずころでは解像床に 90 dpi のディスプレむ装眮を想定しおいお、私の 85 dpi のディスプレむ装眮では実際より若干倧きく衚瀺される。プリンタで印刷する堎合には、たずえばポむントなどの絶察的な単䜍に換算しお呜什を送るなどするので、その長さは正確である。

    ピクセルによる長さ指定の問題

    版䞋補版するための原皿を䜜成するような堎合、CSS2 に定めるピクセルで長さを指定するず困るこずになる。CSS2 のピクセルで衚珟されたものは、目から出力物たでの想定された距離に応じお出力物のサむズが倉わっおしたうからだ。こうした堎合、ミリメヌトルやむンチなどの絶察的な長さを衚わす単䜍が望たしい。

    ずころが Inkscape では、デフォルトの単䜍をピクセルからミリメヌトルやむンチに倉えるこずはできない「本圓」。どうするか。

    じ぀のずろ、CSS2 が定めるピクセルずいうのは、出力デバむスに合わせお若干の出入りを蚱すものであるから、この面からもピクセルの䜿甚は版䞋䜜成には向かない。䞀方で、ピクセルで指定しおおいたほうが有利な堎合もある。解像床の䜎いデバむスで出力する堎合には、敎数個のデバむス・ピクセルをたずめお CSS2 のピクセルを衚珟したほうが矎しい。単䜍をピクセルのたた甚いおおけば SVG を読み蟌んだナヌザ・゚ヌゞェントが出力が矎しく芋えるようにうたく換算しおくれる可胜性がある。CSS のピクセル定矩に若干の出入りが蚱されおいるのはこのためである

    そもそも Inkscape のデフォルト単䜍は本圓にピクセルなのか

    いきなり倉なこずを蚀い出すなら、Inkscape においお、そしおそれが準拠しおいる SVG においお、ナヌザがお絵描きする空間におけるデフォルトの単䜍はピクセルなんかではない。それは本圓は、ナヌザが勝手にこしらえた単䜍であっお、SVG ではこれをナヌザ・ナニットず呌んでいる。

    ナヌザ・ナニットで衚珟されたナヌザ空間は、印刷される領域たるビュヌ・ポヌトず呌ばれる矩圢内に写像される。このずき、初期initialの状態では、ナヌザ・ナニットはピクセルに等しいず仮定したうえでビュヌ・ポヌトに写像されるから、これを簡単に「デフォルトはピクセルである」ず蚀っおいるわけである。

    たた、「ナヌザナニットはピクセルである」ずいう初期の仮定を、「ナヌザナニットはミリメヌトルである」ずか「むンチである」ずかには倉曎できない。このこずを簡単に、「デフォルト単䜍を倉曎するこずはできない」ず蚀っおいるのである。

    しかし、これはあくたでも初期の仮定であり、実際には SVG が読み蟌たれた埌に起こる耇雑な過皋によっお、ナヌザナニットはさたざたに解釈されるこずになる。兞型的には、SVG をより䞊䜍の SVG に埋め蟌んだ堎合で、䞊䜍の SVG ずの亀枉ネゎシ゚ヌションが起こり、これが倉曎される。

    ビュヌ・ボックス

    SVG 曞類の補䜜者はナヌザ空間をどうビュヌポヌトに写像するかを明瀺的に定矩しおやるこずも可胜である。ビュヌ・ボックスず呌ばれる矩圢を蚭定するず、ナヌザ空間からビュヌ・ボックスで切り取られた範囲がビュヌ・ポヌトにフィットするように写像される。これにより、デフォルトの写像のやり方を倉曎するこずができる。

    たずえば、ビュヌポヌトの倧きさが 210 mm × 297 mm (A4) のずき、ビュヌボックスの倧きさを 210 ナヌザナニット × 297 ナヌザナニットに指定しおおけば、ナヌザ空間における 1 ナヌザナニットは、ビュヌポヌトにおける 1 mm に写像される。

    ビュヌボックスずビュヌポヌトの瞊暪比が異なる堎合、前者を埌者にフィットさせるやり方がいく぀か考えられる。SVG では、preserveAspectRatio ず呌ばれる属性を svg ゚レメントに䞎えるこずにより、フィットの仕方をコントロヌルできるこずになっおいる。ただし、Inkscape 0.43 では、preserveAspectRatio 属性はサポヌトされおいないし、この属性を指定しなかった堎合の動䜜も SVG 通りにはなっおいない。そのため、珟圚のずころビュヌポヌトずビュヌボックスのそれぞれの瞊暪比が完党に等しくなるようにしおおくのが無難であろう。

    もっずも、Web 䞊で画像を公開するような堎合、正確なサむズよりもナヌザ゚ヌゞェントの蚈算量の削枛が優先されるだろうから、ビュヌボックスを䜿わずに衚瀺できるようにしたほうがいいように思われる。

    なぜか、Inkscape の GUI メニュヌからはビュヌボックスを定矩するこずができない。「線集」メニュヌから XML ゚ディタを匕っ匵り出しおきお手曞きで加える必芁がある。これはあるいは、耇雑な画像の堎合にビュヌボックスを䜜っおおくこずより生じるナヌザ゚ヌゞェントの負担増を嫌っおいるずいうこずなのかもしれない。

    䜙談ながら、ごく䞀般的な䜿甚法においおも、ビュヌボックスを远加しおおくずよい堎合がある。ビュヌボックスを䜜成しおおくず、メニュヌから「甚玙サむズ」を倉曎しただけで、自動的に䜜画内容が甚玙にフィットするように拡倧されるからだ。こうしたこずが SVG ファむルの受け取り手の䟿宜にかなうこずもあるだろう。たずえば、この癜地図は刀だが、Inkscape でこれを開き、GUI メニュヌで甚玙サむズをに倉曎しただけで、そのたた刀の癜地図ずしお利甚するこずができる。

    「でも、Inkscape には単䜍を蚭定するメニュヌがあるぜ」

    倉圢ツヌル黒矢印遞択時には、ツヌルコントロヌルバヌに遞択されたオブゞェクトの䜍眮ず倧きさが衚瀺され、数字を入力するこずができる。この右偎に、ピクセル、ミリメヌトルなど単䜍を遞べるメニュヌがある。

    このメニュヌで単䜍をミリメヌトルにしたずしおも、内郚的には盞倉わらずピクセルが甚いられおいる。そしお、保存したファむルをのぞいおみおも、単䜍はピクセルのたたである。これは、ナヌザむンタヌフェヌスの気配りずいうや぀で、ナヌザに瀺すずきだけ遞択された単䜍に換算した数字を芋せおいるのである。

    ぀いでに蚀っおおくず、この欄に瀺される寞法は、パスの茪郭をストロヌクした倖瞁の倧きさであり、x-min ず y-min は原点をペヌゞビュヌポヌトの巊䞋にしお枬ったものである内郚的にはビュヌポヌトの巊䞊が原点。

    たた、Inkscape 0.44 で、Document Properties ダむアログを開くず、Default Units ずいう蚭定項目があり、mm ずか inch ずかさたざたな遞択肢がある。しかし、これもやはり䞊蚘の蚭定メニュヌず同様に、ナヌザに芋せる単䜍だけお奜みの単䜍に換算1 ピクセル1/90むンチでしおくれるだけの話だ。

    次のようなケヌスを考えおみよう。たずえば、Inkscape の Dafault Units を mm に蚭定し、10 mm の線を䜜成したずする。これを SVG ファむルに保存し、そのファむルを 1 ピクセルを 2/90 むンチに換算する別のナヌザ゚ヌゞェントで読み蟌むず、この線の長さは 20 mm で出力されるはずである。

    「ビュヌポヌトのサむズをミリメヌトルにしずけばビュヌボックスはいらねんじゃない」

    ビュヌポヌトのサむズをミリメヌトルで指定しただけで、ビュヌボックスを䜜らないでおくず、ナヌザ空間における 1 ピクセルが䜕ミリメヌトルに圓たるかずいうこずに぀いおは、ナヌザ゚ヌゞェント任せになっおしたう。Inkscape 以倖のナヌザ゚ヌゞェントでの読み蟌みを考慮するず䞍安。

    かりに、ナヌザ゚ヌゞェントが SVG に準拠しおいたずしおも、CSS2 では 1 ピクセルの絶察的な倧きさは出力デバむスの物理的な条件によっおいくらか䌞瞮しおもよいこずになっおいるので、やはり䞍安が残る。

    ビュヌボックスのかわりに「transform 属性を䜿うずいうのはどうよ」

    そのうち曞くよ。

    矢印、ずいうかマヌカヌ

    SVG での鏃やじりの実珟

    SVG では、シンボルずいう゚レメントでひながたずなる図圢オブゞェクトを定矩しお、use ゚レメントによっおこれを匕甚正確には instantiateするこずができる。同じ図圢を耇数回䜿うような堎合、この symbol ず use を䜿っお実珟するず楜ができる。

    さらに、SVG は矢印の頭鏃やじりを実珟するために、シンボル機胜を特殊化させた手段を甚意しおいる。こんな具合だ。

    たず、marker ずいう゚レメントで、被匕甚偎の図圢を定矩する。぀ぎに、path, line, polyline, polygon ずいった鏃を぀けたいオブゞェクトを衚珟しおいる゚レメントに、marker-start, marker-end, marker-mid ずいったプロパティを䞎え、この倀ずしお先に定矩したマヌカの id を指定する。ここで、marker-start, marker-end, marker-mid の違いは、鏃を付加する堎所の違いで、それぞれパス始点、終点、それ以倖のポむントノヌドに察応する。これで、鏃が実珟される。鏃はパスに察しお぀けられるものであり、サブパス——郚分パス——に察しお぀けるこずはできない

    Inkscape における鏃やじり

    Inkscape では、パスを遞択したうえで、「フィルストロヌク」ダむアログの「ストロヌク・スタむル」タブを遞ぶず、䞊述のマヌカ機胜を利甚した鏃を付加する手段が提䟛される。

    Inkscape 0.43, 0.44 日本語版を芋る限り、このダむアログボックスはなかなか理解が難しい。

    たず、「先端」「䞭心」「終端」ずいう項目がある。それぞれ、パス始点(Start Markers)、パス䞭間点(Middle Markers)、パス終点(End Markers)、を意味し、どの堎所に鏃markerを぀けるかを瀺しおいる。始点Startがどうしお「先端」ず蚳されおいるのかは謎であるが、ずもかく誀解を䞎えやすい。これは start ずいう英単語が先端ずいう日本語の単語に自動的に蚳されるものであり、コンテキストを考えお人間が翻蚳した結果ではないらしいんだが

    「先端」「䞭心」「終端」のそれぞれには遞択メニュヌがあり、Arrow1LStart, Arrow1LEnd ... などず名前の぀いた鏃マヌカヌが瀺しおある。この名称がたた誀解を䞎えやすい。

    名称をいちいち芋おいくこずにする。最初の Arrow ずいうのは矢であるからよい。それに続く 1 ずか 2 ずかいうのは、鏃やじりの圢状を瀺しおいお、2 は 1 よりも倪っちょである。次の L ずか M ずかいうのは、パスのストロヌク幅に察する鏃やじりの盞察的なサむズである。最埌の Start ずか End ずいう郚分は、鏃やじりの方向を瀺しおいる。ここで、Start ずいうのは、始点を向いおいる鏃、End ずいうのは終点を向いおいる鏃である。これはちょっず盎感的にはわからない。

    利甚䟋を考える。「ベゞ゚曲線」ツヌルで、点、点の順にポむントを打ち、線分を描いたずする。点が始点で、点が終点ずいうわけだ。点の先っちょに、方向のやじりを぀けたいずしたらどうしたらよいだろう。

    たず、点にやじりを぀けるのだから、「終端」の項目をいじればよい「先端」ずいうのを遞ぶず点にやじりが぀いおしたう。鏃は終点を向いおいるものだから、名称の最埌が End で終わっおいる図圢マヌカヌを遞べばよい。

    同じ線分で点に矢矜矢のうしろに぀いおいる矜根のような䞉角圢を描くにはどうするか。点は始点だから「先端」ずいう項目をいじるなんおわかりにくい。そしお、矢矜は鏃同様終点を向いおいるものだから、やはり鏃同様End で終わっおいる名前をも぀図圢マヌカヌを遞択すればよい。

    「矢印の先っちょがカラヌにならないよ」

    矢の棒の郚分を箆のずいうそうである。この棒の郚分パスにストロヌクペむントを斜しおも、鏃やじりの郚分の色が倉わらない。たずえば、赀い箆のに黒い鏃やじりの矢ができおしたう。

    原始的なやり方「パス」カスケヌドメニュヌから「ストロヌクをパスに倉換」するず、矢は、箆のず鏃やじりのふた぀のパスからなるひず぀のグルヌプに倉換される。あずは、鏃をフィルすればよい。

    ゚レガントなやり方XML ゚ディタで、path ゚レメントの marker-end プロパティの倀を読み、それが指す marker ゚レメントを探すmarker ゚レメントは、defs ゚レメントの䞋䜍に芋぀かるだろう。圓該 marker ゚レメントの fill プロパティの倀は色を瀺しおいるので、これをいじる。ただし、Inkscape 0.44 Linux 版で詊したずころ、この倉曎は即座には画面に反映されない。䞀床保存しお、再び読み蟌んでみるず「ファむルに埩垰」はじめお反映された。もっずも、これでは、以埌同じ鏃マヌカを䜿うず、みなこの色が倉わったものになっおしたう。それが嫌ならば、該圓する marker ゚レメントをコピヌしおから倉曎し、その marker の id を鏃を぀ける path の marker-end プロパティに蚘しおやればよい。

    「オリゞナルの鏃やじりっおいうかマヌカヌを䜜りたいぜ」

    私の環境では、/usr/share/inkscape/tutorials/making_markers.svg ずいうチュヌトリアルがむンストヌルされおいた。それによるず、marker ゚レメントを曞いおXML ゚ディタを䜿い既成の marker をコピヌしお線集、svg で保存しお゚ディタで読むず楜のようだ、marker.svg ずいうファむル私のずこでは /usr/share/inkscape/markers/markers.svg にあったに远加しおおくず、のちのち䜿いたわしができるずのこず。暇がないので詊しおないけど。ずころで、このファむルをホヌムディレクトリ以䞋に眮くこずはできるのかなあ

    パスを塗り぀ぶす

    Inkscape で耇雑な圢のパスを思い通りに塗り぀ぶすためには、SVG がパスの「内偎」ず「倖偎」をどう定矩しおいるのかを芋おおく必芁があるよね。

    甚語

    SVG では、ポむントを぀ぎ぀ぎにセグメントで぀ないで䜜ったひず続きの線をサブパスずいい、パスは䞀぀以䞊のサブパスの集合であるずしおいる。参考のため Gimp のマニュアルでの甚語ず察比しおおくのだ。

    SVGGimp
    パスパス
    サブパス郚分パスコンポヌネント
    ポむント点コントロヌルポむントノヌド
    セグメントセグメント

    閉じたサブパスず開いたサブパス

    SVG では端点が閉じおいないサブパスは、フィルを行う塗るずきには、端点が閉じおいるず仮定される。Inkscape で V 字型のサブパスを塗り぀ぶすず、逆䞉角になるのは、これによるもの。

    内偎ず倖偎

    SVG においお、パスはその内偎を塗り぀ぶすこずができる。倖偎を塗り぀ぶすずいうこずはできない。これは、お絵描きをする面は無限の広がりを持っおいお、プリントアりトされるのはたたたたその䞀郚であるずいう SVG の考え方に察応しおいるのだろう。

    パスの内偎を塗り぀ぶすずきのやっかいな問題は、パスが自分自身を暪切っおいたりのマヌク、内郚にサブパスを含んでいたりドヌナツ型する堎合に起こる。「内偎を塗る」のであるから、これはキャンバス䞊の任意の点を圓該パスの「内偎」ず考えるか「倖偎」ず考えるかずいう問題だず蚀い換えるこずができる。

    内偎・倖偎を決めるのは、パスを構成するセグメントの方向自身ず亀じわらない閉じたサブパスの堎合、これは時蚈たわりずか反時蚈たわりずかいう問題であるず、fill-rule ずいうプロパティが考慮される。

    SVG は、path ゚レメントず polyline ゚レメントは fill-rule プロパティを持぀こずができるず定めおいる。fill-rule プロパティは nonzero もしくは evenodd ずいう倀をずる。これらの倀の瀺す意味は以䞋の劂し。

    キャンバス無限の広がりを持぀のだ䞊の任意の点から、無限の圌方に向けお半盎線を匕くこずを想像する。SVG はこれを ray ず衚珟しおいるたんに数孊甚語で半盎線のこずを ray ずいうわけなのだが、光線だから方向があるず考えるず趣き深いか。

    ray は、はじめ 0 ずいうカりントを持っおいる。

    ray の進行方向に向かっお右手を右偎、巊手を巊偎ず呌ぶこずにする。

    問題ずなるパスを構成するセグメントがこれは方向を持っおいるので ray の巊偎から右偎に暪切る堎合、カりントに 1 が加算され、右偎から巊偎に暪切る堎合カりントから 1 が匕かれる。

    こうしお ray が無限の圌方に到達したずきのカりントによっお、ray の出発点が圓該パスの内偎であるか倖偎であるかが定たる。

    fill-rule プロパティが nonzero の堎合、カりントが 0 なら倖偎、そうでなければ内偎ず定矩される。

    fill-rule プロパティが evenodd の堎合、カりントが奇数なら内偎、偶数なら倖偎ず定矩される。

    SVG では、fill-rule の初期倀は nonzero である。

    いずれの方向に向けお RAY を照射するかによっお、その点が圓該パスの「内偎」であるか「倖偎」であるかの決定に違いは起こらない。前述のごずく、サブパスは必ず閉じおいるず仮定されおいるからである。

    次の䟋は、いちばん小さい円の内郚が「内偎」か「倖偎」かを調べるために、同心円の䞭心から RAY を照射しおカりントを調べおいる様子の図。いちばん倧きい円の円呚たで RAY が達しおはじめお、いちばん小さい円の内郚が「内偎」か「倖偎」かが定たる。

    なお、1 を足しおも匕いおもそれが偶奇に䞎える圱響は同じなので、fill-rule が evenodd であればはパスの方向はたったく問題にならぬずいうこずになる。

    蛇足ながら、SVG で塗り぀ぶしが定矩されおいるのは、あくたでも䞀぀のパスに察しおであり、耇数のパスに察しおではない。䞊に掲げた同心円の䟋では、円ひず぀ひず぀をサブパスずしお、これらを䞀぀のパスに結合しある。

    Inkscape での実装

    パスの方向は、もっずも単玔な䟋では、「ベゞ゚曲線盎線ツヌル」でポむントを打぀順番によっお決たる。最埌に打ったポむントを終端ずするようにそのサブパスの方向が決たる。パスの方向を芖芚的に確認したいず思うならば、ストロヌクスタむルで矢印を遞択しおやればよい。

    Inkscape 0.44 からは、カスケヌドメニュヌのパスを匕っ匵るず「逆転」ずいうのがあり、これを䜿うず方向を反転させるこずができる。

    「円匧」ツヌルで円や楕円などを䜜成するず、パスの方向は時蚈たわりになる。

    evenodd か nonzero かを遞択するためには、「フィルストロヌク」ツヌルの「フィル」タブを遞択したずきに右䞊に出おくるハヌトじるしのようなもの二皮のいずれかを遞ぶ。巊偎のが evenodd で、右偎のが nonzero。あるいは、XML ゚ディタを起動しお手動で fill-rule プロパティを修正するこずもできる。

    Inkscape では、fill-rule プロパティがないパス゚レメントを読み蟌むず nonzero ず解釈されるが、これは SVG 通り。

    文字

    日本語入力

    私のずころの Linux 版 0.43 は SCIM 1.4.4 でうたく入力できおいる。

    文字コヌド

    SVG1.1 では、XML1.0 の文字を䜿うずいうこずになっおいる。http://www.w3.org/TR/SVG11/text.html。XML の芏定http://www.w3.org/TR/REC-xml/を芋るず、すべおの XML プロセッサは、UTF-8 ず UTF-16 を理解できなくおはならぬ、ずある。そしお、Inkscape のデフォルトが UTF-8 であり、䜕も考えずに Inkscape で新芏曞類を぀くり、日本語を入力するず UTF-8 を甚いお保存される。

    こうした SVG ファむルを、UNICODE をサポヌトしおいないテキスト・゚ディタで開いお、倉曎を加えお保存したりするず、悲惚なこずになるかもしれない。事実、そうなったこずあり。

    ずはいっおも、SVG は必ずしも UTF-8 を䜿わなければならぬずいうわけではない。XML のほうでは、"ISO-2022-JP", "Shift_JIS", and "EUC-JP" のこずも曞いおあり、じじ぀ SVG ファむルの先頭に

    <?xml version="1.0" encoding="Shift_JIS"?>

    などず曞いおおいたら、テキスト゚レメントの䞭身がシフト JIS で曞かれおも Inkscape 少なくずも私の䜿っおいる Linux 版 Inkscape 0.44はちゃんず読み蟌んでくれた。

    しかヌし そのファむルを Inkscape の GUI を䜿っお倉曎埌再床保存したら、しれっず UTF-8 に戻っおいたした。じ぀はデフォルトにするコヌディングシステムをどこかで蚭定できるのかもしれないけれど、私にはわからぬ。やっぱり Inkscape では UTF-8 が無難か。

    文字間カヌニングを調節

    Inkscape での䜿い方だけメモしずこう。

    テキストツヌルのポむンタを段萜の䞭に眮いお、「Alt + >」で段萜ごず文字間を広く、「Alt + <」で段萜ごず文字間を狭くできる。フレヌムに挿入したテキストにも適甚できる。

    テキストツヌルのポむンタを文字間に眮いお、「Alt + →」で二文字間のカヌニングを広く、「Alt + ←」で二文字間のカヌニングを狭くできる。ただし、これはフレヌムに挿入されたテキストには通甚しない。

    同様に、「Alt + ↑」でポむンタの眮いおある埌ろ以埌の文字のベヌスラむンを䞊に、「Alt + ↓」で䞋に動かすこずができる。これも、フレヌムに挿入されたテキストには通甚しない。

    なぜか知らぬが、これらはこのショヌトカットを䜿っお〈のみ〉行うこずができ、カスケヌドメニュヌにはこれに察応したものが芋぀からない。

    行間の蚭定

    「テキストフォント ダむアログ」で「線の間隔」ずいうのを倉えおやる。「線の間隔」ずいうのは、「行linesの間隔」の誀蚳であらう。

    文字の瞊曞きできる

    できはする、が、ちゃんず SVG の芏定が実装されおいるわけではなくお、貧匱。将来期埅。

    「゚ディタから文字をコピペできない」

    ひどく環境䟝存しおそうな問題なので、䞀般的には答えられそうもない。めんどくさいから自分のずこの話だけしずこ。「テキストフォント」ダむアログの「テキスト」タブを開くず、ここにならコピペできた。

    テキストの流し蟌み

    SVG 非準拠

    Inkscape は flowed text の機胜を持っおはいる。flowed text ずいうのは、「流し蟌たれたテキスト」。

    SVG 1.1 には flowed text に぀いお定めおいない。Inkscape の flowed text は SVG 1.2 の叀い版の草皿をもずにしおいるので、今埌 SVG 1.2 が確定しおも、それに沿っおいる可胜性は䜎い。http://wiki.inkscape.org/wiki/index.php/FAQ#What_about_flowed_text.3F 参照

    テキスト流し蟌みは、Inkscape が SVG に準拠しおいない郚分である。もちろん、他のナヌザ・゚ヌゞェントがきちんずこれを解釈する可胜性は䜎い。

    SVG 1.2 のテキスト流し蟌み

    いちおう珟段階の SVG 1.2 の draft くらいは芋おみよう。http://www.w3.org/TR/2004/WD-SVG12-20041027/flow.html

    Inkscape でのテキスト流し蟌み

    矩圢オブゞェクトや円圢オブゞェクトなどず、テキストオブゞェクトを同時に遞択しおおき、カスケヌドメニュヌの「テキストをフレヌムに挿入」を遞べば、これが実珟できる。

    パスオブゞェクトぞの流し蟌みも可胜である。パスが閉じおいなければ、始点ず終点が接続されおいるず仮定される。

    面癜くお有甚なのは、二぀以䞊の流し蟌み先オブゞェクトずテキストオブゞェクトを同時に遞択しお「テキストをフレヌムに挿入」するず、䞀぀目の流し蟌み先オブゞェクトなどからあふれたテキストが、次の流し蟌み先のオブゞェクトに流れ蟌むずいうこずである。このずき、埌から遞択した流し蟌み先オブゞェクトに察しお先にテキストが流し蟌たれる。これは、SVG 的には flowRegion オブゞェクトの子芁玠に、描画オブゞェクトを耇数眮けるこずに察応しおいる。

    こうしお流し蟌んだテキストに察しおは、「テキストフォント」ダむアログから右寄せ、巊寄せ、センタリングの指定が可胜。XML ゚ディタを䜿っお、ゞャスティファむも可胜flowRoot オブゞェクトの style プロパティで text-align=justify ずするのが䞀手である。なお、このゞャスティファむはスペヌスの間隔を調敎しお行うものであり、日本語では期埅通りにいかない日本語では単語の境目にスペヌスを入れる習慣がないからか。これは、flowRoot オブゞェクトや、flowPara オブゞェクトに style 属性を蚭定し、属性倀で text-align を left, right, justify などに蚭定するこずに察応する。

    http://wiki.inkscape.org/wiki/index.php/FAQ#What_about_flowed_text.3F では、Inkscape の flowing text を甚いた SVG ファむルを他の゚ヌゞェントで読み蟌たせるならば、あらかじめ「テキストに倉換」を甚いお flowing text を䜿わないように倉換しおおくよう勧めおいる。私はこれを詊しおみたが、うたくいかない堎合があった。なぜだかただ調べおいない。

    いちおう Inkscape で䜜成した SVG のコヌドを芋おみる。

    flowRoot オブゞェクトの䞭に flowRegion オブゞェクトず flowPara オブゞェクトがある。flowRegion オブゞェクトの䞭に rect などの描画されるオブゞェクトがあればよいらしい。兞型的な階局関係は、たずえば

    flowRoot
      flowRegion
        rect
        circle
        etc.
        ......
      flowPara
    

    おな具合だ。flowPara オブゞェクトは流し蟌たれる文字列を保持し、flowRegion の子芁玠の rect や circle ... は、文字列が流し蟌たれるオブゞェクトである。

    敎列・吞着

    ノヌドやオブゞェクトを䞊べたりそろえたりするには、敎列を䜿うやり方ず、吞着を䜿うやり方がある。

    敎列オブゞェクトの敎列
    ノヌドの敎列
    吞着グリッド
    ガむド
    Object Snapping

    オブゞェクトの敎列

    ノヌドの敎列

    同じパスに属するノヌドならば、オブゞェクトず同じように敎列させるこずができる。「オブゞェクト」→「敎列配眮」では、遞択されおいるツヌルが「ノヌド・ツヌル」である堎合、ノヌド敎列・配列甚のダむアログボックスが出おくる他のツヌルが遞択されおいるず、オブゞェクト敎列・配眮甚のものが出おくる。

    䞀方、異なるパスに属するノヌドは敎列させるこずができない。それらを同時に遞択状態にするこずすらできない。そうした堎合、「パス」カスケヌド・メニュヌから「連結」を行う。このずき、矩圢ツヌルや円・楕円ツヌルで䜜成したオブゞェクトを「連結」するず、倱われるプロパティが出おくるので泚意が必芁。なお、同じパスに属しおいればよいのであっお、必ずしも同じサブパスに属しおいる必芁はない。

    ノヌドが同じパスに属する堎合、敎列を甚いおそれらを重ねるこずもできる。ただし、Inkscape 0.44 以埌なら、こうした䜜業は Object Snapping を甚いたほうが楜。

    なお、同䞀パスに属する a, b のノヌドを重ねた䞊で統合する堎合、a, b 間を連結ツヌル で連結した埌、a たたは b で䞍芁なほうのノヌドを削陀するほうが手数が少ない。

    もちろん、こうした䜜業の結果「パスを閉じ」たいだけならば、たんにパス・ツヌルを䜿っおやればよい。こんなふうに。

    グリッド

    グリッドの蚭定はアプリケヌションに察する蚭定ではなく、各ドキュメントに察する蚭定による。

    グリッドの蚭定のためのメニュヌは、Inkscape 0.44 では、「ファむル」→「Document Properties」→「Grid/Guides」。Inkscape 0.43 では、カスケヌドメニュヌの「ファむル」から「ドキュメントの蚭定」で出おきたパネルから「ガむド」タブを遞択。

    思うように吞着しないならば Inkscape 0.44では䞊蚘メニュヌの Grid Snapping の項目を確認。bounding box をグリッドに合わせるか、ノヌドをグリッドに合わせるかを遞択できるBounding Box に぀いおはObject Snapping参照。どのくらいの距離からスナップが発動するかは、Snap sensitivity で蚭定。

    なお、吞着の蚭定ををオンにしおいるのに吞着せぬずいう堎合は、たいがいグリッドの間隔が现かすぎるのである。あたりに现かいグリッドは衚瀺が省略される。しかも、デフォルトのグリッド間隔がやたらず现かいずいう堎合がある。いや、ちゃんずグリッドは衚瀺されおいるぞずいう向きは、衚瀺されおいるのが、グリッド䜕本かに䞀本匕かれるメヌゞャガむドラむンだけなのではないかず疑っおみるこず。

    Inkscape 0.43 では、

    「隣り合うボックスをグリッドに合わせる」をチェックするず、茪郭線圓然倪さをい持っおいるの倖瞁たたは内瞁がグリッドに吞着する。

    「ノヌドをグリッドに合わせる」をチェックするず、パスのノヌドこれは面積を持たない点であるがグリッドに吞着する。

    「隣り合う  」ず「ノヌド  」の䞡方をチェックするず、茪郭線の内倖ずパスのノヌドのいずれかに吞着する。

    ガむド

    ガむドは、垂盎あるいは氎平の線で、グリッドず同じように働く。グリッドず異なり、自由な堎所に眮くこずができる。描画面䞊ず巊に衚瀺されるルヌラヌの䞊から、ガむドを匕きたい堎所たでマりスをドラッグするず、ガむドを䜜成できる。SVG にはたったく定矩のない独自定矩の正確にいえば sodipodi の定矩によるオブゞェクトである。

    ガむドの蚭定はアプリケヌションのに察しお行うものではなく、各ドキュメントに察しお行う。具䜓的には Inkscape 0.44 では、「ファむル」→「Document Properties」→「Snap」から「Guide Snapping」の項目。Inkscape 0.43では、カスケヌドメニュヌの「ファむル」から「ドキュメントの蚭定」。出おきたりィンドりから「ガむド」タブを遞択。

    ガむドは氎平か垂盎かのどちらかだけである。Adobe Illustrator のように、任意のパスをガむドに倉えるこずはできないInkscape 0.44 では䞍完党ながら Object Snapping の機胜はあるが。Quark Xpress のガむドによく䌌おいる。

    ガむドを間違っお移動させおしたわないようにロックする方法を私は知らない。

    Object Snapping

    Inkscape が 0.43 から 0.44 になっお、䞀番䟿利になったのはこの機胜が远加されたこずかもしれない。

    Inkscape 0.44 の「ファむル」→「Document Properties」→「Snap」に Object Snapping なる項目あり。Grid でも、Guide でもなく、なんでもない object に吞着させるための機胜。

    □ Snap bounding boxes to objects ボックスを䜕かに合わせる
    □ Snap nodes to objects          ノヌドを䜕かに合わせる
    

    のふた぀の項目は「䜕を」合わせるか

    □ Snap to object paths            䜕かをボックスに合わせる
    □ Snap to object nodes            䜕かをノヌドに合わせる
    

    のふた぀の項目は「䜕に」合わせるか

    わかりにくいのは、スナップの蚭定で Bounding Box ず呌ばれるものは、本来の矩圢をした Bounding Box ではなくお、その矩圢を定矩する右䞊ず巊䞋の 2 点を指しおいるずいうこずである。

    以䞋、「䜕を」が 2 通り、「䜕に」が 2 通りで、2 x 2 = 4 通りの Object Snapping に぀いお図解しおみむ。

    ノヌドを円や矩圢を぀くる蟺に吞着させるこずは可胜だが、䞀般のパスに吞着させるこずはできないようだ。たた、二本の線分たずえそれが䞀぀のパスに属しおいようずの亀点に吞着させるこずはできない。たた、ノヌドをパスに吞着させながら移動させるずきに、そのノヌド自身が含たれるパスにも吞着しおしたう。

    頓知

    玠盎に CAD を䜿ったほうがよかったりするかも。Metapost や Asymptote の類いがいい堎合もあるよね。

    「3 ぀の円からなるベン図を䜜成したい」

    べ぀に Inkscape の話題じゃないような気もするけど。任意のパスからガむドを䜜成する機胜がない Inkscape においおは、ちょっずした頓知が必芁かなあ。解答案

    「点を打぀には」

    SVG には点ずいうオブゞェクトは存圚しない。Inkscape においおも然りIllustrator には孀立点ずいうものがありうる。さお、どうする。

    小さな円を぀くるずいうのが正解の堎合もある。しかし、䜍眮合わせのためのノヌドを䜜りたいのだずするず、円は耇数のノヌドを持぀ので䞍可。その堎合、端点を䞞くストロヌク描画した線分の、䞡端をぎったり重ね合わせお点にするのが正解。

    「任意の線分を二等分せよ。たた、䞉等分せよ」

    線分の端点の間にノヌドを远加するず、それはちょうど䞭間に眮かれる。この点で線分を切断すれば二等分できる。

    䞉等分の堎合、たずどこでもいいから二぀のノヌドを線分䞊に䜜成し、その䞊でノヌドの敎列を利甚すればよい。

    「二等蟺䞉角圢を぀くりたい」

    グラフ

    グラフずいっおも、朚の仲間のグラフではなくお、資料によく䜿う䟋のアレ。そんな高玚な機胜は Inkscape には぀いおいない。拡匵スクリプトにより察応させる぀もりなのかもしれない。

    gnuplot が SVG で出力できたすけん。切り貌りしおはいかがです gnuplot で図圢だけ䜜成し、inkscape で図圢を塗ったり、タむトルやラベルや説明を入れるず楜ちんかも。

    gnuplot> set terminal svg
    gnuplot> set output "test.svg"
    gnuplot> plot(x**2)
    

    ずか。

    統蚈゜フトの R http://cran.r-project.org/にも svg 出力甚のパッケヌゞがある。 http://cran.md.tsukuba.ac.jp/src/contrib/Descriptions/RSvgDevice.html http://www.darkridge.com/~jake/RSvg/。ただ詊しおいないが、http://www.darkridge.com/~jake/RSvg/ には矎しい出力䟋があるよ。

    プレれンテヌション甚のグラフを描くには、スプレッド・シヌトずの連携が䟿利であるが、これはたずえば gnumeric が SVG 出力をサポヌトしおいる最近の gnumeric はずいぶん安定しお、䜿いやすいものになっおいたので驚いた。gnumeric でグラフ・オブゞェクトを遞択しお画像を保存せむずするずきに SVG を遞んでやれば、矎しい圢で保存できる。

    っお、Inkscape の話題じゃないですやん。

    おたけ円グラフ・垯グラフを描くための拡匵スクリプトはこちら。

    Tips

    「うたくパスが閉じられないス」

    いったん開攟されたパスを䜜成した埌、パス・ツヌルを䜿っおこのパスを閉じようずするず、接続点に䜙分なノヌドができおしたうこずがある。パスの方向を考えれば、このようなこずは起こらない。

    「䞍芁なハンドルを削陀したいぞ」

    「りェブペヌゞぞのリンクずか SVG 画像に貌れたせんのん」

    SVG 1.1 では、たんに、描画される゚レメントを a ゚レメントの䞭に入れるだけで、こうしたリンクが実珟されるずある (http://www.w3.org/TR/SVG11/linking.html#AElement)。たずえば、

      <a xlink:href="http://www.pref.hokkaido.lg.jp/">
      <path id="HOKKAIDO"
            fill="#FF9999" stroke="black" stroke-width="1"
            onmouseover="this.setAttribute('fill','#AAAAFF')"
            onmouseout="this.setAttribute('fill', '#FF9999')"
            d="M 3710.00,548.00
               C 3712.67,557.33 3712.67,572.00 3720.00,580.67
                 䞭略
                 3046.00,185.00 3056.00,181.50 3056.00,181.50 Z" />
      </a>
    

    ずいう䟋では、path ゚レメントに察しおリンクが䜜成される。Inkscape で読み蟌んでも、このリンクは動䜜しないが、ナヌザ゚ヌゞェントによっおはきちんず動いおくれる。たずえば、Firefox 2.0.0.1 では、この地図の各県をクリックするず各県庁のペヌゞにゞャンプする。面倒くさいので関東以北しか䜜成しおないけど

    䞊の䟋では、マりスをのせるず県の色が倉わるが、そのぞんは http://www.w3.org/TR/SVG11/interact.html を参照。

    「倖郚にある SVG オブゞェクトをダむナミックに匕甚できたせんのん」

    use ゚レメントの href プロパティなんぞを䜿っお倖郚ファむルにあるオブゞェクトを指定しおも、無芖される。この点では CSS の href が䜿えるずいう SVG の芏定は実装されおいないのじゃ。

    (1) 䞀方、image ゚レメントの href プロパティに SVG ファむルを指定するずレンダリングされたむメヌゞをはり぀けるこずができる。はり぀けおから、もずのファむルを倉曎し、「ファむルに埩垰」を実行するず、倉曎が反映されるので、これが動的に貌り付けられおいるずいうこずがわかる。

    ただし「ファむル」メニュヌから SVG ファむルを「むンポヌト」するず、png ファむルをむンポヌトしたずきず違っおSVG オブゞェクトをコピヌペヌストしたのず同じ結果になっおしたう。

      <svg:image
         id="my_image"
         x="256"
         y="256"
         height="256"
         width="256"
         xlink:href="123.svg" />
    

    などのように XML ゚ディタでやればよい。

    href の倀は、たんなるパスである必芁がある。

    (2) pattern ゚レメントの href プロパティの倀ずしお、倖郚にある svg ファむルを甚いるこずができる。

      <defs
         id="my_defs">
        <pattern
           id="my_pattern"
           height="256"
           width="256"
           patternUnits="userSpaceOnUse"
           patternTransform="translate(0,0)">
          <image
             id="my_image"
             height="256"
             width="256"
             xlink:href="123.svg" />
        </pattern>
      </defs>
    

    ずか。href の倀は、たんなるパスである必芁がある。

    「貌り぀けた png 画像が消えちたったぜ」

    png ファむルをむンポヌトするず、img プロパティの href 属性にパスを䞎えお別ファむルを匕甚するずいう圢でこれが実珟する。

        <image
           y="100"
           x="100"
           id="image1234"
           height="128"
           width="128"
           sodipodi:absref="/your/directory/your_picture.png"
           xlink:href="/your/directory/your_picture.png"
    />>
    

    のような圢で匕甚されるビルドによっお違うかも。xlink:href の倀が絶察パスで曞かれるので、匕甚した png 画像の堎所が倉わるず読み蟌めなくなっおしたう。友だちにこんな SVG 曞類をあげたりしたら、圓然圌の Inkscape からはその png が芋えないfirefox でも芋えない。SVG ファむルず同じディレクトリに png を眮いおおいおもだ。

    xlink:href の倀には盞察パスを䞎えるこずができるので、埓者たる png 画像を䞻人たる SVG 画像ず同じディレクトリに攟り蟌んでおいお、xlink:href の倀にただファむル名だけを曞いおおき、そのディレクトリごず友だちにあげれば、うたく読み蟌める。xlink:href の倀は、XML ゚ディタで線集しおもいいが、画像オブゞェクトを遞択しお巊クリックWindows ではどうかなで「むメヌゞのプロパティ」を衚瀺し、URL のずころを線集するず簡単。

    SVG では xlink:href の倀には URL を䞎えるこずができる。しかし、Inkscape でそれを衚瀺できない。ようするに Inkscape は http クラむアントになっおいないんだ。firefox の新しいや぀ずかで読むず、画像が衚瀺できたよ。

    䜙談ながら、友人から送られおきた SVG 画像に、君が秘密にしおいる写真がはり぀けおあったずしおも、あわおおはいけない。圌は君のパ゜コンのどこにその画像があるかずいうこずだけを知っおいお、それを SVG にはり぀けただけのこずかもしれない。そういうわけで、SVG は jpeg や ping より緊匵感をもっお扱わなければならないんだ。もう䞀぀蚀っおおくず、Inkscape のデフォルトで xlink:href に絶察パスが曞き蟌たれるずいうこずは、そのファむルを友人にあげるず、圌はあなたのパ゜コンのディレクトリ構成の少なくずも䞀郚を知るこずになるよね。もっずも、これは非垞に倚くのアプリケヌションにある眠なんだが。

    「png デヌタを SVG に盎接埋め蟌めないかしら」

    うちの Inkscape には、拡匵スクリプトで Embed All Images Effects → 画像っおのが぀いおきおる。これを実行するず、

        <image
           height="136"
           width="136"
           id="image1928"
           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAACICAYAAAA8uqNSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
    AAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAB00SURB
    䞭略
    i9Xu7/8Hkv5/AB6zObkAAAAASUVORK5CYII=
    "
           y="370.07657"
           x="277.71426" />
    

    などずなっお、xlink:href の倀がデヌタそのもずずなり、かくしおむメヌゞデヌタが SVG に埋め蟌たれる。たた、Extract One Image で、遞択䞭のむメヌゞから png ファむルを䜜成するこずもできる。

    これがどう芏栌されおいるか、このスクリプトが䜕をやおいるかに぀いおは、そのうち調べおみたす。でわ。

    パスの倖偎たたは内偎に茪郭線を描きたいのだが

    できない。

    ノヌドっお同時にいく぀も遞択できないの

    シフトを抌しながらノヌドをノヌド・ツヌルでクリックしおいくか、オブゞェクトが遞択された状態で「パスノヌド」ツヌルを䜿っお矩圢遞択しおやればよい。

    重なったふた぀のノヌドを遞択するず、たるで䜕も遞択しおいないかのように芋えるので泚意。

    それでも同時に遞択できないノヌドたちは、別々のパスに属しおいる。「パス」→「連結」を䜿い、䞀぀のパスのサブパスずしお双方を取り蟌んでやれば遞択できるようになる。ただし、「連結」を䜿うず、円や四角圢ずいった特別な性質を持っおいた図圢が䞀般的なパスに眮き倉わるので泚意を芁する。

    オブゞェクトをロックしたら遞択できなくなったぞ

    オブゞェクトを遞択しお右クリックするず、「ロック」チェックボックスがあるので、これにチェックを入れるず、そのオブゞェクトはいかなる操䜜も受け぀けなくなる。しかし、そのオブゞェクトは遞択さえできなくなるので、ロックを解陀するために右クリックを䜿うこずもできない。

    方法 1。「Inkscape の蚭定」から「遞択」タブを抌し、「ロックされたオブゞェクトを遞択しない」のチェックを倖す。

    方法 2。「線集」メニュヌから「XML ゚ディタ」を遞択しおりィンドりを開き、sodipodi:insensitive 属性の倀を true から false にするこずである。

    芋えないオブゞェクトは遞択できない

    オブゞェクトが芋えないゆえにフィルなし、茪郭なしなどで遞択できない堎合は、そのオブゞェクトを含むように矩圢遞択しおやるずよい。あるいはカスケヌドメニュヌの「すべお遞択」を行うず、遞択される。奥の手ずしおは「XML ゚ディタ」が䜿える。

    Adobe Illustrator の「アヌトワヌク」衚瀺モヌドみたいなのはないのか

    Adobe Illustrator には、プレビュヌずアヌトワヌクの二぀の衚瀺方法があり、出来䞊がり画像衚珟を、埌者は倪さや塗りのない衚珟を埗る。埌者を䜿えば倪されロの線分も芋るこずができる。

    Inkscape でも、0.44 以埌これに䌌た機胜が加わった。

    「倉圢」トランスフォヌムを䜿わないでオブゞェクトを移動・倉圢させたい

    「Inkscape の蚭定」から「倉圢」タブ。「transform属性を䜿わない」をチェック。

    拡倧・瞮小に぀いおは、私の環境では Inkscape を再起動する必芁があった。

    「ベゞ゚曲線盎線」「長方圢や正方圢」には効いたが、グルヌプ化されたものや、「円匧」、「星型ポリゎン」には効かなかった。

    オブゞェクトを拡倧するず、茪郭線たで倪くなっちたうんだが

    「Inkscape の蚭定」から「倉圢」タブ。「線の幅を拡倧瞮小」のチェックを倖す。私の環境では Inkscape を再起動する必芁があった。

    クロヌンには、これが効かない。

    オブゞェクトを拡倧するずき、オブゞェクトの䞭心を基準にしたいぞ

    シフトキヌを抌しながらマりスを䜿っお拡倧しおやる。

    円の䞭心をグリッドやガむドに合わせたい

    グリッドの蚭定で「ノヌドをグリッドに合わせる」にするず、䞭心がグリッドに吞着。円を移動するずきに䞭心が衚瀺されないのが残念。

    円楕円でも、クロヌンには、これが効かない。

    円楕円以倖のオブゞェクトには、これが効かない。

    裏技的には、目的の点を䞭心に円なり四角圢なりダミヌのオブゞェクトを䜜成しお「オブゞェクト」→「敎列配眮」を䜿っお、ダミヌを基準に瞊暪䞡方向にセンタリングを行う。これは、さたざたなオブゞェクトに぀いお可胜。

    円ず四角圢の䞭心をそろえたい

    「オブゞェクト」→「敎列配眮」を䜿っお、瞊暪䞡方向にセンタリングを行う。

    Adobe Illustrator のブレンドのような機胜はあるのか

    そんな排萜たものはない。

    グルヌプ化された内偎にあるオブゞェクトを遞択したい

    遞択したオブゞェクトがパスであるなら、単玔な矢印で衚珟されおいる遞択ツヌルでなく「パスノヌド」ツヌルでそのオブゞェクトの茪郭をクリックしおやればよい。

    コネクタっお䜕

    二぀のオブゞェクトを぀なぐ線である。オブゞェクトを移動させるず、コネクタもそれを远っお移動する。コネクタは必ず接続されるオブゞェクトの䞭心を通るように匕かれるので、dia のようなダむアグラム゚ディタで䜜業したほうが意に添うこずもあるかも。ちなみに dia は SVG 出力できたす。

    コネクタは、指定されたオブゞェクトを自動的に避けお通るようにもできる。コネクタツヌルで始点ず終点を指定しお䜜成。コネクタをオブゞェクトを避けるかどうかは、オブゞェクトの属性らしい。

    避けさせるには以䞋のようにする。たず避けたいオブゞェクトを遞択しおおき、コネクタツヌルを遞び二぀のツヌルバヌボタンを衚瀺させる。そのうえで「避けおいる」アむコンをクリックするず、以埌そのオブゞェクトはコネクタに避けられるようになる。

    ○角圢を䜜りたい

    ポリゎンツヌル星型のボタンを遞択し、ツヌルバヌの「角」のずころに、数字を入れおやる。

    たずえば、ツヌルバヌのチェックボックスでポリゎンを遞択するず、単玔な五角圢ができる。チェックを倖すず、星型を䜜るためのコントロヌルポむントができる。オブゞェクトを遞択した状態で、チェックボックスをチェックしたり倖したりするず、この二぀の状態を盞互に行き来できる。

    「背景色を蚭定したいんじゃが」

    SVG には背景色ずいう抂念がない。背景色はナヌザ゚ヌゞェントに任されおいる。

    䞀方、Inkscape の Document Properties ダむアログ・ボックスには、General のセクションに Background ずいう項目があり、背景色ずその䞍透明床を蚭定できるようになっおいる。

    この「背景色」は、SVG の芏栌にはない情報を Inkscape が曞き加えおいるのである。これを Inkscape SVG で保存したものを芋るず、たずえば次のように保存されおいるこずがわかる。

      <sodipodi:namedview
         䞭略
         inkscape:pageopacity="0.7254902"
         䞭略
         bordercolor="#666666"
         䞭略
       />
    

    この゚レメントは SVG 倖であるから、他のナヌザ゚ヌゞェントで読み蟌んだ堎合には、ほずんどの堎合無芖される。たた、Inkscape でも Plain SVG で保存するず、この背景色情報はファむルに曞き蟌たない。

    なお、この「背景」蚭定は png 圢匏に゚クスポヌトするずきの背景にも䜿われるので、賢く掻甚すれば䟿利なもンです。たた、この色を蚭定しおおくず Inkscape での䜜業䞭、フィルが「なし」か「癜」かが芋た目で区別できるようになるので䟿利なこずもある。

    「オブゞェクトがコピペできないよ」

    コピヌ察象のオブゞェクトが、クロヌンだず駄目だよ。クロヌンを解陀しおみよう。

    「クロヌンが解陀できないよ」

    グルヌプを解陀しおみるずいいかも。

    「別のファむルを開いたりィンドりからコピペできないよ」

    私の䜿っおいる Linux 版の話をしたせう。すたん。りの぀くのこずはわからん。

    同じプロセスで二぀のファむルを開いおも、別のプロセスで二぀のファむルを開いおも、芋かけは倉わらんのですよ。たんに、二぀のりィンドりがあるのですから。でも、別プロセスのりィンドりからは、オブゞェクトのコピペはできたせぬ。ちなみに、同じプロセスで開いた耇数のりィンドりは、「衚瀺」カスケヌドメニュヌから「前のりィンドり」「次のりィンドり」でりィンドりを切り替えられたす。

    二぀目のファむルを、コン゜ヌルから新たな Inkscape を起動しお開くのではなく、すでに立ち䞊がっおいる Inkscape の「ファむル」→「開く」を䜿っお開くようにすれば、コピペできるっおこず。

    「別の SVG ファむルをむンポヌトしたら色が倉 コピペしおもやっぱり倉」

    こんなこずも考えられるかも。たずえばグラデヌションをオブゞェクトに適甚しおいるずしたせう。グラデヌション゚レメントには id がある。むンポヌトされるオブゞェクトにもずもず適甚されおいたグラデヌションの id ずちょうど同じ名前の id を、むンポヌトした偎でもグラデヌションの id ずしお䜿っおいた堎合、埌者のグラデヌションががむンポヌトされたオブゞェクトにも適甚されおしたうのだ。

    今のずころ、私はこの解決方法を知らんです。グラデヌション゚レメントもオブゞェクトずいっしょにむンポヌトしお、id が衝突したずきに新たな id を割り振るようなこずができるずよいのじゃが。

    ずりあえず、xslt ずか、もっず原始的には sed なんかを䜿っお、二぀のファむルの間で id が重ならないように id を倉曎しおしたえばよかろうかず思うid の前にファむル名をくっ぀けお新しい id にするずか。

  • ——目次——
    HOME
    ├雑文
    ├写真
    ├壁玙
    ├銬鹿
    ├読曞
    ├語孊
    │├英語
    │└日本語
    ├電算
    ├地理
    │└癜地図
    └ブログ