小编Alb*_*rto的帖子

HTML+CSS 分页符将文本字符切成两半(@media print)

切换到嵌套有序列表(每个列表都有一个或多个带 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)

html css css-paged-media

6
推荐指数
1
解决办法
4642
查看次数

SLIME交互式开发-将代码从缓冲区粘贴到SLIME REPL!= eval命令中

我正在尝试使用已经在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中,则它已经可以工作了。一遍又一遍地粘贴很多代码对于交互式开发来说根本不是一件好事。

你能帮我吗?您是否对我的问题有任何建议,或者您通常如何应对?

谢谢。

evaluation common-lisp asdf slime package

2
推荐指数
1
解决办法
78
查看次数

Common Lisp 宏 let-curry - 不工作

我发现自己调用了许多方法,它们的第一个参数是来自给定类的复杂对象。虽然 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 中模仿这个,但我经常得到比 …

macros common-lisp

2
推荐指数
1
解决办法
99
查看次数

Common Lisp 本地影子函数同名

我以前不止一次有过这个问题。

一般问题

是否可以使用具有相同名称的包装器在本地ff透明地隐藏函数

即,如何在本地将 (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)

macros common-lisp lisp-macros

2
推荐指数
1
解决办法
111
查看次数