我是Ham,我是Stack Overflow团队团队的一名开发人员。在过去的几个月中,我一直在努力在网络上撰写和编辑帖子时将Markdown转换为HTML。我很想分享自己的想法。
简而言之:我们正计划在整个网络上的所有帖子中使用CommonMark。为此,我们在客户端和服务器端切换到兼容CommonMark的Markdown渲染器。我们必须确保所有现有帖子都可以与新渲染器一起使用,因此我们将在网络上进行大规模迁移,将现有帖子转换为使用新的CommonMark格式。更改后的写作,编辑和阅读帖子的外观和感觉应该大致相同。
截至2020年6月20日,所有站点现在都位于CommonMark上。对于单个站点,请参阅此处的迁移时间表。

我们在整个Stack Exchange网络中使用Markdown。当Jeff和Joel开始构建Stack Overflow时,Markdown是早期的技术赌注之一。如果您在Stack Exchange网络上的任何地方写下问题,答案或评论,就会在Markdown中编写。
多年来,Markdown已经成为在线社区中编写内容的一种常见方式。它已经取得了巨大的成功,甚至获得了CommonMark的正式规范。
今天,Stack Exchange处理用户创建的Markdown的方法与开始时的方法基本相同。我们在客户端和服务器端使用了自己的本地Markdown解析器和渲染器。事实证明,这两种实现都是坚实的基础,并且多年来进行了许多调整。
但是,它们带有自己的怪癖。它们是在出现CommonMark规范之前创建的,它们显示出一些不符合规范的行为。他们正在使用正则表达式将Markdown转换为HTML(多年来,这让我们付出了很多汗水和眼泪)这是完全可行的,但要维护Markdown解析器并为其添加新功能会更加困难。
想法
我们认为是时候向前迈进了。您曾经问过我们几年前是否要在Stack Exchange网络上采用CommonMark,balpha进行了统计,尽管他发现并非不可能,但似乎并不容易,要么。鉴于过去和即将发生的一些变化,我们认为现在是解决这一挑战并将所有网络帖子迁移到CommonMark的好时机。这包括:

在客户端上更改Markdown渲染器
在服务器上更改Markdown渲染器
自动编辑并重新呈现网络中非CommonMark的所有帖子-compatible

要使您对幕后的变化有更好的感觉:在Stack Exchange网络上撰写文章时,请在Markdown中编写。在客户端,您在撰写文章时会看到预览。此预览由我们的客户端Markdown渲染器创建。它使用您编写的Markdown,将其转换为HTML,并向您显示帖子的外观。
保存帖子后,我们会将Markdown发送到我们的服务器,在其中,相同的Markdown-to-HTML转换再次发生(您不能信任用户输入,因此我们不会盲目接受客户端生成的HTML)。
我们的计划
我们将通过网络将网站迁移到CommonMark网站在接下来的几周内按站点进行。我们计划从2020年6月3日(星期三)开始进行元堆栈交换和元堆栈溢出。
我已经准备好了一项功能,该功能可以将我们当前的本地Markdown渲染器与经过测试的,遵循CommonMark规范的开源实现交换。出于好奇:这意味着我们将在客户端将PageDown替换为markdown-it,在服务器端将MarkdownSharp替换为markdig。
一旦启用此功能,新的和已编辑的帖子将自动使用这些新的渲染器进行渲染。 。最有可能的是,您在看帖子时甚至都不会发现差异。对于网络中的绝大多数帖子(80%或以上),这意味着什么都不会改变。是的,我们网络上的大多数帖子都是按照完全符合CommonMark规范的方式编写的,是的!如果我们使用新的渲染器将此Markdown转换为HTML,结果将完全相同。期望。 Balpha的分析为您提供了更多详细信息。我们谈论的是在哈希和其他一些小的疏忽之后再加上空格的##headlines。对于这些帖子,我们构建了一个工具,可通过直接更改帖子的Markdown来源并重新呈现相关帖子的HTML来自动解决这些众所周知的问题。当我们自动更改帖子的Markdown时,最终看起来像是常规编辑,但是我们确保这不会使帖子升到顶部。
所以现在我们大约有80%的帖子那已经很好了。借助自动修复实用程序,我们估计在迁移到CommonMark并使用新的渲染器后,渲染的所有网络帖子中将有96%以上完全相同。这给我们留下了百分之几的帖子,当使用新的CommonMark渲染器进行渲染时,它们最终看起来会有所不同。
您可以期待的是什么
我们会出于安全方面的考虑而避免破坏现有职位。如果使用新的渲染器发布的帖子看起来有所不同(并且只有一个空白),我们将不会自动重新渲染该帖子并将其首先放置以进行调查。这样我们就可以确保所有更改都是安全的。
我一直在处理我们的数据,以感觉使用新渲染器后渲染的帖子会稍有不同。我发现差异分为三个部分:


误报:HTML标记略有更改,但不更改帖子的语义或表示形式

改进:CommonMark规范解决了我们当前Markdown风格中的一些疏忽的问题

实际问题:我们没有想到并需要修复的问题

“实际问题”类别应该只占很小的一部分,但我不会天真地假设它们不会发生。我们需要研究由新的Markdown渲染器引起的一些变化,因为它们会使帖子以一种或另一种方式看起来与以前有所不同。我们无法预见此更改将引入的所有极端情况,因此我们将浮出所有使用新的Markdown渲染器渲染时看起来不同的帖子,对其进行审查,并在必要时进行修复。尽可能平滑无摩擦。我们不想破坏(并手动修复!)成千上万的帖子。我们不想弄乱您的写作经验。同时,我知道我们从一开始就不会完美使用此功能,因此我需要您的耐心和谅解。
当我们切换到新的CommonMark渲染器后撰写新文章时,您将拥有与以前完全相同的书写体验。预览将向您显示您的帖子的外观,并且一旦保存您的帖子,其外观应与您在预览中看到的一样。如果您发现预览和保存的帖子之间有任何差异,请通知我们!
当您编辑用新的CommonMark渲染器渲染的帖子时,事情可能会变得很时髦。同样,如果我们在迁移过程中检测到帖子在使用新的CommonMark渲染器进行渲染时看起来会有所不同,则不会在迁移过程中保存该帖子的新版本。这样,所有帖子在查看时仍会保持相同的外观。但是,一旦有人进入并对其进行编辑,它将使用新的CommonMark渲染器进行渲染,这可能导致帖子的外观与我们之前的外观略有不同。这只是我们所有职位的一小部分,而在那一小部分中,实际上会编辑一小部分。但是,请务必记住,编辑旧帖子有一点机会,您会遇到我们的旧Markdown渲染器与新Markdown渲染器之间的差异。

常见问题解答
什么时候
新的CommonMark渲染器将在接下来的几天内合并为master。它们被隐藏在功能标记的后面,因此在我们按下开关之前不会造成任何伤害。
我们将在接下来的几周内逐个站点地跨网络迁移站点。我们将从2020年6月3日(星期三)开始进行元堆栈交换和元堆栈溢出(假设一切顺利,并且直到那时我们都不会发现主要的阻塞程序)。由于我们无法准确预测沿途会遇到哪种龙,因此计划可能会稍有变化。我将发布站点计划及其切换日期,以解答该问题,并在我们进行更新时保持更新。
每个站点都是不同的,我们需要不断学习。大多数站点可以在几个小时内迁移。对于我们最大的网站,将所有帖子更改为CommonMark可能最多需要4天。请留意我要发布的进度表。
我们为什么要迁移到CommonMark?
过去,对Markdown渲染器的更改相当冒险且费力。我们需要仔细评估更改是否对我们现有的数百万个现有职位没有任何影响。通过遵循定义良好的规范(如CommonMark),我们可以确保遵循该规范的实现对我们有用。如果规范得到扩展,则采用更改将变得容易且安全。
另一个原因是,这减轻了我们开发团队的一些维护负担。现在,我们无需维护两个不同的Markdown渲染器,而是可以直接使用现成的东西。使用markdig和markdown-it,我们发现了两个著名的库,它们在性能和功能方面都超过了我们自己的实现。两者都是很棒的软件,我们非常乐意在产品中使用。
以后我编写Markdown的方式是否有所变化?
是的,会有一些变化到Stack Exchange上支持的Markdown集合。在您的大部分写作中,您根本不会发现任何区别。我们将尽最大努力继续允许您现在使用的大多数语法。我们采用的是CommonMark标准,因此所有有效的CommonMark都可以在Stack Exchange上正常使用(以下是简短的备忘单,以示好奇)。
同时,我们希望借此机会消除在没有CommonMark标准之类的情况下建立的一些怪癖。 Stack Exchange当前Markdown风格的某些功能是在没有标准化的处理方式的时候构建的。现在,我们正在采用CommonMark,我们想用标准化的符号替换一些本地开发的功能,您也可以从网络上的其他地方知道这种符号。
最明显的变化将是嵌套在列表周围列表,标题和块引号。
列表:
创建嵌套列表时,需要缩进嵌套列表项或段落的空格数量。虽然以前一个空格就足够了,但是根据列表的类型,您现在需要再添加几个空格。
要使段落成为列表项的一部分,它过去足以在列表的前面添加一个空格该段落
* this is a list item

 that goes on here

