ChatGPT解决这个技术问题 Extra ChatGPT

如何为 GitHub 的 README.md 文件添加颜色

我的项目 underscore-cli 有一个 README.md 文件,我想记录 --color 标志。

目前,唯一的方法是使用屏幕截图(可以存储在项目存储库中):

https://raw.github.com/ddopson/underscore-cli/master/doc/example.png

但截图不是文本,防止读者在截图中复制/粘贴命令。它们的创建/编辑/维护也很痛苦,并且浏览器加载速度较慢。现代网络使用文本样式,而不是一堆渲染的文本图像。

虽然一些 Markdown 解析器支持内联 HTML 样式,但 GitHub 不支持;这不起作用:

<span style="color: green"> Some green text </span>

这不起作用:

<font color="green"> Some green text </font>
如果您无法通过 Markdown 为文本着色,嵌入屏幕截图是否有效?
是的。在我发布这个问题后,我想到了这一点。我认为屏幕截图可能是我最好的后备答案,尽管它显然并不理想。
所以还不可能在markdown文件中为文本添加颜色?
不-及其 2014 年 7 月的 ffs

m
mthongkerd

为自述文件添加颜色的一种方法是利用提供 placeholder images 的服务。

例如,可以使用这个 Markdown:

- ![#f03c15](https://via.placeholder.com/15/f03c15/f03c15.png) `#f03c15`
- ![#c5f015](https://via.placeholder.com/15/c5f015/c5f015.png) `#c5f015`
- ![#1589F0](https://via.placeholder.com/15/1589F0/1589F0.png) `#1589F0`

要创建您喜欢的任何颜色的列表:

#f03c15

#c5f015

#1589F0


这在 GitHub 项目中的卡片中效果很好,可以用来标记卡片并为它们着色
@BinarWeb 你把这个放在哪里?例如,将在 GitHub 上工作,它支持 Markdown 中的图像。
正如问题所询问的那样,我想为文本着色,而不是在文本前面有图像
我所描述的工作。您还可以在图像中放置彩色文本,例如 https://placehold.it/150/ffffff/ff0000?text=hello
🟥🟩🟦 参考:emojipedia.org/large-red-square
P
Peter Mortensen

您可以使用 diff 语言标签生成一些彩色文本:

```diff
- text in red
+ text in green
! text in orange
# text in gray
@@ text in purple (and bold)@@
```

但是,它会将其添加为以 - + ! # 开头或以 @@ 开头和结尾的新行

https://i.stack.imgur.com/cueq5.png

此问题在 GitHub markup #369 中提出,但自那以后(2014 年)他们没有对决定进行任何更改。


它还用紫色(和粗体)将由 @@ 包围 的文本着色。 Codecov 在其 GitHub 集成机器人的评论中利用了这一点,例如:github.com/zeit/now/pull/2570#issuecomment-512585770
我认为,如果您包含我在 github 问题上看到的一个聪明的技巧,您的答案会更有说服力:使用诸如“-!警告!-”之类的文本来合并/隐藏触发颜色的初始字符。
这正是我的用例,我想在问题评论中突出显示差异,我提供了一个快速的解决方法
t
totallytotallyamazing

您不能为 GitHub README.md 文件中的纯文本着色。但是,您可以使用以下标签为代码示例添加颜色。

为此,只需将这些示例之类的标签添加到您的 README.md 文件中:

```json
   // code for coloring
```
```html
   // code for coloring
```
```js
   // code for coloring
```
```css
   // code for coloring
```
// etc.

不需要“pre”或“code”标签。

这在 GitHub Markdown documentation 中进行了介绍(大约在页面的一半处,有一个使用 Ruby 的示例)。 GitHub 使用 Linguist 来识别和突出显示语法 - 您可以在 Linguist's YAML file 中找到支持的语言(以及它们的 markdown 关键字)的完整列表。


@NielsAbildgaard 谢谢! :) 答案是至少此时您不能在 GitHub .md 文件中为纯文本着色。我确实说明了这一点,并花了大约 4 个小时来研究它。无论如何感谢您指出我有用的 .md 代码标签,我很感激!
我也无法让它工作,但这很奇怪,因为颜色属性被列入白名单:github.com/github/markup/tree/master#html-sanitization
我用了 ´´´´Deprecated´´´´。工作正常,用于将不推荐使用的标签添加到文档中。
您可以使用 ```diff```` 语言标签生成绿色和红色突出显示的文本。
@Bahman.AI 不这么认为。看到这个StackOverflow
P
Peter Mortensen

不幸的是,目前这是不可能的。

GitHub Markdown documentation 没有提及“颜色”、“CSS”、“HTML”或“样式”。

虽然某些 Markdown 处理器(例如 Ghost 中使用的那个)允许 HTML,例如 <span style="color:orange;">Word up</span>,但 GitHub 会丢弃任何 HTML。

如果您必须在自述文件中使用颜色,则您的 README.md 文件可以简单地将用户引至 README.html 文件。当然,对此的权衡是可访问性。


它一般不会丢弃 HTML,hrbrpbi 和其他都可以!
如果您确实转发到 README.html,您可能希望在存储库中保留一份副本,这样您就不会丢失其提交历史记录。如果你觉得特别狡猾,你甚至可以将它包含在你的 gh-pages 中。
有关 GitHub 允许的实际 HTML 标记和属性,请参阅 jch/html-pipeline 的源代码。
如果它概述了端到端模式,这个答案可能会更加强大:使用 README.html.md 作为源代码,通过 Ghost 呈现到 README.html,这是在 Github 页面上呈现的内容。 README.html 是默认显示,还是用户必须点击才能访问它?
更新:我试过这个,但不幸的是端到端的故事是不可能的,因为 Github 不会自动呈现 README.html 文件;它显示为纯文本。这一定是您建议链接到它的原因。现在我更好地理解了您对“可访问性”的评论。
P
Peter Mortensen

作为渲染光栅图像的替代方法,您可以嵌入 SVG 文件:

<a><img src="https://dump.cy.md/6c736bfd11ded8cdc5e2bda009a6694a/colortext.svg"/></a>

然后,您可以像往常一样向 SVG 文件添加颜色文本:

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="100" height="50"
>
  <text font-size="16" x="10" y="20">
    <tspan fill="red">Hello</tspan>,
    <tspan fill="green">world</tspan>!
  </text>
</svg>

遗憾的是,即使您可以在打开 .svg 文件时选择和复制文本,但在嵌入 SVG 图像时文本是不可选择的。

演示:https://gist.github.com/CyberShadow/95621a949b07db295000


P
Peter Mortensen

如果您可以接受这种有限的颜色和形状(尽管它们在不同的操作系统和浏览器中可能看起来不同),这些表情符号字符也很有用,这是 AlecRust's answer 的替代品,它需要有朝一日可能会停止的外部服务,以及使用 Luke Hutchison's answer 中的表情符号的想法:

🔴🟠🟡🟢🔵🟤⚫⚪🔘🛑⭕

🟥🟧🟩🟦🟫⬛⬜🔲🔳⏹☑✅❎

❤️🧡💛💚💜💙🤎🖤🤍♥️💔💖💘💝💗💓💟💕❣️♡

🔺🔻🔷🔶🔹🔸♦💠💎💧🧊

🏴🏳🚩🏁

◻️◼️◾️◽️▪️▫️

还有许多带有字母数字、箭头和其他符号的彩色矩形字符可能适合您。

使用示例: This was my use case 已被这些表情符号解决(阅读此处的答案后想到的)

此外,以下表情符号是肤色修饰符,仅在某些设备上具有这种矩形形状内的肤色。例如,在 Windows 中,它们甚至没有颜色。不要使用它们!因为它们不应该单独使用,所以它们应该与其他表情符号一起使用来修改其兄弟表情符号的输出。而且它们在单独使用时在不同的操作系统、版本、浏览器和版本组合中呈现出如此大的差异。

🏿 🏾 🏽 🏼 🏻


这是一个巧妙的技巧!它不能解决最初导致我发布问题的语法高亮需求,但它可能可以解决各种其他需求。
谢谢@DaveDopson🙌
@Unicornist 仅供参考,我不知道为什么,但圆圈 2、3、4、6、7 不为我渲染,前 7 个方块和几颗心也没有
P
Peter Mortensen

我倾向于同意 with M-Pixel,目前无法为 GitHub Markdown 内容中的文本指定颜色,至少不能通过 HTML。

GitHub 确实允许某些 HTML 元素和属性,但只允许某些元素和属性(请参阅有关其 HTML sanitization 的文档)。它们确实允许 pdiv 标记,以及 color 属性。但是,当我尝试在 GitHub 上的 Markdown 文档中使用它们时,它不起作用。我尝试了以下(以及其他变体),但它们不起作用:

这是一些红色文字。

这是一些文字!

这些是红色单词

作为 M-Pixel suggested,如果您确实必须使用颜色,您可以在 README.html 文件中执行此操作并将其引用。


是的,不幸的是,正如我的回答所说,它在 Github 中不起作用。
有关 GitHub 允许的实际 HTML 标记和属性,请参阅 jch/html-pipeline 的源代码。
P
Peter Mortensen

在撰写本文时,GitHub Markdown 使用颜色预览呈现 `#ffffff` 等颜色代码(注意反引号!)。只需使用颜色代码并用反引号将其包围。

例如:

https://i.stack.imgur.com/WunTd.png

变成

https://i.stack.imgur.com/GA9Iv.png


我试过了,它似乎不起作用。你能链接到一个例子吗?
包括反引号,例如 `#hexhex`
这应该是公认的答案。很简单,它不需要外部网站或 HTML。
问题是如何为文本着色,这并不能解决它。此外,.MD 文件不再支持此颜色预览。
这似乎不再起作用
L
Luke Hutchison

我使用表情符号 Unicode 字符为 GitHub 标记页面添加了一些颜色,例如💡 或 🛑 - 一些表情符号字符在某些浏览器中是彩色的。

还有一些彩色表情符号字母:血型🅰️🅱️🅾️;停车标志🅿️;地铁标志Ⓜ️;其他一些有两个或更多字母的,例如🆗,以及盒装数字,例如 0️⃣。如果旗帜不可用,旗帜表情符号将显示为字母(通常是彩色):🇯🇵 🇰🇷 🇩🇪 🇨🇳 🇺🇸 🇫🇷 🇪🇸 🇮🇹 🇷🇺 🇬🇧。

但是,我认为表情符号中没有定义完整的彩色字母表。


什么是“编码”?你有(权威的)参考吗?您能否add回答您的答案(命名链接,而不是裸网址)? (但没有“编辑:”、“更新:”或类似的 - 问题/答案应该看起来好像是今天写的。)
@PeterMortensen Enicode 是一个错字——它应该说是 Unicode,抱歉。 (已修复——我很确定您不需要对 emoji 字符的权威参考。)我的意思是,在大多数平台上,emoji 字符(编码为,例如 UTF-8)以彩色显示,甚至在纯黑白文本的中间。因此,您可以使用表情符号字符为文本添加颜色。
该死,我希望 Enicode 是 Unicode 的某种扩展,以包含更多表情符号。
D
Daniel abzakh

可以这样做:

https://img.shields.io/static/v1?label=&message=%D0%90%D0%B0%D0%B8&color=green


不适用于 Github 问题
P
Peter Mortensen

基于 AlecRust's idea,我实现了 PNG 文本服务。

演示在这里:

http://lingtalfi.com/services/pngtext?color=cc0000&size=10&text=Hello%20World

有四个参数:

text:要显示的字符串

字体:未使用,因为在这个演示中我只有 Arial.ttf。

fontSize:一个整数(默认为 12)

颜色:一个六字符的十六进制代码

请不要直接使用此服务(测试除外),而是使用我创建的提供服务的类:

https://github.com/lingtalfi/WebBox/blob/master/Image/PngTextUtil.php

class PngTextUtil
{
    /**
     * Displays a PNG text.
     *
     * Note: this method is meant to be used as a web service.
     *
     * Options:
     * ------------
     * - font: string = arial/Arial.ttf
     *          The font to use.
     *          If the path starts with a slash, it's an absolute path to the font file.
     *          Else if the path doesn't start with a slash, it's a relative path to the font directory provided
     *          by this class (the WebBox/assets/fonts directory in this repository).
     * - fontSize: int = 12
     *          The font size.
     * - color: string = 000000
     *          The color of the text in hexadecimal format (6 characters).
     *          This can optionally be prefixed with a pound symbol (#).
     *
     *
     *
     *
     *
     *
     * @param string $text
     * @param array $options
     * @throws \Bat\Exception\BatException
     * @throws WebBoxException
     */
    public static function displayPngText(string $text, array $options = []): void
    {
        if (false === extension_loaded("gd")) {
            throw new WebBoxException("The gd extension is not loaded!");
        }
        header("Content-type: image/png");
        $font = $options['font'] ?? "arial/Arial.ttf";
        $fontsize = $options['fontSize'] ?? 12;
        $hexColor = $options['color'] ?? "000000";
        if ('/' !== substr($font, 0, 1)) {
            $fontDir = __DIR__ . "/../assets/fonts";
            $font = $fontDir . "/" . $font;
        }
        $rgbColors = ConvertTool::convertHexColorToRgb($hexColor);

        //--------------------------------------------
        // GET THE TEXT BOX DIMENSIONS
        //--------------------------------------------
        $charWidth = $fontsize;
        $charFactor = 1;
        $textLen = mb_strlen($text);
        $imageWidth = $textLen * $charWidth * $charFactor;
        $imageHeight = $fontsize;
        $logoimg = imagecreatetruecolor($imageWidth, $imageHeight);
        imagealphablending($logoimg, false);
        imagesavealpha($logoimg, true);
        $col = imagecolorallocatealpha($logoimg, 255, 255, 255, 127);
        imagefill($logoimg, 0, 0, $col);
        $white = imagecolorallocate($logoimg, $rgbColors[0], $rgbColors[1], $rgbColors[2]); // For font color
        $x = 0;
        $y = $fontsize;
        $angle = 0;
        $bbox = imagettftext($logoimg, $fontsize, $angle, $x, $y, $white, $font, $text); // Fill text in your image
        $boxWidth = $bbox[4] - $bbox[0];
        $boxHeight = $bbox[7] - $bbox[1];
        imagedestroy($logoimg);

        //--------------------------------------------
        // CREATE THE PNG
        //--------------------------------------------
        $imageWidth = abs($boxWidth);
        $imageHeight = abs($boxHeight);
        $logoimg = imagecreatetruecolor($imageWidth, $imageHeight);
        imagealphablending($logoimg, false);
        imagesavealpha($logoimg, true);
        $col = imagecolorallocatealpha($logoimg, 255, 255, 255, 127);
        imagefill($logoimg, 0, 0, $col);
        $white = imagecolorallocate($logoimg, $rgbColors[0], $rgbColors[1], $rgbColors[2]); // For font color
        $x = 0;
        $y = $fontsize;
        $angle = 0;
        imagettftext($logoimg, $fontsize, $angle, $x, $y, $white, $font, $text); // Fill text in your image
        imagepng($logoimg); // Save your image at new location $target
        imagedestroy($logoimg);
    }
}

注意:如果您不使用 Universe framework,则需要替换此行:

$rgbColors = ConvertTool::convertHexColorToRgb($hexColor);

使用此代码:

$rgbColors = sscanf($hexColor, "%02x%02x%02x");

在这种情况下,您的十六进制颜色必须正好是六个字符长(不要将井号 (#) 放在它前面)。

注意:最后我没有使用这个服务,因为我发现字体很丑更糟糕:无法选择文字。但为了讨论,我认为这段代码值得分享......


H
Hamza Zubair

可能不是所问问题的确切答案,但是当我处于 OP 的情况时,我正在寻找以下解决方案:

https://img.shields.io/badge/github-blue?style=for-the-badge

只需:

[![](https://img.shields.io/badge/github-blue?style=for-the-badge)](https://github.com/hamzamohdzubair/redant)
[![](https://img.shields.io/badge/book-blueviolet?style=for-the-badge)](https://hamzamohdzubair.github.io/redant/)
[![](https://img.shields.io/badge/API-yellow?style=for-the-badge)](https://docs.rs/crate/redant/latest)
[![](https://img.shields.io/badge/Crates.io-orange?style=for-the-badge)](https://crates.io/crates/redant)
[![](https://img.shields.io/badge/Lib.rs-lightgrey?style=for-the-badge)](https://lib.rs/crates/redant)

A
Artyom Vancyan

对于 GitHub README.md 中的文本着色,您可以使用 SVG <text>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 55 20" fill="none">
    <text x="0" y="15" fill="#4285f4">G</text>
    <text x="12" y="15" fill="#ea4335">o</text>
    <text x="21" y="15" fill="#fbbc05">o</text>
    <text x="30" y="15" fill="#4285f4">g</text>
    <text x="40" y="15" fill="#389738">l</text>
    <text x="45" y="15" fill="#ea4335">e</text>
</svg>

使用自定义颜色制作自定义文本后,保存 SVG 文件并按照以下步骤操作。

在 GitHub 上打开您的存储库。

单击 README.md 的编辑按钮

将 SVG 文件拖放到打开的在线编辑器中。 GitHub 将生成一个降价图像。类似于以下内容。 ![谷歌](https://user-images.githubusercontent.com/000/000-aaa.svg)

如果要更改 SVG 的原始大小,可以使用生成的 URL 作为 标签的 src 并提供所需的大小。


m
milahu

问题是“如何在 github 自述文件中为文本着色”,这很难/不可能

题外话:在 github 问题中,我们可以使用

<span color="red">red</span>

例子:

#!/bin/bash

# Convert ANSI-colored terminal output to GitHub Markdown

# To colorize text on GitHub, we use <span color="red">red</span>, etc.
# Depends on:
#   aha: convert terminal colors to html
#   xclip: copy the result to clipboard
# License: CC0-1.0
# Note: some tools may need other arguments than `--color=always`
# Sample use: colors-to-github.sh diff a.txt b.txt

cmd="$1"
shift # now the arguments are in $@
(
    echo '<pre>'
    $cmd --color=always "$@" 2>&1 | aha --no-header
    echo '</pre>'
) \
| sed -E 's/<span style="[^"]*color:([^;"]+);"/<span color="\1"/g' \
| sed -E 's/ style="[^"]*"//g' \
| xclip -i -sel clipboard

这被(被其他人)否决了,因为 Github 的降价模块不支持该彩色跨度标签,但我喜欢自动转换的脚本。这将适用于 Ghost 降价解析器,或者如果 Github 曾经修复过 github.com/github/markup/issues/1440
here 是 github 上的演示。 <span color="red">redtext</span> 等确实在 github 上工作。我看到的唯一问题:无法设置背景颜色
一个解释将是有序的。例如,脚本在什么环境中运行 - 例如,“xclip”似乎高度依赖系统?在什么系统(包括版本)上进行了测试? Linux/Ubuntu?请通过 editing (changing) your answer 回复,而不是在评论中(没有“编辑:”、“更新:”或类似内容 - 答案应该看起来好像是今天写的)。
P
Peter Mortensen

这是您可以为彩色文本编写的代码:

<h3 style="color:#ff0000">Danger</h3>

你写一个标准的 HTML 标签,这对 GitHub 是行不通的......