将代码从Mathematica复制到其他平台的已知问题?

时间:2011-04-15 12:50:28

标签: wolfram-mathematica mathematica-frontend

我刚注意到如果你在MMA(8.0.1 / win7-64)中有这个:

enter image description here

然后你把它复制到SO(只是ctrl-c ctrl-v),你得到这个:

(maxY - minY)/stepy/(maxX - minX)/stepx  

在数学上不等同。它应该是这样的:

((maxY - minY)/stepy)/((maxX - minX)/stepx)

或者这个(上面的InputForm):

((maxY - minY)*stepx)/((maxX - minX)*stepy)

这不是由StackOverflow的内部引起的,因为与NotePad的副本相同。

我们应该注意更多这样的问题(特别是在使用SO时,一般情况下)吗?

导致这种情况的原因是什么,可以在我们这边修复,如果没有,那么最好的解决办法是什么?

3 个答案:

答案 0 :(得分:8)

将Mathematica代码复制到Usenet Mathematica组有时会在您的代码中散布各种奇怪的字符(您永远不知道它何时会发生在您身上)。解决方法是:

  1. Cell > Convert To > InputForm然后复制

  2. Edit > Copy As > Plain TextInput Text

  3. 后者在这种情况下不起作用。它仍然是一个数学上不正确的转换,你会得到。前者确实有效。

    <强>更新
    如果您在Mathematica新闻组中的帖子中遇到奇怪的字符(例如,如here中所述),则以下函数将对其进行解码(在我测试的所有情况下)。

    translateQuotedPrintable[str_String] := 
      StringReplace[str, {"=" ~~ c1:HexadecimalCharacter~~c2:HexadecimalCharacter :> 
        FromCharacterCode[FromDigits[c1 <> c2, 16], "Math1"],"=" ~~ EndOfLine -> ""}]
    

    只需将整个帖子粘贴到translateQuotedPrintable[" ... "]中的引号之间,帖子就会被清理掉。

    对于好奇:您在这些usenet帖子中看到的编码称为Quoted Printable。它用于将不同于标准7位ASCII设置的字符编码转换为ASCII。许多常见的MMA符号(如规则符号)如果之前未通过InputForm cs转换为ASCII,则以这种方式进行编码。要解码代码,需要知道原始字符集,因为QP只产生字符集中的十六进制位置。在MMA的情况下,这通常是Math1。

答案 1 :(得分:2)

将示例复制到电子邮件也失败了,而且 - 如果它延续到其他示例 - 对于Mathgroup,SO和任何其他基于文本的讨论论坛来说似乎非常糟糕。复制为&gt;纯文本和复制为&gt;输入表格都正常工作,但我已经成功地完成了数千次,并且从未知道它会以这种方式失败,没有奇怪的十六进制字符。

答案 2 :(得分:0)

这是如何设置MMA以解决排版中引入的数学模糊性的一个很好的例子。 (1)

它失败的原因是你还没有评估原始表达式。评估时,Mathematica会正确解析两个块之间的“/”,并且可以正确地复制和粘贴输出。

也许WRI应该这样做,以便'复制'强制解析机制在剪辑表达之前发生 - 即某种“软”评估。想法?