和CommonMark一起,该段落必须与父文本对齐,因此我们在这里需要一些空格:
* this is a list item

  that goes on here

标题:
向前移动,必须在前导#字符后添加一个空格。
#this was cool before

# this is what's cool now

块引用:块引用。继续前进,您将以这种方式获得两个不同的块引用,除非您也以>字符开头空行:最大的突破性变化将围绕缩进的代码块,以及声明用于语法高亮显示的语言的可能性。围栏符号和不缩进的代码块。您仍然可以使用缩进的代码块,但是以后不再支持为它们明确声明首选语言。
到目前为止,您可以执行以下操作来声明缩进代码块的语言:
> old blockquotes  

> with multiple lines

向前移动,此样式被认为已弃用。自从我们引入了代码围栏以来,您就可以使用代码围栏符号显式声明代码块的语言:
> new blockquotes
> 
> with multiple lines

这是CommonMark标准提出的方式,而这也是其他网站的目的也是。我们知道您可能已经习惯使用带有<!-- language: lang -->注释的旧语法。当我们采用新的Markdown解析器时,我们希望避免以一种正式的,符合标准的方法来实现将那些古怪的行为修补到这些解析器中,而我们可以毫不费力地采用它。此样式暂时仍会继续起作用,但是将来可能会被删除,此时使用该样式的帖子将不再识别它。
请注意,根据您使用的标签设置语法突出显示语言与您的帖子关联的内容将继续起作用。如果您需要刷新,这里是我们语法突出显示当前行为的完整概述。我们将在前进的同时更新该帖子。
SE专用语法元素会发生什么情况?
在Stack Exchange网络上,我们支持不属于CommonMark标准的某些语法元素。扰流器,MathJax,电路图,堆栈片段等内容在多个网络站点上使用。即使它们不是正式的CommonMark规范的一部分,我们也将继续支持所有这些自定义语法元素。
这最终将启用表支持吗?
也许!过去已经对表格的支持进行了激烈的讨论。有很多创造性的解决方法,但是从来没有任何官方支持渲染表。如果其他网站可以做到这一点,为什么不能呢?
主要原因之一是我们的Markdown解析器和渲染器不支持表格这一事实,由于我们切换到Markdig和Markdown-it,现在不再有效。两者都支持开箱即用地解析和呈现表。尽管如此,引入表支持仍然是我们不希望盲目地迁移到这种大型迁移中的一种变化。规格这种变化是巨大的。我们需要查看效果如何,并确保在我们所有社区中都不会引入超过几个可接受的外观设计问题。引擎盖,我们可以重新评估是否适当时机将表支持带回(drumroll)表!

评论

这是否也意味着我们将获得标头ID?

剧透语法将保持不变-尽管它不是CommonMark规范的一部分。

@ZoeTheLockdownPrincess“您仍然可以使用缩进的代码块,但不能明确声明首选语言。”

此迁移将不会启用标头ID。此迁移已经是一件大事,因此我们不想将添加新功能与运行迁移本身混为一谈。 markdown-it和markdig都通过插件支持标头ID,因此现在实现此功能将比以前更容易-但这仍是一个不同的讨论。

@Laurel应用程序可能不会自己呈现HTML,而是在API级别完成的。在这种情况下,应用程序将不需要任何更改。但是,如果渲染是在应用程序本身中完成的...。这本质上是最后一根稻草,他们将不得不关闭它们。等待官方回应。

我通过旧的渲染器运行markdown,通过新的渲染器运行markdown,使用良好的OL'正则表达式擦洗两个HTML版本,并比较两个HTML字符串。它虽然不复杂,但是可以很好地完成工作,并且足够快,可以处理我一生中的数百万条帖子。我希望很快能收到一篇博客文章,在这里我可以分享更多见解。

目前,CommonMark不支持RTL方向吗?

天哪,我们又来了...

@桅杆Hu?如果帖子的显示文本将被新的Markdown引擎更改,那么即使其差异为单个空格,也不会更新其Markdown。它会继续通过其旧的Markdown引擎创建的当前HTML进行显示。因此其外观将保持不变。但是,当有人尝试编辑此类帖子时,他们将必须遵守新的Markdown规则。这可能会引起问题。例如,某人编辑帖子以修复一些小问题,但随后发现他们需要进行重大更改,以便帖子能够正确呈现。

表格请尽快!

