Racket 如何获取当前.scrbl文件的路径?

Racket 如何获取当前.scrbl文件的路径?,racket,scribble,Racket,Scribble,假设我正在example.scrbl文件上运行scribble: scribble example.scrbl 我想以编程方式在文件本身中找出正在处理的文件(在本例中为.scrbl)的路径,或者至少是名称。 我以为会的 (vector-ref 0 (current-command-line-arguments)) 但这是行不通的。实际上,(当前命令行参数)返回空向量。 正确的方法是什么?我想要一个返回字符串“example.scrbl”的函数。正如我最近所做的那样,您可以使用

假设我正在example.scrbl文件上运行scribble:

    scribble example.scrbl
我想以编程方式在文件本身中找出正在处理的文件(在本例中为.scrbl)的路径,或者至少是名称。 我以为会的

    (vector-ref 0 (current-command-line-arguments))
但这是行不通的。实际上,(当前命令行参数)返回空向量。 正确的方法是什么?我想要一个返回字符串“example.scrbl”的函数。

正如我最近所做的那样,您可以使用
(这里是语法源)
来获取当前源文件的路径名

要使其适应涂鸦,您只需:

  • 用在表达上
  • 路径
    转换为用于涂鸦的
    字符串
  • 因此:

    您可以使用以下方法获取路径(不带文件名),而无需显式诉诸语法元素:


    非常感谢。但是源的位置不一定是
    example.scrbl
    。我在
    example.scrbl
    的顶部有
    require
    语句。我的所有程序都在那里定义。例如,我在
    example.scrbl
    的顶部有
    (require helper.rkt)
    。我在该文件
    helper.rkt
    中定义了许多过程。在定义这些过程时,我可以调用
    当前命令行参数
    ,这将为我提供有关如何调用
    scribble
    的信息(例如,如果是单页或多页)。但是,
    当前命令行参数
    不会报告
    .scrbl
    文件本身的名称。您最初的问题是,“我想找出文件本身内部正在以编程方式处理的文件(在本例中为.scrbl)的路径,或者至少是名称。”(我的重点)。这就是我展示的。如果你有不同的问题,我很抱歉,但我无法从你的评论中找出它是什么。也许你可以编辑你的问题来显示你到底想要什么?你是对的。似乎没有现成的解决办法。我想我必须写一个宏。
    #lang scribble/manual
    
    This Scribble file is @(path->string (syntax-source #'here)).
    
    #lang racket
    (require racket/runtime-path)
    
    (define-runtime-path here (simplify-path (build-path 'same)))
    
    (displayln here)