LaTeXで電子式を描きたい

LaTeXで電子式を描きたい

- S. Ichijo の投稿
返信数: 11

電子式を描きたいのですが、良い方法はありますか?

以前はTikZを使って描いていましたが、位置調整などが大変で、最近は他のソフトウェアで描いたものを画像にして取り込んでいます。

しかし、本音としては、やはりLaTeX上で完結させたいです。

何か良い方法はあるでしょうか。具体的には、添付画像のような電子式が作成したいです。

添付 CH4.png
S. Ichijo への返信

Re: LaTeXで電子式を描きたい

- S. Ichijo の投稿
別の例です。

良い方法がありましたら是非教えてください。
添付 N2.png
S. Ichijo への返信

Re: LaTeXで電子式を描きたい

- 北見 けん の投稿
詳しくないですが、XyMTeXのマニュアルによると、描けるみたいです。
添付 XyMTeXマニュアル.jpg
北見 けん への返信

Re: LaTeXで電子式を描きたい

- S. Ichijo の投稿
ありがとうございます。試してみます。
S. Ichijo への返信

Re: LaTeXで電子式を描きたい

- 北見 けん の投稿
試してみているということなので、蛇足となりますが。
XyMTeXマニュアルの他のページには3重結合の場合も載っていますが、
6個の電子の並べ方が上記の例とは縦横を転置したような形ですね。
ご希望のものとは異なるみたいです。
(本当に蛇足なので、返信などは無用です)
添付 XyMTeXマニュアル2.jpg
S. Ichijo への返信

Re: LaTeXで電子式を描きたい

- 奥村 晴彦 の投稿
私も詳しくないですが chemfig のマニュアルにも Lewis formula について記述があるようです(texdoc chemfig)。
奥村 晴彦 への返信

Re: LaTeXで電子式を描きたい

- S. Ichijo の投稿

奥村先生

ありがとうございます。 chemfigは私も構造式を書くとき利用しているのですが、所望のスタイルの電子式は描きにくく、あまりサポートされていない印象があります。

package documentationを見る限り、線を使わずに点のみで結合を表現することは想定していないような印象を受けます。

一応、CH4の電子式であれば、以下のようにすればそれっぽくはできるのですが、上で提示させていただいたようなN2の電子式を描くのは、少なくとも私の力量では難しいです。

\chemfig[bond style={draw=none}, atom sep=1em]{
    H
    -\Charge{0=\:, 90=\:, 180=\:, 270=\:}{C}
    (-[:90]H)
    (-[:270]H)
    -H
}

念のためこれの出力を載せておきます。

\documentclass{standalone}
\usepackage{chemfig}