格式的占位符,例如标签(用于讨论的[tag:discussion]或网站参考(对于科幻与幻想的网站[scifi.se])如何处理?那些只是被建模为在撰写本文时其定义不可见的链接吗?

因为我们无法合理地支持两个不同的活动Markdown渲染器,而不会最终导致跳闸。后文概述了前进的充分理由-兼容性,用户体验,易于维护,将来的功能开发更简单等。

我认为这很好。 Markdown是一个不完整的规格,这是绝对正确的,需要使用一些固体香料来代替。我的个人最爱碰巧是kramdown,但在大多数情况下替代标准Markdown并不是一个好的选择。 CommonMark听起来是一个不错的选择。

@Sean您可以像以前嵌套块引用一样嵌套它们。而不是使用>,而是以>>(或更多字符,如果要嵌套得更深)在嵌套的blockquote的每一行开始。

好极了!太棒了!我已经更新了commonmark.org网站以反映此更改!

#1 楼

错误许可状态已完成

对于这些帖子,我们构建了一个工具,该工具可以通过直接更改帖子的Markdown源并重新呈现相关帖子的HTML来自动解决这些众所周知的问题。当我们自动更改帖子的Markdown时,最终看起来就像是常规编辑,但是我们要确保这不会使帖子升到顶部。

对于那些目前根据CC BY-SA 3.0(或2.5)获得许可?我看到以前进行过类似的修改(例如,用HTTPS替换HTTP链接)会在时间轴上触发许可通知(示例)。我不认为应该进行这样的编辑,尤其是如果呈现的内容没有更改时。
@Yaakov说他正在研究一个修复程序,这是个好消息,但是该修复程序需要追溯应用被看见此处:


评论


您可以阅读该版本历史记录,说社区所做的编辑已获得CC BY-SA 3.0的许可...但是最上方的文本“当前许可证:CC BY-SA 3.0”显然是错误的。更糟糕的是,如果最后一次编辑更改了整个帖子中显示的许可证,则不仅会更改为自动修改,而且还会更改作者以外的其他人工用户进行较小的编辑。用户写出实质性的答案,然后由另一个人进行复制编辑/阐明/扩展的情况并不少见。当然,通常接近原始发布,但有时要晚得多。

–ilkkachu
20年6月1日在14:11

这是关键。我认为所有编辑(包括较小的编辑和自动的HTTP-> HTTPS编辑)更改许可证已经存在问题。我怀疑这将影响更多的职位。处理许可证需要非常仔细地考虑。

–托马斯·欧文斯(Thomas Owens)
20年6月1日在14:52

这些修改不会导致许可更改(我正在处理许可的一系列后续项目,将包括在内)

– Yaakov Ellis♦
20年6月1日在15:04

这些编辑可能不会真正导致许可证更改,因为它们可能已插入时间轴中,并且您不想跳到更高的CC版本然后再次下降。如果有人在他/她自己的前导#后面插入空格并在编辑中更改了其他内容,则可能会变得棘手。不确定,在这种情况下社区bot想要做什么,因此可以使以前的修订版本具有共同性。

– Trilarion
20年6月1日在20:57



据我了解,该修补程序包含对HTTPS的更改之类的内容,因此由于大多数更改已使用多年,因此默认情况下将进行追溯。

–Catija♦
20年6月3日在14:09

对于最初的测试站点,这些编辑将显示为已获得许可。目前正在修复此问题,修复过程将在以后进行追溯。浏览此处获取更多信息。

– Yaakov Ellis♦
20年6月3日在14:38

@YaakovEllis追溯修复不足以更改许可证。从本质上讲,这意味着您不能信任显示在Stack Exchange网站上的许可证,因为您不能假设显示了正确的许可证。就我个人而言,我不在乎,因为我不在商业环境中重复使用内容,而其他人则这样做...

–罗兰
20年6月11日14:37

这似乎是固定的。

–TheLethalCarrot
20年6月16日在7:57

#2 楼

迁移时间表
这里是我们计划迁移的站点的概述,当我们计划运行迁移时以及该站点的当前状态。我们继续进行更新。我们可能会在此过程中遇到一些问题,因此请理解,很难准确预测时间表,并且我们将不断进行调整。
当前状态
所有站点都已迁移。现在,我们在所有站点的编辑器中都使用CommonMark。感谢您寻找并告知我们您所发现的问题。这是一个有趣的旅程。
完成
CommonMark处于活动状态,帖子已迁移到这些网站


2020-06-03:Meta Stack Exchange✔

2020-06-03:元堆栈溢出✔


2020-06-04:影视(Meta + Main)✔

2020-06-10:TeX-LaTeX Stack Exchange✔

2020-06-10:Blender Stack Exchange✔

2020-06-10:代码审查Stack Exchange✔


2020-06-10:化学堆栈交换✔

2020-06-10:学术堆栈交换✔




2020- 06-11:交叉验证✔

2020-06-11:Português堆栈溢出✔

2020-06-11:电气工程堆栈交换✔

2020-06-11:地理信息系统ems Stack Exchange✔

2020-06-12:数学✔



2020-06-12:询问Ubuntu✔

2020-06-15:MathOverflow✔




2020-06-15:WordPress开发堆栈交换✔

2020-06-15:Magento堆栈交换✔

2020-06-15:SharePoint堆栈交换✔


2020-06-15:数据库管理员堆栈交换✔

2020-06-15:Drupal答案✔

2020-06-16:英语学习者堆栈交换✔

2020-06-16:Mathematica堆栈交换✔

2020-06-16:科幻与幻想堆栈交换✔




2020-06-16:游戏开发堆栈交换✔


2020-06-16:角色扮演游戏堆栈交换✔




2020-06-16:图形设计堆栈交换✔


2020-06-16:Raspberry Pi堆栈交换✔


2020-06-16:用户体验堆栈交换✔

2020-06-16:以太坊堆栈交换✔

2020-06-16:工作场所堆栈交换✔

2020-06-16:Worldbuilding堆栈交换✔

2020-06-16:数据科学堆栈交换✔






2020-06-17:机动车维修和修理堆交换✔

2020-06-17:密码学堆栈交换✔

2020-06-17:日语语言堆栈交换✔

2020-06-17:软件推荐堆栈交换✔


2020-06-17:信号处理堆栈交换✔

2020-06-17:音乐:实践与理论堆栈交换✔



2020-06-17:Русскийязык✔


2020-06-17:定量金融堆栈交换✔



2020-06-17:园艺和园林绿化堆栈交换✔

2020-06-17:网络工程堆栈交换✔

2020-06-17:德语堆栈交换✔




2020-06-17:Christianity堆栈交换✔


2020-06-17:CiviCRM堆栈交换✔

2020-06-17:棋盘游戏堆栈交换✔

2020-06-17:历史堆栈交换✔






2020-06-17:法语堆栈交换✔

2020-06-17:软件质量保证和测试堆栈交流✔



2020-06- 17:编写堆栈交换✔

2020-06-17:工程堆栈交换✔

2020-06-17:声音设计堆栈交换✔

2020-06-17:Vi和Vim堆栈交换✔

2020-06-17:Sitecore堆栈交换✔

2020-06-17:天文堆栈交换✔

2020-06-17:计算科学堆栈交换✔

2020-06-17:体能堆栈交换✔

2020-06-17:语言学堆栈交换✔

2020-06-17:中文语言堆栈交换✔

2020-06-17:圣经诠释学堆栈交换✔

2020-06-17:基本OS堆栈交换✔

2020-06-17:视频生产堆栈交换✔


2020-06-17:反向工程堆栈交换✔


2020-06-17:心理学与神经科学堆栈交换✔

2020-06-17:佛教堆栈交换✔


2020-06-17:宠物堆栈交换✔

2020-06-17:医学堆栈交换✔




2020- 06-17:国际象棋堆栈交换✔

2020-06-18:自制啤酒堆栈交换✔

2020-06-18:项目管理ement堆栈交换✔

2020-06-18:大型户外堆栈交换✔

2020-06-18:机器人堆栈交换✔

2020-06-18:开放数据堆栈交换✔

2020-06-18:Tor堆栈交换✔


2020-06-18:运动堆栈交换✔



2020-06-18:Monero堆栈交换✔

2020-06-18:拉丁语言堆栈交换✔

2020-06 -18:人际交往技巧堆栈交换✔

2020-06-18:DevOps堆栈交换✔

2020-06-18:Windows Phone堆栈交换✔

2020-06-18:文献堆栈交换✔

2020-06-18:砖✔

2020-06-18:硬件建议堆栈交换✔

2020-06-18:业余无线电堆栈交换✔

2020-06-18:3D打印堆栈交换✔

2020-06-18:逆向计算堆栈交换✔

2020-06-18:意大利语堆栈交换✔

2020-06-18:生物信息学堆栈交换✔

2020-06-18:家谱和家族史堆栈交换✔

2020-06-18:量子计算堆栈交换✔

2020-06-18 :开源堆栈交换✔

2020-06-18:木工堆栈交换✔

2020-06-18:计算机图形堆栈交换✔

2020-06-18:科学和数学堆栈交换的历史✔

2020-06-18:数学教育者堆栈交换✔

2020-06-18:Lifehacks堆栈交换✔




2020-06-18:乌克兰语言堆栈交换✔

2020-06-18:葡萄牙语语言堆栈交换✔

2020-06-18:扑克堆栈交换✔





2020-06-18:物联网堆栈交换✔



2020-06-18:电子书堆栈交换✔

2020-06-18:韩国语言堆栈交换✔

2020-06-18:Stellar Stack Exchange✔

2020-06-18:Coffee Stack Exchange✔

2020-06-18:Tezos Stack Exchange✔

2020-06-18:语言学习堆栈交换✔

2020-06-18:啤酒,葡萄酒和烈酒堆栈交换✔



2020-06-18:计算机科学教育家堆栈交换✔

2020年6月18日:素食主义者和素食主义者交流会✔

2020-06-18:社区建筑堆栈交换✔

2020-06-18:构造语言堆栈交换✔

2020-06-18:无人机和模型飞机堆栈交换✔



2020-06-20:堆栈溢出✔


评论


随着时间的推移,我们将学到更多,并越来越自信,我将在此日程表中添加更多日期。对于初学者,我将其保持在很小的范围内,因为我不想对我们将要运行的前几批产品有一个真正的主意就不要过度承诺。我知道更好的清晰度会更好,但是很难实现。我希望一旦迁移了头几个站点,我们就能发布更大的时间表。

–汉姆·沃克♦
20年6月1日在12:38

@HamVocke在我看来,风险最小的方法是首先将更改应用到较小的站点,因此,发现的任何问题通常会影响较少的帖子,然后可以先解决,然后再应用到较大的站点。您是否有任何特定原因可以告诉我们为什么选择了上面显示的特定网站,并选择了显示顺序?

–约翰·奥米兰(John Omielan)
20年6月1日于13:21

@JohnOmielan不想回答Ham-但请注意,M&TV和Physics都有集成,可能证明...复杂的因素-YouTube嵌入和MathJax。

–Catija♦
20年6月1日,13:35



我们正在努力在规模,风险和影响之间取得良好的平衡。我们想首先在小型站点上学习,这些站点包括一些独特的功能(mathjax,扰流器,视频嵌入)。然后,我们希望尽快移至网络中更大的站点,以将这些更改移交给许多用户。我选择了头几个站点是基于足够小以在使用我们的某些特殊功能时提供快速反馈的想法。希望这能使您大致了解一般推理。

–汉姆·沃克♦
20年6月1日于13:52

如果出现严重错误,我们已经建立了自动回滚。这将需要逐个撤消整个迁移,因此这将是又一次激烈的计算。如果我们可以避免回滚,那么我们很乐意避免回滚。我认为我们暂时必须处于某种程度的混乱之中,并确保尽快迁移所有网站:)

–汉姆·沃克♦
20年6月1日在14:56

(此处为物理模块)@HamVocke如果您尚未计划,您是否可以考虑提前一两天在我们的元网站上发布帖子,以使人们知道描述更改并查找发布后可能出现的错误?有时,人们需要一些时间才能注意到我们的元网站上的内容。

– David Z
20年6月1日,19:51



我们是否可以恭敬地要求网站的“旧”内容在该网站的居民确认基本内容没有变化之前不要删除?上次更改tex.stackexchange站点时,我们的示例代码中有很大一部分被废弃了,双反斜杠减少为单反,使代码无效,我们许多人花了数百个小时来手动修复损坏。仍然偶尔会发现这种屠杀的情况。我们在颤抖。

–芭芭拉·比顿
20年6月1日在19:53

由于SE.Physics已启用MathJax(用于TeX),因此2020-06-04的SE.Physics迁移似乎很值得注意。

–纳特
20年6月1日21:00

@barbarabeeton我们将不会删除任何内容。将帖子更改为CommonMark时,我们将创建现有帖子的新修订版,可以手动或作为批处理操作(如果确实需要)回滚。另外,只有在确信这样做是安全的时候,我们才创建这些新修订。

–汉姆·沃克♦
20年6月2日在7:22

@DavidZ打个招呼,让我谈谈物理和影视。我认为我们不会在每个站点上都宣布这一点,但是对于前几个站点,明确地这样做绝对是合理的。

–汉姆·沃克♦
20年6月2日在7:24

我会考虑在电影之前安排“令人费解”,因为这样可以测试与视频嵌入隔离的剧透

– gna
20年6月2日在10:33

@HamVocke-上一次不是故意的,只有当我们开始收到抱怨答案无效的投诉时,我们才知道该问题,实际上是导致编译崩溃。请让我们知道预定的时间(至少是我们的主持人),以便TeX知识丰富的用户可以在激活之前查看结果。

–芭芭拉·比顿
20年6月2日,12:04

