gpt4 book ai didi

html - 在不影响突出显示的情况下在 pandoc 中设置预 block 样式

转载 作者:行者123 更新时间:2023-11-28 00:59:58 25 4
gpt4 key购买 nike

我正在使用 pandoc 设置文档准备系统,作为该练习的一部分,我正在尝试编写样式表以使 html 输出看起来不错。

我们的文档有一些部分是任意预格式化文本(shell session 、配置文件等)和一些包含源代码。对于后者,我想应用突出显示。

我的问题是我找不到将格式应用于 <pre> 的方法任意预格式化文本的部分,而不会弄乱突出显示的源代码。

考虑这个例子:

The config file should look like this

~~~
[SomeThing]
foo=1
bar=2
~~~

The code should look like this:

~~~ { .perl .numberLines }
while (<>) {
next unless /needle/;
}
~~~

pandoc 的相关输出如下所示:

<body>
<p>The config file should look like this</p>
<pre><code>[SomeThing]
foo=1
bar=2</code></pre>
<p>The code should look like this:</p>
<div class="sourceCode"><table class="sourceCode perl numberLines"><tr class="sourceCode"><td class="lineNumbers"><pre>1
2
3
</pre></td><td class="sourceCode"><pre><code class="sourceCode perl"><span class="kw">while</span> (&lt;&gt;) {
<span class="kw">next</span> <span class="kw">unless</span> <span class="kw">/</span><span class="ot">needle</span><span class="kw">/</span>;
}</code></pre></td></tr></table></div>
</body>

请注意,突出显示的源代码包含在 <div> 中具有类“sourceCode”。在那个 div 里面有两个不同的 <pre>元素,它们都没有类。

<pre>为任意预格式化文本生成的没有类,但我想对其应用样式。

这是我目前尝试过的:

  1. 如果我像这样将我的样式应用到预 block 中:

    pre {
    border-color: #CFCFCF;
    background-color: #F7F7F7;
    /* ...etc ...*/
    }

    然后可以预见它也将它们应用于所有 <pre>元素,搞乱了源代码突出显示。

  2. 我当然可以为所有任意预格式化的文本 block 手动添加一个类,例如:

    ~~~ { .myclass }
    text goes here
    ~~~

    确实有效,<pre>元素获得“myclass”类,因此我可以为它们设置样式。但我不喜欢该解决方案,因为它太容易出错:依赖文档作者知道将此类添加到所有预先格式化的文本部分。

  3. 我曾尝试使用 CSS 否定伪选择器,但我发现了它们 cannot be used to select elements which do not contain some specific ancestor .

  4. 我尝试制定两条规则,一条是为我的 <pre> 设置样式 block ,另一个删除所有应用的样式返回到任何<pre>的“继承”那是div.sourceCode的后代.那也不管用。

理想情况下,我希望能够配置 pandoc 以将默认样式应用于所有 <pre>它发出的元素(如果未应用突出显示)。

或者,我可以使用一些 CSS 魔术来为这些 <pre> 应用样式吗?元素而不影响那些具有源代码突出显示的元素。

我知道我可以编写一个 pandoc 过滤器来实现这一点,但我希望有一个更简单的解决方案。

最佳答案

使用以下 CSS:

*:not(.sourceCode):not(td) > pre {
background-color: red;
}

*:not(.sourceCode):not(td) > pre {
background-color: red;
}
<p>The config file should look like this</p>
<pre><code>[SomeThing]
foo=1
bar=2</code></pre>
<p>The code should look like this:</p>
<div class="sourceCode"><table class="sourceCode perl numberLines"><tr class="sourceCode"><td class="lineNumbers"><pre>1
2
3
</pre></td><td class="sourceCode"><pre><code class="sourceCode perl"><span class="kw">while</span> (&lt;&gt;) {
<span class="kw">next</span> <span class="kw">unless</span> <span class="kw">/</span><span class="ot">needle</span><span class="kw">/</span>;
}</code></pre></td></tr></table></div>

关于html - 在不影响突出显示的情况下在 pandoc 中设置预 block 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42617240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com