切换到嵌套有序列表(每个列表都有一个或多个带 div 的li )后,我会遇到可怕的分页符,将文本切成两半。我不介意内容是否有分页符,但让它在页边距中破坏中间文本字符是不可接受的。
示例 html(任意深度的 ol + li + ol + ... 嵌套直到运行时才知道 - 在 React 中生成单页内容):
我已经放置了 css 来避免图像上的分页符,并且还在问题类中放置了“avoid-break”类:
.TestEditorQuestion {
position: relative;
border: 3px;
background-color: #eee;
border-color: gray;
padding-left: 0.8rem;
padding-right: 0.8rem;
padding-top: .08rem;
padding-bottom: .08rem;
margin: 5px;
text-align: left;
border-radius: 10px;
width: 99%;
display: block;
height: 10%;
box-sizing: border-box;
}
... lots of css code that doesn't affect this
avoid-break {
break-inside: avoid;
page-break-inside: avoid; // for older browsers
}
@media print {
.no-print,
button …
Run Code Online (Sandbox Code Playgroud)我正在尝试使用已经在package.lisp中定义的asdf创建一个名为“ a”(要学习)的基本软件包,而我的主文件a.lisp的开头是:
(in-package :a)
...
Run Code Online (Sandbox Code Playgroud)
如果我正在开发模块,我只是想通过执行Mx slime-eval-buffer之类的方法将整个缓冲区评估到SLIME REPL中,但这不会发生,在运行该命令后,我仍然处于cl -用户包:
;;; from a.lisp
A> (in-package :a)
#<PACKAGE "A">
CL-USER> <--- should have stayed in A>
Run Code Online (Sandbox Code Playgroud)
但是,如果我自己将整个代码粘贴到SLIME REPL中,则它已经可以工作了。一遍又一遍地粘贴很多代码对于交互式开发来说根本不是一件好事。
你能帮我吗?您是否对我的问题有任何建议,或者您通常如何应对?
谢谢。
我发现自己调用了许多方法,它们的第一个参数是来自给定类的复杂对象。虽然 with-slots 和 with-accessors 很有用,但不能以这种方式绑定泛型方法。所以我想:如果我们可以在本地柯里化任何函数,槽 + 访问器 + 泛型函数 + 函数都可以用相同的构造来处理。
我要清理的代码示例:
(defun clox-string (scanner)
"Parse string into a token and add it to tokens"
(loop while (and (char/= #\" (peek scanner))
(not (at-end-p scanner)))
do
(if (char= #\Newline (peek scanner)) (incf (line scanner))
(advance scanner)))
(when (at-end-p scanner)
(clox.error::clox-error (line scanner) "Unterminated string.")
(return-from clox-string nil))
(advance scanner) ;; consume closing "
(add-token scanner 'STRING (subseq (source scanner)
(1+ (start scanner))
(1- (current scanner)))))
Run Code Online (Sandbox Code Playgroud)
这会更清晰(我在 CL https://craftinginterpreters.com/scanning.html#reserved-words-and-identifiers 中模仿这个,但我经常得到比 …
我以前不止一次有过这个问题。
是否可以使用具有相同名称的包装器在本地f
f
透明地隐藏函数?
即,如何在本地将 (f 包裹的参数...) 扩展为 (f args...)?
Flet 似乎允许我们这样做,但有局限性,即生成的包装器不可设置。是否有可能在不诉诸舰队的情况下这样做?
理想情况下,会有一个宏让我们编写“包装”f
调用,并将代码扩展为原始的“非包装”f
调用。
起初我相信macrolet可能是这样,因为它在文档中说它首先扩展宏然后在扩展形式上应用setf,但我无法使用它(继续阅读下面)。
这在某些参数是隐式的并且不应一遍又一遍地重复以获取更多 DRY 代码的上下文中很有用。
在我之前的问题 (let-curry) 中有一个特定的例子。试图“自动”分配函数的一些参数(let-curry)。
我在那里得到了一些很好的答案,但是,我遇到了一些限制。通过使用 flet 来完成函数名称的这种局部“阴影”到其上的包装器,此类包装器不可设置,因此,此类包装器不能像原始函数一样灵活使用,只能读取值,而不是写入.
通过上面的链接,如何编写宏 flet-curry 并使包装函数可设置?
奖励:该宏能否以 0 运行时开销将包装的调用扩展到原始调用?
我尝试在该帖子中选择答案并使用 macrolet 而不是 flet 无济于事。
谢谢!
我被要求为这个通用问题举一个具体的例子。
代码中的愿望注释:
(locally (declare (optimize safety))
(defclass scanner ()
((source
:initarg :source
:accessor source
:type string)
(tokens
:initform nil
:accessor tokens
:type list)
(start
:initform 0
:accessor start
:type …
Run Code Online (Sandbox Code Playgroud) common-lisp ×3
macros ×2
asdf ×1
css ×1
evaluation ×1
html ×1
lisp-macros ×1
package ×1
slime ×1