@HamVocke,因为时间表中显示的许可有一些干扰,您是否会考虑推迟切换SO(以及其他具有大量代码段的技术站点),直到Yaakov部署了Glorfindel的答案中提到的许可问题的修复程序?只是为了避免造成太多混乱。

–Luuklag
20年6月3日,19:45

我可以看到用户体验在列表中还有很长的路要走,但是请不要忘记BML。在列表中加上您可以预见的特定问题(例如MathJax和其他奇怪问题),可能会很好。

–安德鲁·利奇(Andrew Leach)
20年6月3日在22:40

@ JosephSible-ReinstateMonica我想这意味着有人会在周末检查。只有没有人使用/测试时,星期五部署才是不好的

–Pureferret
20 Jun 16'9:07



#3 楼

如果您不赞成使用<!-- language: lang-html -->,而希望在代码范围的开头指定前缀,那么您是否仍支持所有代码块的整体语法高亮提示?

<!-- language-all: lang-none -->

我偶尔使用该功能,所以我怀疑它是否不能再使用会产生很大影响。在2020年的前5个月内。(是的,我确实尝试对所有帖子都运行它,但是对body字段进行全表扫描不会在2分钟内完成。我确定SE员工可以运行查询

在所有其他站点(不包括堆栈溢出)中,这是自2017年以来的用法:

单击图像查询

评论


我喜欢能够做到这一点,但我不喜欢该语法。如果我们可以将第一个代码防护标记为“全无”(或者通常是“ all-X”)并且使其工作相同,那将是一个胜利。 (也许也警告使用旧语法。)

–月桂树
20年6月1日于13:05

是的,<!-language-all:lang-something->语法将继续起作用。从附加到问题的标签中推断语法突出显示语言的方法也是如此。

–汉姆·沃克♦
20年6月1日在14:52

FWIW,SO不一定代表WRT使用此功能,因为基于标签的推理往往工作得很好。未(或无法)为此配置标签的网站可能会更多地利用此作为打开突出显示的便捷方式。

– Shog9
20年6月1日,16:16

@ Shog9自2017年以来,我已经在其他主站点数据库中运行了该帖子,但数量仍然很少。但是,随着这被证实可以继续工作,整个观点尚无定论。

–rene
20 Jun 1'at 17:02



现在不起作用吗?

–迈克尔
20年6月2日,0:46

@ Michael-Where'sClayShirky它对我有用,是的。至少在MSO和MSE上。如果对您不起作用,请共享您尝试使用的网站。

–rene
20年6月2日,下午5:42

@HamVocke在您的帖子中,您提到“向前迈进,这将不再起作用。”我们应该如何解释呢?

–桅杆
20年6月2日在7:49

声明特定缩进代码块的语言的@Mast即将消失。借助CommonMark的围栏代码块符号,我们有了一个完美的,符合标准的替代品。通过从标记中推断整体语言或通过声明<!-language-all->来设置整体语言将暂时保留。一个新的语法突出显示器可能会要求我们将来重新进行检查。

–汉姆·沃克♦
20年6月2日在8:00

@HamVocke Ah,因此仍然支持在整个帖子中设置旧样式,而对于单独的代码块,仅支持新样式。我们可以解决这个问题。

–桅杆
20 Jun 2'在8:05



FWIW,我想您的电话有些差劲,我个人已将该标签添加到Code-Review 1,2,3的多个问题/答案中。查询是否缺少该站点?

– Gredo
20年6月2日在15:25



@Greedo现在已修复,编辑,新的屏幕截图和新查询的链接,感谢您及时发现!

–rene
20 Jun 2'在16:55



表格:功能预览:表格支持

–P.Mort。 -忘记了粘土Shirky_q
20年11月27日在8:00

@ P.Mort.-forgotClayShirky_q你在挑战我吗? ;)

–rene
20-11-27在10:16

#4 楼

当您编辑使用新的CommonMark渲染器以不同的方式渲染的帖子时,事情可能会变得很时髦。编辑应该特别注意渲染预览,因为编辑可能会改变帖子的外观?在对大型帖子进行少量修改时,这尤其重要。

评论


不,目前我们不会显示通知。您提出了一个正确的观点,我们之前已经讨论过这个想法。我们将要显示的每个帖子都必须进行额外的数据库查找,以便找出是否存在任何问题,而绝大多数帖子都可以。如果第一次迁移运行表明需要通知,我们可能不得不重新考虑这个决定。在此之前,我们肯定希望我们能够到达一个差异如此微弱的地方,以至于我们完全可以忽略显示平视警告。

–汉姆·沃克♦
20年6月1日在17:45

据推测,如果有人开始编辑并遇到困难,他们有责任使它生效或纾困,因此我们不应该看到错误的帖子?您可以为这些特殊情况设置通知或特殊审查队列吗?

– Boy先生
20年6月1日在21:28

@Ham如何在时间轴/编辑历史记录中添加某种指示符,指出无法自动更新帖子? OTOH,我想这可能不是很有用,因为在进行编辑之前必须检查时间表会很烦人。

– PM 2环
20年6月2日,0:47

@ Mr.Boy:这里的风险是,您正在阅读一篇大型文章,并看到要改进的一个段落或代码块。您可以在markdown中进行修改,在预览中找到该段落,然后点击保存。如果它很大,并且您不希望对未更改的区域产生任何影响,那么您可能不会在帖子的其他地方注意到一些细微甚至重大的破损。并非所有用户都关注meta,并且会知道这一点。将报价块分成两部分很容易错过;尽管意义不大,但仍然有些糟糕。 (不过,可能会自动修复特定的问题。)

– Peter Cordes
20 Jun 2'在4:43



@ PM2Ring如果仅通过SEDE进行搜索,可能会很有用,以查找麻烦的帖子以进行手动修复(在时间,精力和倾向允许的情况下)。

–安德鲁·利奇(Andrew Leach)
20年6月3日在22:35

这只是发生在我身上。

–billynoah
20/09/14 '16:20

#5 楼

这也将适用于聊天吗?那在其实现中有其自身的怪异之处,这些怪异之处与主要站点不同(例如,当> quote在主要站点上工作时,必须进行>quote报价)。这会以任何方式改变吗?

评论


不,此迁移不会影响聊天。它只会触及整个网络中的帖子(问题和答案)。我个人认为我们应该保持一致(包括聊天和其他地方),但这是完全不同的蠕虫病毒。

–汉姆·沃克♦
20年6月1日,11:58

@HamVocke-这样也不会影响评论吗?

–数学
20年6月1日,11:59

正确!评论不会受到影响。

–汉姆·沃克♦
20年6月1日在12:09

在这里添加我的声音-现在,我们正在运行3种不同的markdown方言(主要,注释和聊天),并且最好在其中运行一个子集。

–游侠怪胎♦
20年6月1日,12:30

@Ham在谈论蠕虫罐头,51区将发生什么?会受到影响吗?

–影子向导正在接种疫苗
20年6月1日,12:36

@ShadowKeepsSocialDistance我不知道51区的任何地方甚至都使用Markdown发布。那里的所有盒子都将使用淡化的注释Markdown系统。 Area 51元站点已经与任何其他元站点运行相同的代码。

– animuson♦
20年6月1日,12:56

#6 楼

在查看时如何显示旧修订(如果它们会触发编辑,如果它们是最新的)? CommonMark将通过一项非颠簸的编辑进行更新(我想这将显示为由Community bot执行),并将帖子的最新版本从Stack Exchange当前的Markdown方言转换为CommonMark。

如果可以通过帖子的修订历史记录访​​问的帖子的旧(即已经是非当前的)版本包含与CommonMark不兼容的Markdown,那么当用户访问该版本时,将如何呈现该版本?它还会显示以前的HTML吗?

当在修订历史记录中查看差异时(在“内联”和“并排”视图中),它们将如何显示?无论有多旧,现有的差异(即,现在已经存在的两个连续修订版本之间的差异)是否仍将呈现相同?

评论


您的理解是完全正确的。在修订历史记录中,我们根据修订的markdown源动态计算和比较帖子的HTML。这意味着,切换到CommonMark之后,即使是CommonMark迁移之前的修订版也将使用新的CommonMark渲染器进行渲染。我知道,这还不算是一流的,但是如果我们不想永远保留旧的渲染器,那就是我们能做的。

–汉姆·沃克♦
20年6月2日在8:40

@HamVocke-也许,一旦在所有站点上执行了switcheroo,并且所有可能出错的地方都出错了(随后已修复),请考虑在较早的修订版上运行更新的migrator脚本吗?

–罗伯特尼克
20年6月3日,下午5:52

@Robotnik我认为这将使得无法审核更改。尽管当前的更新方式只是制作一个新修订,但是您建议的内容将更改修订本身,没有什么可与之进行比较。那真是可怕的IMO。

–俄罗斯
20年6月3日在18:20

@HamVocke“这意味着切换到CommonMark之后,即使是CommonMark迁移之前的修订版也将使用新的CommonMark渲染器进行渲染。”在这种情况下,请考虑开源客户端渲染器,以便可以将其转换为用于查看旧修订的加载项/用户脚本。

–开尔文
20年6月4日在11:39

@kelvin,您可以在GitHub上找到我们旧的客户端Markdown渲染器的源代码。请注意,已发布的版本缺少最新的重要功能(即处理嵌套代码块的功能)。但我希望这会有所帮助。

