不间断的破折号,而不是连字符

Posted

技术标签:

【中文标题】不间断的破折号,而不是连字符【英文标题】:Non-breaking en dash, not a hyphen 【发布时间】:2020-04-10 07:53:43 【问题描述】:

我知道在 html 中有一个不间断的连字符 (#8209),但我需要一个不间断的破折号 (#8211)。它们的使用方式不同。除了在我的整个文档中使用不间断代码包装文本和破折号之外,还有其他正确的方法吗,例如:

<nobr> TEXT #8211 TEXT </nobr>

【问题讨论】:

您可以尝试使用word joiner character,即&amp;#8288;,位于短划线的任一侧。 (关于输入&lt;nobr&gt;等而不转换成HTML:How do I insert inline code snippets on Stack Overflow?) 你说它们的用法不同。我非常好奇:不间断的连字符和不间断的破折号有什么区别?也许我用错了破折号? @SherylHohman 连字符 (-) 是用于连接单词或部分单词的标点符号。它不能与其他类型的破折号互换。破折号比连字符长,通常用于表示范围或暂停。最常见的破折号类型是短破折号 (-) 和长破折号 (-)。 酷。破折号和破折号有什么用? em/en 代表什么吗?我学到了一些东西——当我应该使用 en 或 em 更长的破折号时,我一直在使用连字符(“常规破折号”)来表示范围。我有一个网站要相应地更新:-) 【参考方案1】:

尝试用 Word-Joiner 字符包围短破折号 (#8288)。

TEXT&#8288;&#8211;&#8288;TEXT

【讨论】:

【参考方案2】:

在最近的一个项目中,这个问题让我发疯了。我发现很难相信破折号默认是中断字符。如果您可以在 html 中插入额外的字符,那么 &amp;#8288; 效果很好。请注意,在破折号之后只需要一个单词连接符,因为我相信它们之前不会中断。

出于多种原因,在我的源 HTML 中手动添加额外字符对我来说不起作用,我想出了一个 javascript 解决方案,它自动将.nobreak CSS 类应用于任何破折号和字符紧随其后。

<style>
    .nobreak 
        white-space: nowrap;
    
</style>

<body>

    <p>This is a paragraph with a number range, 1–34, and it will never break after the en dash.</p>

    <script>
        $("body").html(function(_, html) 
            return  html.replace(/(–.)/g, '<span class="nobreak">$1</span>')
        );
    </script>

</body>

一个更简单的解决方案可能是使用相同的脚本在破折号后自动插入&amp;#8288;。只需将js更改为:

$("body").html(function(_, html) 
    return  html.replace(/–/g, '–&#8288;')
);

【讨论】:

【参考方案3】:

根据这个documentation,以及关于单词joiner &amp;#8211; 的其他答案,以下HTML 应该产生一个不可破坏的破折号:

如果字符没有 HTML 实体,可以使用小数 (dec) 或十六进制 (hex) 引用。

<p>
Will break : 
<br />
 TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT&#8211;TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT
<p>

<p>
Won't break (word joiner):     
<br />
TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT&#8288;&#8211;&#8288;TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT
<p>

【讨论】:

以上是关于不间断的破折号,而不是连字符的主要内容,如果未能解决你的问题,请参考以下文章

将字符串拆分为空白列表,当下一个字符不是破折号时不包括单个空格

制表符空格而不是多个不间断空格(“nbsp”)?

为啥 PuTTYcyg 在手册页中显示 â 而不是连字符?

bash、破折号和字符串比较

为啥 ---(3 个破折号/连字符)在 yaml 文件中?

如何在qt标签中显示em破折号字符?