3

在乳胶中,我可以使用\newpage命令创建一个新页面。似乎没有任何方法可以直接在 Scribble 中执行此操作(至少不适用于 PDF/Latex 后端。)

那么,如何强制涂鸦为我的文档创建新页面?

4

1 回答 1

2

是的,这是可行的。然而,它有点笨拙,并且仅在渲染为乳胶文件(或 pdf 文件)时才有效,因为这对网页没有意义。我必须这样做的原始方式进入了 LaTeX。然而,事实证明有一种方法可以完全保持在涂鸦中。无论您喜欢哪个显然都取决于上下文,因此我将这两个选项都放在这里。

选项 1:完全在涂鸦选项中

其工作方式是使用带有字符串作为名称的涂鸦样式。这样做会将样式转换为 LaTeX 环境或命令(取决于您将其放入的内容。)在我们的例子中,我们需要一个命令,所以我们将使用element. 生成的代码将如下所示:

(define (newpage)
  (make-element (style "newpage" '())
                '()))

现在你可以在newpage任何你想要的地方使用这个函数,latex 会插入一个\newpage.

选项 2:插入原始乳胶:

另一种选择是在您的涂鸦文件中插入一些原始乳胶代码。为此,您首先需要创建一个文件,例如:textstyle.tex,并在此文件中放入:

\newcommand{\identity}[1]{#1}

文件名无关紧要,如果它有其他命令也可以。这只是为了创建一个乳胶命令,该命令仅评估其给定的相同文本。

接下来,在您的涂鸦代码中的某处,您可以创建以下两个函数:

(define (exact . items)
  (make-element (make-style "identity" '(exact-chars))
                items))

(define (newpage)
  (exact "\\newpage"))

第一个函数定义exact,我们可以用它来插入乳胶代码。这是有效的,因为exact-chars样式将字符逐字传递到乳胶中,而不是通过任何类型的预处理器传递。我们需要identity这里的阶梯,以便乳胶有一些东西可以放入文本。

然后将该newpage功能直接翻译成\newpage乳胶。只需在代码中所需的位置调用它(newpage)(或@newpage[]/@(newpage)在使用 at 表达式时)。

最后,您需要告诉 scribble 在哪里可以找到texstyle.tex文件。您可以++style在运行 scribble 时使用标志来执行此操作。总而言之,您的命令应该类似于:

scribble --pdf ++style texstyle.tex mydocument.scrbl

另外,如果您希望文档针对任何后端进行编译,而不仅仅是 Latex/pdf,您可以使用cond-element. 这样你就可以让它在任何其他后端成为一个空元素:

(define (exact-latex . items)
  (cond-element [latex
                  (make-element (make-style "identity" '(exact-chars))
                                items)]
                [else ....]))

(define (newpage)
  (exact-latex "\\newpage"))
于 2016-08-23T18:51:19.143 回答