–汉姆·沃克♦
20年6月4日,12:26

#7 楼

块报价迁移错误状态已完成

我在这里收到了奇怪的“ Commonmark迁移”编辑:

https://meta.stackexchange.com/posts/344867/revisions
https://meta.stackexchange.com/posts/345953/revisions
https://stackoverflow.com/posts/37844312/revisions


都引用空白格式似乎是有效的CommonMark语法,所以我不知道为什么要首先移植它们。
https://spec.commonmark.org/0.12/#block-quote-marker


评论


哇,真棒!事实证明,markdown自动修复程序中存在一个错误:当blockquote之前的行包含连字符时,随后的blockquote将缩进。我有一个repro,现在将修复它,因此我们不会在即将进行的迁移中遇到此问题。在这两种情况下,请随时手动编辑降价。

–汉姆·沃克♦
20年6月4日在8:07

@HamVocke您已经修复了该错误,这很不错,但是自动修复程序可以使该编辑通过,这有点令人担忧。这似乎与以下内容不一致:“如果使用新的渲染器发布的帖子看起来有所不同(并且如果只有一个空白),我们将不会自动重新渲染该帖子并首先进行调查。”

– PM 2环
20年6月4日在9:37

@ PM2Ring我了解您的担忧来自何处,但该声明仍然成立。 “外观不同”是指呈现的HTML,而不是帖子的Markdown版本。在这里列出的案例中,Markdown进行了更改,但仍产生了相等的HTML(因为CommonMark允许一些歧义)。

–汉姆·沃克♦
20年6月4日在9:39

@HamVocke啊,我明白了。新版本看起来与以前的版本相同,并且HTML相同。只是Markdown具有额外的缩进。

– PM 2环
20 Jun 4'9:48



对转换后的结果也运行通用标记林特可能是个好主意。在生成的通用商标合法但很奇怪的情况下,短绒棉可能会发出警告。

–tkruse
20年6月4日在15:43

@HamVocke仅供参考:添加了我在Stack Overflow上发现的错误/奇怪的块引用编辑。

– pkamb
20年9月1日于17:57

#8 楼


您是否有将自动转换的所有“知名问题”列表?例如,我大量使用了<!-- language: python -->语法。可以将其转换为代码围栏吗?
如果我们自己的帖子之一不能被转换,以便我们可以自己编辑它们,我们会收到通知吗?还是会进入专门的队列?
如果我们怀疑自己的帖子的Markdown内容可能失败,我们应该尝试抢先更正吗?还是最好等到自动迁移之后?


评论


我想查看已更改的确切列表。

– Sinatr
20年6月2日在8:33

1.语言提示不会转换为代码围栏。一段时间后,渲染器将理解旧的语言提示语法。将来这种情况将会改变,因此请不要依赖它,而是开始使用代码围栏。 2.没有通知,目前没有审核队列。 3.我会让迁移工作繁重。提前更正帖子不会有任何危害,但也不必这样做。

–汉姆·沃克♦
20年6月2日在8:57

@HamVocke语言提示由迁移处理,对吧?这正是CMark渲染器用于新内容和编辑的过渡期,是吗?

–迈克尔
20年6月2日在13:23

是的,严格来说,处理语言的提示位于渲染器本身之外,因此它们将在一段时间内被拾取。但是,我们想以此为契机,弃用一种已被官方取代的手动解决方案,并鼓励大家不要使用老式的语言提示来获取新内容,因为我们会摆脱它们最终。

–汉姆·沃克♦
20年6月2日在15:34

@HamVocke好的。如果我理解正确,那似乎非常合理,谢谢。 (旁注:请您在回复时@评论者(海报除外)。我不知道您有回信。)

–迈克尔
20年6月3日在15:39

@HamVocke是否表示使用此功能的一些被遗忘的帖子将在渲染器理解这些注释后的“一会儿”之后中断?

–俄罗斯
20年6月3日在18:27

@Ruslan的旧帖子会很好,因为我们只渲染一次帖子的HTML,然后将其提供,直到有人再次更改帖子为止。一旦不再支持语言提示,则编辑仍在使用的旧帖子意味着您将不得不切换到新语法。

–汉姆·沃克♦
20年6月3日在18:37

“语言提示不会转换为代码围栏。” @HamVocke为什么不呢?通常,我会使用自动检测的语言。如果我将其覆盖,则有充分的理由。

– miken32
20年5月5日在17:08

@ miken32,因为正确无误。这又是一个权衡的问题:有多少用户正在使用该功能,建立自动转换需要花费多长时间,以及引入副作用的风险有多大。然后是一个问题,如果我们将缩进的代码块更改为受防护的代码块,那么每个人都可以吗?对我而言,风险和努力显然超过了收益。

– Ham Vocke♦
20年6月6日上午10:19

@HamVocke“语言提示不会转换为代码围栏”-请重新考虑该决定。据我了解,这意味着使用旧语言提示突出显示的所有代码将(a)不再突出显示,除非随后进行手动编辑以添加新语法; (b)此类手动编辑将更改每一行,这是(i)繁重的工作;(ii)容易出错;并且(iii)为代码的每一行创建一个差异,这使得更难注意到错误。对我来说,这是自动翻译的明显案例。

– phils
20 Jun 15'在22:06



关于差异的要点-我会定期编辑其他人的问题和答案,以在现有代码中添加语言提示。如果他们使用缩进代码,我将添加SGML注释提示;如果他们使用三重反引号,我会使用。无论哪种方式,我创建的编辑差异都是最小的,因此每个查看该编辑的人都可以一眼看出它是正确的。提出的更改将意味着,没有任何人可以在不更改代码的每一行的情况下向缩进的代码块添加语言提示,这首先需要付出更多的努力,并且需要进行更多的审查。

– phils
20年6月15日在22:13

不自动迁移缩进代码可能会确保很少有人会通过添加(或更正)语法突出显示来烦恼改进缩进代码。当他们确实进行了此类改进时,不仅需要执行编辑的人员,而且还要检查人员进行更多的工作。

– phils
20年6月15日在22:18

#9 楼



如果我没有记错的话,SE仍然使用已经停用的Google Prettify。支持更多的语言和新的语言版本将是很棒的!

评论


不,目前不行。首先,让我们摆脱繁琐的迁移工作,然后为这些变化奠定良好的基础:)

–汉姆·沃克♦
20年6月1日在17:48

我投票支持Pygments(Python)

– iBug说恢复莫妮卡
20年6月4日在16:41

#10 楼

Mathjax

在几个网络站点上都使用了诸如spoiler,MathJax,电路图,堆栈片段之类的东西。即使它们不是官方CommonMark规范的一部分,我们也将继续支持所有这些自定义语法元素。 MathJax支持已损坏。这对于许多站点都是必不可少的。 Worldbuilding SE和Chemistry SE也使用它,如果迁移未能正确支持MathJax,则很多文章都会中断。在依赖附加功能的网站上使用新系统应该不可行吗?还是根本就不选择返回?
冒着侮辱您的IT部门的风险,是否在更改之前的某个冻结日期将现有站点数据永久备份到某个地方?如果您必须将现有问题转换为新格式,那么(大概)存在较高的风险,这对于像MathJax这样的带有“扩展名”的网站来说效果不佳,并且如果不得不更改(谁知道原因是什么),知道原始格式的数据是安全的。

评论


呈现的html存储在数据库中,因此它是原始文本。同样,迁移将是增量的,而不是同时进行所有迁移。

–脑袋
20年6月1日在22:16

如果我们发现帖子看起来和以前一样,我们只会重新渲染该帖子。重新渲染是向帖子历史记录添加新修订的问题,其中包括我们将应用于帖子降价的更改。如果失败,我们可以随时撤消最新版本。我们已经构建了一个工具,可以完全以批处理方式进行操作-如果确实发生了问题,我们将运行此自动回滚并还原以前的内容。

–汉姆·沃克♦
20年6月2日在7:02

世界建设?

– TylerH
20年6月2日在20:51

@TylerH物理SE,化学SE,天文学SE和Worldbuilding SE都是我使用的站点,并且都使用MathJax。一些关于Worldbuilding的问题需要基于科学的答案,而在那里方程式并不少见-如果Mathjax支持消失,相当一部分的WB SE职位将被“打破”。

– StephenG
20年6月2日在21:08

@StephenG听起来好像有很多关于Worldbuilding的不合适的问题,但这是Worldbuilding Meta的主题...

– TylerH
20年6月2日在21:14

@TylerH我向您保证,需要真实科学的问题在WB SE上很常见,而根本不是“不合适”。因为他们几乎都具有虚构的成分/框架,所以这些类型的问题在“真实的”物理科学网站上将是毫无意义的。例如,关闭Physics SE职位并推荐给WB SE的情况并不罕见(反之亦然)。

– StephenG
20年6月2日在21:18

将stats.SE添加到大量使用MathJax的网站...

– Glen_b
20年6月3日,6:26

RPG.SE确实也看到了MathJax的大量使用,尽管主要用于格式化表格(尽管有一些用途用于统计以及与掷骰子/ RPG相关的数据)。

