使用pdf / latex后端在scribble中创建一个新页面

时间:2016-08-23 18:40:15

标签: pdf latex racket scribble

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

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

1 个答案:

答案 0 :(得分:2)

是的,这是可行的。然而它有点笨重,只有在渲染到乳胶文件(或pdf文件)时才有效,因为这对网页没有意义。我必须这样做的原始方式进入了LaTeX。然而,事实证明,有一种方法可以完全用于涂鸦。无论你喜欢什么,显然都要依赖于背景,所以我在这里放了两个选项。

选项1:完全在Scribble Option中

这种方法的工作方式是使用scribble styles,并在其名称后面加上字符串。这样做会将样式转换为LaTeX环境或命令(取决于您将其放入的内容。)在我们的示例中,我们需要一个命令,因此我们将使用element。生成的代码如下所示:

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

现在您可以在任何地方使用newpage功能,乳胶将插入\newpage

选项2:插入原始乳胶:

另一种选择是在您的scribble文件中插入一些原始乳胶代码。要做到这一点,首先需要创建一个文件,例如: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函数直接转换为latex中的\newpage。只需在代码中将其称为(newpage)(或使用at-expressions时为@newpage[] / @(newpage))。

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

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"))