You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandoc中.sty文件无法解析模板变量的解决方案咨询

Pandoc官方LaTeX模板中自定义.sty调用元数据变量的解决方案

问题核心

官方LaTeX模板里的$title$、$classification$这类是Pandoc模板语法,仅在Pandoc处理模板文件时会被解析替换;直接在自定义.sty文件中写这些变量,Pandoc不会处理,只会原样输出。而之前用\@title的方式失效,是因为.sty加载时机早于Pandoc在模板中设置\@title的时机,此时\@title还未被赋值。

可行方案(无需Lua过滤器)

通过在header-includes中用Pandoc模板语法预定义LaTeX宏,再在.sty中调用这些宏即可解决。

步骤1:修改metadata.yml,预定义LaTeX宏

在header-includes中先基于Pandoc元数据定义宏,再加载自定义.sty:

documentclass: article
lang: english
fontsize: 12pt
papersize: a4
toc: true
header-includes:
  - \newcommand{\doctitle}{$title$}
  - \newcommand{\docclassification}{$classification$}
  - \usepackage{mystyle} # 先定义宏再加载样式文件
geometry:
  - headheight=2cm
  - footskip=4cm

Pandoc会先将$title$、$classification$替换为Markdown元数据中的实际值,生成对应的LaTeX命令,再加载.sty。

步骤2:修改mystyle.sty,调用预定义宏

将原文件中的变量替换为预定义的LaTeX命令:

\usepackage{fancyhdr}
    
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\fancyhead[L]{\doctitle} % 调用预定义的标题宏
\fancyfoot[R]{Page \thepage}
\fancyfoot[C]{Classification: \docclassification} % 调用预定义的分类宏

验证执行

运行原转换命令即可生成正确解析变量的PDF:

pandoc --defaults pandoc.yml input.md

补充说明

如果需要调用更多元数据(如author、version等),只需在header-includes中添加对应的宏定义即可,例如:

header-includes:
  - \newcommand{\doctitle}{$title$}
  - \newcommand{\docclassification}{$classification$}
  - \newcommand{\docauthor}{$author$}
  - \usepackage{mystyle}

然后在.sty中调用\docauthor即可。

内容的提问来源于stack exchange,提问作者Christoph Pelzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:27:35