– V2Blast
20 Jun 7'23:05



Crypto.SE也经常使用MathJax,但迁移在这方面进行得很顺利(看来)。

–马滕·博德威斯(Maarten Bodewes)
20年6月23日在9:41

#11 楼

我似乎还记得,CommonMark包括SE到目前为止所支持的语法以外的其他语法,特别是用括号括起来的枚举,即1),以及用于创建枚举列表的点号。变成了枚举列表(有序列表,或<ol>)?对于Markdown希望使格式尽可能直观的愿望,这将是一个令人惊讶的进步,因为每一个不知道Markdown的用户都会以这种方式编写编号列表,并且如果他们的帖子突然自动工作而不需要,那将是很棒的手动修订。
以前在这里要求:
将括号添加为可接受的Markdown有序列表定界符

评论


没错,这是CommonMark将为Markdown语法带来扩展功能的地方之一。切换后,1)样式的枚举将自动转换为有序列表

–汉姆·沃克♦
20年6月1日,12:33

@HamVocke:但是仅适用于新的和编辑过的帖子,因为您不会自动更新那些发生积极变化的帖子的缓存-是吗?

– Wrzlprmft
20年6月1日,12:59

正确!即使我认为这是一种改进,但是我们的保护措施阻止我们自动更新适用于此的帖子。但是,新的帖子和编辑将获得所有新的通用标记优点。

–汉姆·沃克♦
20年6月1日于13:04

我一直认为这是一种避免将其格式化为常规Markdown列表的方法(也就是说,某些用户会竭力控制渲染结果的外观)。

–P.Mort。 -忘记了粘土Shirky_q
20年6月1日在18:56



@ P.Mort。

–克里斯蒂安·劳(Christian Rau)
20年6月1日在19:15

@HamVocke大概有很多带有1)样式列表的旧帖子。如果我理解正确,它们将不会自动迁移,需要手动检查吗?

– E.P.
20年6月4日在10:21

@ E.P .:正确。除非该帖子包含原始帖子中列出的“ [您]可以编写降价方式的更改”之一(例如,针对列表,blockquotes,代码块突出显示的内容),否则它不会重新呈现现有职位。仅当帖子被编辑或创建新帖子时,才会应用更改。

– V2Blast
20年6月4日在22:29

#12 楼

错误markdown-preview状态已完成
Abbr.SE快捷方式在预览中被解析为域
当我编写一个缩写的站点名称(例如rpg.se或meta.se)时,它现在被自动解析为仅在帖子预览中的链接。它指向的是确切的域,而不是我们的域之一,即http://rpg.se/http://meta.se/
meta.so,meta.rpg.se等也会发生同样的情况。发布到副本。

评论


看起来预览渲染器将其检测为国家/地区代码TLD。有关更多测试,请参见此格式化沙箱帖子。

– Meta Andrew T.
20年6月6日在14:21

确认,这是我们新的markdown渲染器,它过于渴望自动链接。我已解决此问题,将删除此行为并使自动链接更加严格。今天晚些时候出去。

–汉姆·沃克♦
20年9月9日,11:56

@HamVocke这似乎已经固定给我了! Meta Andrew T.的格式化沙箱帖子也已正确处理。非常感谢你。 :)

–doppelgreener
20-6-10上午11:18



#13 楼


需要修复的是什么损坏的?
如果您花了很多时间来解决这个问题,我很不客气,我深表歉意,但是需要修复的是什么?使用此界面,我遇到的问题很少。这有什么紧迫的需求?
这个问题是基于多年沉浸在“为了改变而改变”中的经验,最终没有任何价值。看到此更改带来的增值?通过@HamVocke,谢谢)

通过此开关,我们可以获得:一致的用户体验,与其他网站上的用户了解一致,可预测的格式,
减少了维护负担对我们的软件工程师而言,降低了风险
,将来在更改Markdown格式时,为构建格式化和编辑方面的未来功能增强提供了稳定的基础。以大幅减少技术债务的形式为我们的工程团队赢得胜利。


评论


通过此切换,我们获得:与用户从其他网站上了解的一致的用户体验,可预测的格式,减轻了我们软件工程师的维护负担,降低了将来更改降价格式时的风险,为构建将来的功能增强提供了稳定的基础围绕格式和编辑。对于我们的最终用户而言,价值是巨大的,而我们的工程团队可以通过大量减少技术债务来赢得很多收益。

–汉姆·沃克♦
20年6月4日在6:31

我之所以投票,是因为这个问题与我脑海中的问题相同,但又太害怕要求不要不想显得愚蠢或天真地幼稚。这也引起了好评。这样的评论更容易使我的呆呆的头脑缠住。

– Mari-Lou A
20 Jun 4'7:56



@HamVocke谢谢您的评论。

–KorvinStarmast
20年6月4日在15:04

@ham换句话说:最终用户没有任何价值。确实,您正在投入精力以确保根本没有可观察到的变化。您可以期望您的读者是完全有能力理解的开发人员,即变更有时不会带来任何价值,而是可以实现最终可以带来价值的未来变更。这并不是所做的更改,因此不需要这样出售。

– Tim
20年6月8日在7:40

@Tim切换到通用标准无疑对最终用户确实有价值,因为他们不必为使用Markdown的Internet上的每个站点学习太多类似但令人困惑的不兼容格式规则。

–埃米尔·杰拉贝克(EmilJeřábek)
20年6月12日在10:55

@emi一个站点切换到CommonMark没有任何价值。如果每个人都做到了,您可能会有一点要点,但是即使那样,切换也必须尽可能不可见才能成功。对于用户而言,无法观察到的价值是没有价值的(以一些极端情况为模)。相比之下,将Stack Exchange切换到GitHub Flavored Markdown。现在可以提供实际价值。我的意思是,我们几乎一直在要求使用表,只要存在Stack Overflow。 GFM也有正式规范。

– Tim
20年6月12日在12:44

@Tim因为GFM实际上是CommonMark的扩展,所以您证明了我的观点。

–埃米尔·杰拉贝克(EmilJeřábek)
20年6月12日在13:39

@emi我不确定您要证明哪一点。如果我对此表示支持,请认为这是偶然的。将一个Markdown渲染器替换为另一个功能等效的Markdown渲染器不会为用户带来价值。这是纯粹属于网站内部的更改,而且如果一切顺利,则没有任何可观察到的更改。这样就可以在以后的某个时间点传递价值,这一事实并不能神奇地将这一改变变成可以做到的。如果您不知道此更改,您将不会注意到任何事情。 “不变”对您来说是否像“增值”?

– Tim
20年6月12日在16:38

@蒂姆?????您从哪里得知“没有任何可观察到的变化”?编写答案所需的语法细节已更改;这无疑是可以观察到的变化,如果我不知道这一点,我可能很快就会发现困难的方法,并感到困惑。

–埃米尔·杰拉贝克(EmilJeřábek)
20年6月12日在16:56

@emi在整个帖子中都写道,例如:“对于您的绝大多数写作,您根本看不到任何区别。”您可能会观察到的变化是极端情况。在极少数情况下,改用CommonMark是一个错误修复。不管您希望这有什么不同,它实际上都是平凡的:开关是实现细节,它本身并没有为用户带来任何价值。但是我承认我在一件事上是错的:您毕竟不能期望读者成为开发人员。

– Tim
20年6月12日在17:52

转换为通用且正式的标准(从自定义且可能是专有的规则混搭)可能会有助于长期保存我们的内容。

– darij grinberg
20年6月14日在9:08

#14 楼

错误的帮助中心状态已完成

您仍然可以使用缩进的代码块,但不能声明首选语言的明确显示。方法:

要手动指定缩进代码块的语言,请在代码块之前插入这样的HTML注释:
<!-- language: lang-js -->

     setTimeout(function () { alert("JavaScript"); }, 1000);


