【问题标题】:Org mode timestamp format when exported导出时的组织模式时间戳格式
【发布时间】:2014-04-25 15:37:28
【问题描述】:

我正在将我的 org-mode 文件导出到 LaTeX,并且经常使用 C-c . 时间戳作为滚动日记的顶级标题。

但是,当它导出为 PDF 时,<2014-04-25 Fri> 看起来有点滑稽。是否有将时间戳转换为某种格式化日期的通用设置,例如“2014 年 4 月 25 日星期五”或其他一些常见的日期字符串格式?

我查看了here 并了解有几种输入日期的方法,但我想也必须有输出格式。我还看到有一个导出时间戳设置here

<:
Toggle inclusion of any time/date active/inactive stamps (org-export-with-timestamps). 

但不清楚实现意味着什么。

【问题讨论】:

    标签: datetime emacs org-mode


    【解决方案1】:

    试试这个:

    (let ((org-time-stamp-custom-formats
           '("<%A, %B %d, %Y>" . "<%A, %B %d, %Y %H:%M>"))
          (org-display-custom-times 't))
      (org-latex-export-to-latex))
    

    更新:如果你想从输出字符串中删除括号&lt;&gt;,你必须修补函数org-translate-time。正常行为:

    (let ((org-time-stamp-custom-formats
           '("<%A, %B %d, %Y>" . "<%A, %B %d, %Y %H:%M>"))
          (org-display-custom-times 't))
      (org-translate-time "<2014-04-29 Tu.>")) => "<Tuesday, April 29, 2014>"
    

    像这里https://gist.github.com/boykov/11387660这样的修补函数

    (let ((org-time-stamp-custom-formats
           '("<%A, %B %d, %Y>" . "<%A, %B %d, %Y %H:%M>"))
          (org-display-custom-times 't))
      (org-translate-time "<2014-04-29 Tu.>")) => "Tuesday, April 29, 2014"
    

    括号 &lt;&gt; 是硬编码在函数 org-translate-time 中的,您不能通过仅修复 org-time-stamp-custom-formats 来删除它们。

    【讨论】:

    • 那么,在我的情况下,我会将第 2 行更改为 '("&lt;%Y-%m-%d %a&gt;" . "%A, %B %d, %Y")) 吗?恐怕我使用您列出的版本或那个版本都没有得到任何结果。
    • 不,列表中的第一项是不带小时和分钟的日期,第二项是带 H:M 的日期。我更新了我的答案,没有简单的方法可以从日期中删除括号&lt;&gt;
    【解决方案2】:

    您可以通过向org-export-filter-timestamp-functions 添加以下函数来删除括号,而不是修补org-translate-time

    (defun org-export-filter-timestamp-remove-brackets (timestamp backend info)
      "removes relevant brackets from a timestamp"
      (cond
       ((org-export-derived-backend-p backend 'latex)
        (replace-regexp-in-string "[<>]\\|[][]" "" timestamp))
       ((org-export-derived-backend-p backend 'html)
        (replace-regexp-in-string "&[lg]t;\\|[][]" "" timestamp))))
    
    (eval-after-load 'ox '(add-to-list
                           'org-export-filter-timestamp-functions
                           'org-export-filter-timestamp-remove-brackets))
    

    更多详情请见http://endlessparentheses.com/better-time-stamps-in-org-export.html

    【讨论】:

    • 如果您想控制标题中的时间戳(例如 TODO 状态旁边),这似乎无济于事,因此在这种情况下修补 org-timestamp-translate 是您最好的选择。可能与此github.com/bzg/org-mode/blob/… 有关
    【解决方案3】:

    以下内容对我很有效。我喜欢它,因为它不需要过滤掉“[]”或“”并且选择目标格式非常简单。不要忘记通过将org-export-allow-bind-keywords 设置为t 来允许#+BIND

    #+BIND: org-latex-inactive-timestamp-format "%s"
    #+BIND: org-latex-active-timestamp-format "%s"
    #+BIND: org-export-filter-timestamp-functions (tmp-f-timestamp)
    #+BEGIN_SRC emacs-lisp :exports results :results none
      (defun tmp-f-timestamp (s backend info)
        (cond
         ((org-export-derived-backend-p backend 'latex)
          (let ((ts (org-timestamp-format (org-timestamp-from-string s) "%Y-%m-%d")))
            (format "\\fbox{\\textbf{%s}} " ts)
          ))
         (t s)))
    #+END_SRC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 2016-07-12
      相关资源
      最近更新 更多