mhchemについて

mhchemについて

- Edward Elric の投稿
返信数: 8
¥documentclass{jsarticle}
¥usepackage[version=3]{mhchem}

¥begin{document}
¥ce{PbCl2 ->[熱湯に溶解] Pb^2+ + 2Cl-}
¥end{document}

と入力したのですが、エラーが出ました。
「熱湯に溶解」の日本語の部分がうまく処理されていないようです。
どう対処したらよいでしょうか。
Edward Elric への返信

Re: mhchemについて

- 本田 知亮 の投稿
エラーメッセージくらいは載せましょう

\documentclass{jsarticle}
\usepackage[version=4]{mhchem}
\begin{document}
\def\x{熱湯に溶解}%
\ce{PbCl2 ->[\x] Pb^2+ + 2Cl-}
\end{document}

日本語が通らないときにこの手をよく試します.

ちなみに「円マーク」か「バックスラッシュ」かは
よく確認しましょう
#Macだと0x5C周りで状況によっては
#なにか起きることがあるんでしたっけ
Edward Elric への返信

Re: mhchemについて

- aminophen の投稿
出ているエラーというのは

! Invalid code (51118), should be in the range 0..255.
__tl_analysis_disable_loop:N ...ex_lccode:D 0=`#1
                                                  tex_lowercase:D {tex_let:D...
l.4 \ce{PbCl2 ->[熱湯に溶解] Pb^2+ + 2Cl-}

ですね。同じようなソースを昔コンパイルした時は ok だった気がしますが,
expl3 の挙動が変わったのでしょうか?
aminophen への返信

Re: mhchemについて

- Dora TeX の投稿
詳しく追跡していませんが,mhchem が version 4 から expl3 を使うように変わり,その影響で日本語がそのままでは使えなくなったようですね。
(TeX Live 2016 の最新版に古い mhchem v.3.11 を復元してコンパイルしてみたら日本語が通りました。)
Dora TeX への返信

Re: mhchemについて

- Z. R. の投稿

「l3regex で和文文字トークンが扱えない」のが直接の原因のよおうです。

\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{expl3,l3regex,xparse}
\ExplSyntaxOn
\NewDocumentCommand \TEST { m }
  {
    \tl_set:Nn \l_tmpa_tl {#1}
    \regex_replace_all:nnN { some } { ful } \l_tmpa_tl
    \l_tmpa_tl
  }
\ExplSyntaxOff
\begin{document}

\TEST{{\TeX} is awesome!}% OK

\TEST{{\TeX} is 超 awesome!}% ダメ

\end{document}
Z. R. への返信

Re: mhchemについて

- aminophen の投稿
> 「l3regex で和文文字トークンが扱えない」

分析ありがとうございます。
https://github.com/latex3/latex3/issues/363
にて報告したところ、Z.R. さんのソースで Invalid code が出る現象を解消していただくことが
できました。(TeX Live 2017 リリースの DVD に間に合うようにリリースしてくれるかも。)

本題の mhchem のほうは、この l3regex の問題が解決しても

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! mhchem error: "cf/unexpected-input"
!
! Assertion failed: Unexpected input character. In case you think this is a
! bug, please contact the package author.
!
! See the mhchem documentation for further information.
!
! Type <return> to continue.
!............................................... 
                                                 
l.4 \ce{PbCl2 ->[熱湯に溶解] Pb^2+ + 2Cl-}
                                             
?

で弾かれます。mhchem が何をチェックして Assertion failed を出そうと意図しているかは未調査です。
aminophen への返信

Re: mhchemについて

- aminophen の投稿
先ほどの投稿で、ひとつ書き忘れました。

l3regex の問題が解決した場合、mhchem のオプションで version=3 を指定した場合

\documentclass{ujarticle}
\usepackage[version=3]{mhchem}
\begin{document}
\ce{PbCl2 ->[熱湯に溶解] Pb^2+ + 2Cl-}
\end{document}

は ok になります。一方、version=4 を指定した場合

\documentclass{ujarticle}
\usepackage[version=4]{mhchem}
\begin{document}
\ce{PbCl2 ->[熱湯に溶解] Pb^2+ + 2Cl-}
\end{document}

は先ほどの投稿に書いたとおり Assertion failed になります。
version=4 は version=3 に比べて regex 適用箇所が増えているということのようです。
l3regex などの修正版がリリースされた場合、しばらくは version=3 でしのぐとよいかも?
aminophen への返信

Re: mhchemについて

- aminophen の投稿
Twitter で Z.R. さんの suggestion をみて理解しました。
矢印の添え字の文法が変わっているのですね。

\documentclass{ujarticle}
\usepackage[version=3]{mhchem}
\begin{document}
% version 3 syntax: none for math, C for chemicals, T for texts
\ce{A ->C[+H2O] B}\par
\ce{A ->[\Delta] B}\par
\ce{A ->T[Hot water] B}\par
\ce{A ->T[熱湯に溶解] B}\par
\end{document}

\documentclass{ujarticle}
\usepackage[version=4]{mhchem}
\begin{document}
% version 4 syntax: none for chemicals (and alphabet-only texts?), $...$ for math, {} for texts
\ce{A ->[+H2O] B}\par
\ce{A ->[$\Delta$] B}\par
\ce{A ->[{Hot water}] B}\par
\ce{A ->[{熱湯に溶解}] B}\par
\end{document}

これなら、修正版 l3regex ですべて ok になります。
テキストを {} で囲まなくても大体 ok にするため、regex で a-zA-Z だけ {} なしでも
動くようにサポートしている(したがって {} なしでは日本語がエラー)のかもしれません。