调整此代码可能很难仅适用于“已迁移”的网站,但对于所有网站都已将其删除也许是个好主意,因为有了代码围栏符号(```c#),我们还有不错的选择?

评论


好点。这是我一长串要做的事情,但这可能只是更改我们的帮助中心的好时机。我会看一看 :)

–汉姆·沃克♦
20年6月3日,14:04

@HamVocke:请注意tkruse的答案,该答案也指出了该帮助页面上blockquotes的描述问题。

– V2Blast
20年6月4日在22:35

@ V2Blast是的,两种情况下我都已进行了修复。很快就会得到两个更改。

– Ham Vocke♦
20年5月5日在6:23

@HamVocke似乎只完成了编辑帮助页面,对帮助中心页面(还是网站主持人可编辑页面)也是如此?该示例之后的语句是否还可以为所有代码块指定一种语言/删除该语言,还是需要更新它们?

–尼克
20年7月3日在16:57



@尼克很棒的收获。帮助中心页面是可修改的。虽然我拥有编辑权限,但我不想搞乱我们的mod特权,而是让他们去做。我唯一应该更改的是提及<!-language:lang- *->示例,并用代码围栏符号替换它们。

–汉姆·沃克♦
20年7月6日在6:36

@HamVocke模组只能在帮助中心本身和导览中编辑一页和几段代码。

– Glorfindel
20年7月6日在6:52

@Glorfindel dang,我不知道。好吧,我继续自己修复了帮助中心,使其与我们的编辑帮助页面一致:)

–汉姆·沃克♦
20年7月6日在10:08

如果您想立即修复该小错误,@ mod,我们将很高兴有权限编辑更多页面,@ Ham ;-)

–科迪·格雷
20年7月6日在10:24

#15 楼

bug
由于更新了CommonMark,链接到其中包含)的URL变得更加困难。请考虑以下指向Stack Exchange API文档的链接:
https://api.stackexchange.com/docs/questions-by-ids#order=desc&sort=activity&ids=349185&filter=!)rTkraPYPefwELKox66q&site=meta&run=true

如果我像往常一样尝试将其[link] [1]链接到该链接,请在文章末尾提供参考。工作了。 (此答案已经证明了这一点。)
有一个解决方法,一个很好的旧HTML锚元素:
<a href="https://api.stackexchange.com/docs/questions-by-ids#order=desc&sort=activity&ids=349185&filter=!)rTkraPYPefwELKox66q&site=meta&run=true">this link</a>
%29。
[1]:https://api.stackexchange.com/docs/questions-by-ids#order=desc&sort=activity&ids=349185&filter=!)rTkraPYPefwELKox66q&site = meta&run = true

评论


看起来编辑脚本没有触及这些帖子,例如meta.stackexchange.com/a/306515/295232;这是一个好兆头。

– Glorfindel
20年6月10日在6:38

我会根据CommonMark的规范争论一下status-bydesign:“只有在(a)它们是反斜杠转义符或(b)它们是一对括号”和内联链接的更多示例(489,492-496)。

– Meta Andrew T.
20年6月10日在6:57

@MetaAndrewT。也许吧,但是如果社区用户修复所有这些实例,那就太好了。否则,很多链接肯定会中断...

– Glorfindel
20年6月10日7:00

在查看链接引用(使用[link] [1]语法)时,这看起来像是一个简单的修复,只需找到方括号并对其进行百分比编码。使用纯链接语法([link](reference))时,要困难得多,因为您无法可靠地判断出URL的右括号是什么,以及链接引用应该在何处。作为迁移的一部分,自动修复链接引用看起来可行,对我来说,自动修复普通链接听起来像是一个大兔子洞。我可以尝试修复前者,但我对后者感到悲观。

–汉姆·沃克♦
20 Jun 10'14:41



@HamVocke谢谢!此类链接(AFAIK)从未使用纯链接语法,我认为您可以忽略这些情况。

– Glorfindel
20年6月10日在14:45

#16 楼

关于移动支持又如何呢? br />我的假设:当客户端渲染器发生更改时,将导致所有现有(不再受支持)的移动应用在此更改后会真正损坏并且无法使用?要求澄清)

评论


您是在问何时在移动应用上创建或编辑帖子或何时查看它们?对于查看帖子-我们将渲染的markdown存储在数据库中,这使我们可以跳过每个请求的渲染markdown。 Mobile使用呈现的HTML;它不会渲染降价本身。对于编辑/创建-我们正在内部讨论前进的最佳方法

–迪恩·沃德♦
20年6月2日,11:21

我主要是在考虑查看,但是可以肯定的是,仍在使用该应用程序的人也可能会使用它们来创建/编辑内容。

–GhostCat
20年6月2日,11:28

我刚刚对过去7天在Stack Overflow上创建或编辑操作的数量进行了快速分析。来自移动应用程序的操作占创建事件的0.3%,占编辑事件的0.6%。我们需要确定其中有多少将导致Markdown导致HTML不同,但我认为我们很可能不会在这里采取任何措施来解决差异-正如您提到的,移动应用程序已不再维护,并且我们不在可以发布新版本的位置。如前所述,渲染将继续不起作用!

–迪恩·沃德♦
20年6月2日,12:11

谢谢,从您的角度来看,这确实是一项出色的工作。我喜欢这种“基于数据”的方法!

–GhostCat
20年6月2日,12:25

这包括三个部分:1)查看网站上的帖子(更改前后的帖子),2)使用应用内降价编辑器,以及3)预览帖子/编辑。关于1,我不希望发生破损,但是如果CommonMark生成的HTML差异足以破坏CSS,则有可能发生破损。在这种情况下,页面看起来很难看。关于2,我不希望出现任何重大问题,因为所有工具栏按钮都应产生有效的CommonMark。可能存在某个按钮无法正确转换现有CommonMark的情况,因为自从我们添加了代码围栏以来,这种风险就存在了。

–布赖恩·尼克♦
20年6月2日在20:01

关于3,iPhone和Android手机应用应该不错,因为预览是通过API调用和服务器渲染完成的。以这种方式预览的任何帖子都应完全按照预览中的样子显示。 iPad和(我相信)Android平板电脑应用使用PageDown实时呈现Markdown预览。现在,当用户遇到Markdown / CommonMark差异时,这些预览可能会变得不准确。再次,这是今天与代码围墙存在的问题。如果您今天去应用程序并使用代码隔离栏预览问题,并且看起来还不错,那么您应该不会看到回归。

–布赖恩·尼克♦
20年6月2日在20:07

#17 楼


对于这些帖子,我们构建了一个工具,可以通过直接更改帖子的Markdown来源并重新呈现相关帖子的HTML来自动解决这些众所周知的问题。当我们自动更改帖子的Markdown时,最终看起来就像是常规编辑,但我们确保此操作不会使帖子升到顶部。编辑如下:访问站点上社区用户(ID -1)的个人资料,然后导航到“所有操作”→“修订”。例如。在Meta Stack Exchange上:


#18 楼

错误low-quality-post
社区编辑触发了对帖子质量的评估
Code Golf当前正在看到大量待审核的内容。这可能是因为此站点上的许多(好的)答案看起来质量很差,但是先前已被批准或早于当前的质量自动判断规则。提出来,淹没实际上需要审核的新帖子。

评论


这是一个令人担忧的问题,我完全没有想到这一点。审查队列逻辑非常复杂,我以为我已经采取了所有必要的预防措施。很抱歉造成的混乱。我们正在讨论下一次迁移的可能缓解措施,并且还在讨论是否可以为已经运行的迁移解决此问题。如果您希望在此期间采取行动以解除封锁,则基本上“ Community”在2020-06-16 9:00 UTC之前所做的所有编辑都是由迁移触发的,可以声明为“ ok”。再次,很抱歉造成混乱。

–汉姆·沃克♦
20年6月17日在14:01

@HamVocke如果您每天允许我进行20条以上的评论,我将很乐意做OK单击节。我们的许多用户已经尝试清理混乱。

–Adám
20年6月17日在15:38

现在,Code Golf社区终于清除了低质量的后审队列。从好的方面说,这指出了许多旧的答案,应该删除这些答案(由于与质量得分无关的原因),但它们会从裂缝中溜走。

–pppery
20年6月18日在2:22

#19 楼

bug help-center
帮助中心的文章(用Markdown编写)似乎也需要编辑脚本的帮助。示例(刚刚编辑了该页面,然后再次编辑以更正迁移,但是逻辑上认为其他页面也会受到影响):


#20 楼

bugstatus-completed
正如这篇文章的用户musefan所注意到的那样:
使用两个波浪号不再呈现为删除线文本,而是像在帖子预览中那样呈现。可以在编辑预览的删除线中看到此文本~~

评论


嗯是的这是由于客户端和服务器端渲染器之间当前激活的功能集不匹配造成的。之前我们不支持~~删除线语法,所以我们现在不应该盲目切换。暂时仍可以使用 HTML标签实现删除线。一旦迁移的尘埃落定,我们是否可以重新考虑是否将~~(可能还有其他)作为受支持的markdown格式选项的一部分。我将解决问题,以使客户端和服务器端渲染器的行为保持一致。

–汉姆·沃克♦
20年6月17日在8:59

感谢您及时的回复!

–Luuklag
20年6月17日在9:03

#21 楼

编辑帖子时,单击工具栏上的“代码示例”图标,仍会插入传统的缩进。 “代码防护”(```)。


评论


我知道您来自哪里,但严格来说,此按钮仍然正确。一年多以前,我们引入了受防护的代码块,虽然我个人更喜欢缩进的代码块,但缩进或受防护的代码块只是一种品味问题,并且两者都同样有效。这里没有明显的“正确”或“错误”,因此我认为我们现在将其保留。

–汉姆·沃克♦
20年6月18日在17:31

@HamVocke但缩进的功能现在较少,因为无法指定语法突出显示。对我来说,这是一个很重要的原因,那就是您不希望通过按钮选择密码保护。

–斯蒂芬·奥斯特米勒(Stephen Ostermiller)
20年6月20日在14:50

@StephenOstermiller确实是一个公平的观点。

–汉姆·沃克♦
20年6月20日在15:37

我同意,因为新用户将只使用按钮或使用缩进,而不管它应该使用哪种语言。然后,在将语言提示添加到荧光笔之前,由审阅者将代码转换为围栏。不太好。我已经创建了自己的帖子(忽略了这篇文章,对不起),并在按钮上显示了有关语言提示和HTML标签的一些附加说明。