\renewcommand*{\printatom}[1]{\ensuremath{\mathsf{#1}}}

\begin{document}
\chemfig[bond style={draw=none}, atom sep=1em]{
    H
    -\Charge{0=\:, 90=\:, 180=\:, 270=\:}{C}
    (-[:90]H)
    (-[:270]H)
    -H
}
\end{document}

とした際の出力となります。

S. Ichijo への返信

Re: LaTeXで電子式を描きたい

- takamasa 23 の投稿

日本語で書かれたものであればこちらがまとまっており, 参考になると思います。

takamasa 23 への返信

Re: LaTeXで電子式を描きたい

- S. Ichijo の投稿

ありがとうございます。

私も実はchemfigを知ったのはそちらの記事がきかっけでした。

ただし記述されている内容が古く、現在\lewisは標準では使えなくなっています。


As announced since version 1.5 of 5/3/2020, the deprecated macros lewis and Lewis are no longer available in the chemfig package. The recommended method for drawing Lewis formulas is to use \charge and \Charge, see page 33.

If the use of the macros lewis and Lewis is indispensable, their code is in the file chemfig-lewis.tex which it is possible to load using input, after having loaded the package chemfig.


\Chargeを用いて

\chemfig[bond style={draw=none}, atom sep=1em]{
    H
    -\Charge{0=\:, 90=\:, 180=\:, 270=\:}{C}
    (-[:90]H)
    (-[:270]H)
    -H
}

とすればCH4に関してはそれっぽくはなるのですが、少なくとも私の力量ではN2の電子式を描くのは難しいです。

S. Ichijo への返信

Re: LaTeXで電子式を描きたい

- みなも の投稿
既存のスタイルファイルで良いものが無いなら,マクロを組んでしまうのはどうでしょう。
縦2個,縦3個,横2個の 3 種の点の並びさえ定義すれば,あとは tabular 環境や array 環境でなんとかなるものです。

例えばこんな感じ。
(\lower の後ろの数字で全体の上下調整,\noalign の中の数字で点の間隔調整です。
お好みで調整してください。)

%%%%%%%%%%%%%%%%%%% ここから %%%%%%%%%%%%%%%%%%%
\makeatletter
\def\Ttwo{\hbox{\lower0.4ex\vbox{%
  \baselineskip=\z@ \lineskip=\z@ \tabskip=\z@
  \halign{$\mkern2mu##\mkern2mu$\cr\cdot\cr\noalign{\vskip0.2ex}\cdot\cr}%
  }}}
\def\Tthr{\hbox{\lower0.6ex\vbox{%
  \baselineskip=\z@ \lineskip=\z@ \tabskip=\z@
  \halign{$\mkern2mu##\mkern2mu$\cr\cdot\cr\noalign{\vskip-0.25ex}\cdot\cr
          \noalign{\vskip-0.25ex}\cdot\cr}}}}
\def\Ytwo{\hbox{${\cdot}\mkern4mu{\cdot}$}}
\makeatother

\begin{tabular}{@{}r@{}c@{}l@{}}
        & \Ytwo        \\[-2mm]
  H\Ttwo & Cl    & \Ttwo \\[-2.5mm]
        & \Ytwo
\end{tabular}

\begin{tabular}{@{}r@{}c@{}l@{}}
        & H              \\[-2mm]
        & \Ytwo          \\[-2mm]
  H\Ttwo & C    & \Ttwo H \\[-2.5mm]
        & \Ytwo          \\[-2mm]
        & H
\end{tabular}

\begin{tabular}{@{}c@{}c@{}c@{}c@{}c@{}}
  \Ytwo &            &  &            & \Ytwo \\[-2mm]
  O    & \Ttwo\Ttwo & C & \Ttwo\Ttwo & O
\end{tabular}

\begin{tabular}{@{}c@{}c@{}c@{}}
  \Ytwo &            & \Ytwo \\[-2mm]
  N    & \Tthr\Tthr & N
\end{tabular}
%%%%%%%%%%%%%%%%%%% ここまで %%%%%%%%%%%%%%%%%%%

個人的には,定義中の \cdot は \bulett にして元素記号を \large か \Large にするのが好みです。(もちろん定義中の数値は再調整。)
実際,共有電子対と非共有電子対を色分けしようとか考えると,\bullet くらいじゃないとよく見えませんので。

あと,tabular や array で @{} や \\[-2mm] を毎回打つのが面倒なら,halign 環境でマクロか環境を構築するのもありかと。
実際,自分が普段使うときはそうしています。

そういえば,窒素の電子式の3重結合部分は,僕が高校生の頃は横3縦2だったのが,現在の高校の教科書では横2縦3になってますね。
S. Ichijo への返信

Re: LaTeXで電子式を描きたい

- 奥村 晴彦 の投稿

たいへん申し訳ないことに、トラブルで ya ra さんからの投稿が一つ消えてしまいました。内容を再現しておきます:

もうすでに解決されているかもしれませんが、個人的に興味が出たので三重結合について調べてみました。

Google で画像検索 すると、求めているような三重結合の例が LaTeX Stack Exchange で見つかりました。

どうやら、三重結合は \. を適当に角度を調整して表現するようです。

\documentclass[border = 5pt]{standalone}
\usepackage{chemfig}
\begin{document}

\chemfig{
  \charge{180 = {\:}, 0 = {\.}, 25 = {\.}, 335 = {\.}}{N}
  \hspace{0.6em}
  \charge{0 = {\:}, 180 = {\.}, 155 = {\.}, 205 = {\.}}{N}
}

\end{document}

ただ、これだと面倒だなと感じたので、\definesubmol を利用して ⋮⋮ を定義してみました。 本当は \charge 内で 3 つの電荷を表現できた方が良いと思いますが、\charge 内の新しい電荷の表現を作成することは出来ないようでした。

\documentclass[border = 5pt]{standalone}
\usepackage{chemfig}
\definesubmol{@}{
  \hspace{0.3em}
  \charge{
    0 = {\.}, 60 = {\.}, 300 = {\.},
    180 = {\.}, 120 = {\.}, 240 = {\.}
  }{\vphantom{X}}
  \hspace{0.3em}
}
\begin{document}

\chemfig{
  \charge{180 = {\:}}{N}
  !@
  \charge{0 = {\:}}{N}
}

\end{document}