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

Wolfram mathematica 将代码从Mathematica复制到其他平台的已知问题?,wolfram-mathematica,mathematica-frontend,Wolfram Mathematica,Mathematica Frontend,我刚刚注意到,如果您在MMA(8.0.1/win7-64)中有此功能: 然后将其复制到(只需ctrl-c ctrl-v),您将得到以下结果: (maxY - minY)/stepy/(maxX - minX)/stepx 这在数学上是不等价的。应该是这样的: ((maxY - minY)/stepy)/((maxX - minX)/stepx) 或者(上面的输入格式): 它不是由StackOverflow的内部结构引起的,就像复制到记事本一样 我们是否还有更多类似的问题(特别是在与SO

我刚刚注意到,如果您在MMA(8.0.1/win7-64)中有此功能:

然后将其复制到(只需ctrl-c ctrl-v),您将得到以下结果:

(maxY - minY)/stepy/(maxX - minX)/stepx  
这在数学上是不等价的。应该是这样的:

((maxY - minY)/stepy)/((maxX - minX)/stepx)
或者(上面的
输入格式
):

它不是由StackOverflow的内部结构引起的,就像复制到记事本一样

我们是否还有更多类似的问题(特别是在与SO合作时,但也是一般情况下)需要注意


造成这种情况的原因是什么,我们能解决吗?如果不能,最好的解决办法是什么?

将Mathematica代码复制到Usenet Mathematica组有时会在代码中散布各种奇怪的字符(你永远不知道什么时候会发生这种情况)。解决办法是:

  • 单元格>转换为>输入格式
    然后进行复制

  • 编辑>复制为>纯文本
    输入文本

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

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

    translateQuotedPrintable[str_String]:=
    StringReplace[str,{“=”~~c1:HexadecimalCharacter~~c2:HexadecimalCharacter:>
    FromCharacterCode[FromDigits[c1 c2,16],“Math1”],“=”~~EndOfLine->“}]
    
    只需将整个帖子粘贴在
    translateQuotedPrintable[“…”]
    中的引号之间,帖子就会被清理


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

    将示例复制到电子邮件中也会失败,而且如果它继续到其他示例中,这对Mathgroup、SO和任何其他基于文本的讨论论坛来说都是非常糟糕的。“复制为>纯文本”和“复制为>输入格式”都能正常工作,但我已经用简单的方法做了数千次,而且我从来都不知道这样做会失败,没有奇怪的十六进制字符。

    这是一个很好的例子,说明了如何设置MMA来解决排版中引入的数学歧义。(+1)

    它失败的原因是您尚未计算原始表达式。计算时,Mathematica正确解析两个块之间的“/”,并且可以复制和粘贴输出(正确)


    也许WRI应该这样做,“复制”强制解析机制在插入表达式之前发生——即,某种“软”计算。想法?

    您是如何输入表达式的?我必须输入左侧和右侧,然后粘贴到
    x/y
    表单中。这可能会造成意外情况。只需ctrl-/maxY-minY tab stepy ctrl space/ctrl-/maxX-minX tab stepx ctrl space。如果您对此进行评估,您将得到上面第四行代码中的(正确)代码。感谢您的更正。我试着在中间用Ctrl+/,为什么我不知道。我试着弄清楚复制是如何在低级别工作的,例如MakeBox、MakeExpression等。有关于这个的页面吗?@Mr.Wizard-复制不使用MakeExpression。对于输入文本副本这样做并不是一个荒谬的想法,因为它的任务是保留评估语义。但这样做需要等待每个副本的内核求值,并且只适用于语义完整的表达式(不像,例如,RowBox[{“a”,“+”}])。因此,在可能的情况下,我们使用了一系列的启发式方法来转换为一个合理且可读的线性版本,并在其他地方转换为线性语法。最初的问题暴露了启发式中的一个小错误,这将在未来的版本中修复。你好,Bobby Treat,欢迎来到StackOverflow。“复制为”方法在哪个版本/平台上工作?Sjoerd在v8上失败,我在v7上失败。嗨,Drmajorbo,欢迎来到另一边!我不认为我们会找到很多这样的例子。我们应该注意到过去几年的某个地方。但是我在这里被咬了(),当我自己的代码被复制回Mathematica时,产生了错误的结果。当然,这不会改变原始代码。评估定义的目标(尤其是在使用
    SetDelayed
    时)不是生成此输入的解析版本作为输出,通常也不是。一个人应该能够复制代码(尤其是当它不是模棱两可的传统形式时)并将其粘贴到其他地方。标准形式中没有数学上的模棱两可(它的设计正是为了消除所有此类模棱两可)。前端完全具备复制正确文本所需的信息。这个问题仅仅是一个在本报告之前一直未被注意到的bug。
    ((maxY - minY)*stepx)/((maxX - minX)*stepy)
    
    translateQuotedPrintable[str_String] := 
      StringReplace[str, {"=" ~~ c1:HexadecimalCharacter~~c2:HexadecimalCharacter :> 
        FromCharacterCode[FromDigits[c1 <> c2, 16], "Math1"],"=" ~~ EndOfLine -> ""}]