–马滕·博德威斯(Maarten Bodewes)
20 Jun 23'11:03



#22 楼

有点小问题,但是当我更新本文时,我注意到字符序列$呈现为“ $”,而不是迁移到CommonMark之前的“ \ $”。似乎要在美元符号之前渲染反斜杠,现在必须通过两次键入反斜杠来逃避反斜杠(即\),而在以前的渲染器中则不必要。反斜杠后的任何符号将导致反斜杠不再呈现,例如\.\@\=都分别渲染为“。”,“ @”和“ =”,而它们以前分别渲染为“ \。”,“ \ @”和“ \ =”。 (数字或字母不会一样。)
如果可能的话,迁移脚本也可以自动修复使用这些帖子的帖子吗? (请注意,代码标记中的那些序列仍将像以前一样呈现,并且不需要修复。)

#23 楼

bugpreview
当我今天在键入另一篇文章时,我发现了CommonMark渲染器和以前的渲染器之间的另一个区别:URL后面的某些符号(例如冒号)曾经被视为不是URL的一部分,但现在它们就像对待一样。这似乎只会影响预览,而不会影响实际发布。
示例:
As per our FAQ https://meta.stackexchange.com/questions/58587/what-are-the-reputation-requirements-for-privileges-on-sites-and-how-do-they-di:


网站上特权的声誉要求是什么,它们在每个站点之间有何不同?:

...但是现在在预览中呈现为:特权对信誉的要求是什么,以及每个特权与站点之间有何不同?或复制链接。)
仅在帖子编辑器预览中发生;在实际的帖子中,两者都呈现为相同的位置,并且冒号不是链接的一部分。
可以修复预览中的此问题吗?

评论


您的:示例现在似乎已修复。 (尽管URL仍然会打乱一般情况,例如uops.info/…消耗一个)作为[foo](https://example.com/foo?bar=xyz(r64)和该控件的URL的一部分-L链接到最底端的东西只是行不通。

– Peter Cordes
20 Jul 23'4:56



@PeterCordes不固定。这个问题与编辑预览有关。在实际帖子中看起来还不错。

–好奇号刺猬索尼克
20年7月23日在5:36

啊,我发现在查找有关问题的现有报告时,我没有足够仔细地阅读:编辑器预览显示可单击的链接,而用[]包围的最终呈现的帖子则不可用,可能是半相关的。

– Peter Cordes
20 Jul 23'5:44



#24 楼

bugstatus-declined
可以使用HTML注释发布空帖。例。请注意,无论是否使用CommonMark(https://puzzling.meta.stackexchange.com/posts/6925/revisions https://meta.stackoverflow.com/posts/398084/revisions-两个链接,需要10k。尽管基本原理相同)。
这可能是回归分析-这些类型的帖子在发布之前曾经被屏蔽。

评论


这肯定看起来像一个问题。但是,由于我们在puzzling.SE(一个尚未迁移到CommonMark的站点)上重现了该问题,因此可以确定,CommonMark迁移不会成为此问题的原因。

–汉姆·沃克♦
20年6月8日在13:39

相关(MSE):扫描帖子以获取无用的HTML注释

–P.Mort。 -忘记了粘土Shirky_q
20年6月9日在10:25

#25 楼

几个问题:


要更新HTML(因为它已被缓存)还是仅仅是Markdown代码?
还要在HTML中添加条目吗?编辑历史记录,大概是说社区做出了改变?


评论


只要有安全条件,我们都会更新原始Markdown(即生成的HTML等同于旧的HTML)。从技术上讲,这也将重新烘焙HTML。我们会将更新存储为新的编辑,由社区用户触发,并且不会影响帖子本身。

–汉姆·沃克♦
20年6月1日于13:12

@HamVocke:您是否会进行某种形式的自动检查,以确保旧的HTML等同于新的HTML? (也许可以传达一些无法解决的问题?)作为MathOverflow和math.stackexchange用户,我有点担心帖子突然变得不可读,并且会持续多年,因为没有编辑权限的人会注意到这一点。

– darij grinberg
20 Jun 14'9:10



@darijmeta.stackexchange.com/questions/348746/…

– DavidG
20年6月14日在11:36

#26 楼

我是否正确理解您将解决自动列出的兼容性问题,例如列表段落需要更多的缩进,空行之前的引号标记,标题之前的空格等等...?问题很可能已经涵盖了一般迁移说明中已经提到的问题,但是我只是想确保您已经涵盖了这一点。我不希望在现有的10,000个帖子中突然出现大量未对齐的段落或多块引用。

评论


是的,迁移将尽我们所能自动修复帖子的Markdown中的兼容性问题。可能有一些我们尚未介绍的修复程序,但是大多数琐碎的问题将自动修复。重申一遍:如果我们不能自动修复帖子,并且发现新的HTML外观会有所不同,我们将完全不涉及此帖子。

–汉姆·沃克♦
20年6月1日在14:04

@HamVocke,“完全不涉及此帖子”到底是什么意思?源和渲染的内容将与以前相同,如果有人对其进行编辑,则在新解析器处理源时,它会爆炸吗? :)

–ilkkachu
20年6月1日在14:13

@ilkkachu不错,是的。每当我们找到这些帖子之一时,我们都会保存它,以便我们调查正在发生的事情。我希望这些情况大多数都是微不足道的。下一个编辑人员甚至不会注意到某些更改。对于那些帖子看起来根本不同的情况,我们将添加更多自动修复程序并重新运行迁移。这是权衡的问题。我们可以进行工作并仔细解决每个问题,也可以专注于大问题,而忽略琐碎的问题,如果有人编辑前进的文章会给您带来不便。

–汉姆·沃克♦
20年6月1日在14:42

@HamVocke:谢谢您的解释!这就说得通了。

– V2Blast
20年6月2日,12:42

#27 楼

错误状态已完成
编辑后在预览中突出显示代码似乎不再起作用。发布后,它仍然可以正常工作。要重现,只需单击此帖子上的edit并查看预览。.
 from __future__ import braces
 

这特别令人讨厌,因为在至少我不记得要在哪个站点上编写```python,在哪个站点上需要```lang-python,以及在两个站点上都可以工作(或者我需要空格还是...)。没有实时预览,我不得不猜测甚至可能重新编辑(就像我在这个问题中所做的那样)。

评论


接得好。我已重现了该错误,并提出了一个修复程序供审核。我可以发誓我已经测试了这种行为,但是好像我错过了。

–汉姆·沃克♦
20年6月11日在8:12

修复程序即将发布,修订版2020.6.12.37041

–汉姆·沃克♦
20年6月12日在9:15

@HamVocke我不确定“现在”是什么意思,但是此错误仍然存​​在。在哪里可以查看该修订版的状态?

–schtandard
20年6月14日在11:27

您可以在页面右下方的页脚中看到当前部署的修订版(显示为rev XYZ)。预览中的语法高亮显示对我有用,但我承认有时需要花一些时间才能输入(例如,切换到CommonMark之前)。看来我们可以在另一天进行调整。

–汉姆·沃克♦
20年6月14日在14:25

#28 楼

我今天在SO上注意到的预览和发布之间的微小差异:
诸如http:// localhost:3000之类的内容被预览为链接,但在发布中它是常规文本。
例如现在撰写这篇文章:

编辑:在评论中,它们确实以链接的形式呈现。

评论


我在这里报告了链接的类似问题。

–老大哥
20年7月1日在12:41

#29 楼

错误状态已完成
选项卡不再正确处理,这使得正确格式化CommonMark源代码变得困难。
示例1
使用选项卡缩进列表的内容不起作用。
似乎被视为一个空格。
这与CommonMark规范冲突。
例如,
*——⇥test
———⇥
———⇥test

将其表示为:



测试
测试




,而它应呈现为:
测试
测试




示例2
代码环境中的制表符被四个空格直截了当地代替,而不是形成四个空格。
例如,
———⇥*——⇥test
———⇥———⇥test

将呈现为:而应呈现为:


测试
测试



评论


我同意,看来我们在这里缺少了一些东西,新的行为与旧的行为略有不同。为了清楚起见:在将Markdown转换为HTML时,我们始终将制表符替换为空格,并已使用CommonMark,我们将继续这样做。让我看看这里发生的事情使缩进不同于旧的渲染器。

–汉姆·沃克♦
20年6月12日在6:45

解决了最新版本(2020.6.12.37042)的问题,该版本应解决您所描述的问题。如果您编辑帖子,则应该能够看到新行为。

–汉姆·沃克♦
20年6月12日,9:55

@HamVocke但是,SO代码块中经常有选项卡,它们是如何到达那里的?

– philipxy
20年6月22日在3:46

#30 楼

为什么不像以前对Markdown渲染器(iirc)所做的更新那样,仅将旧帖子的渲染HTML留在原处?

评论


他们正在渲染新的HTML,以检查与旧的HTML相比是否有更改,并丢弃更改输出的更新。因此,从本质上讲,他们不考虑呈现的HTML。 “ ...如果在迁移过程中检测到使用新的CommonMark渲染器渲染的帖子看起来不同的话,我们将不会在迁移过程中保存此帖子的新版本。”

– miken32
20年5月5日在17:06