在 LaTeX 中是否有任何方法可以定义环境,例如,
\begin{markdown}
This will be *processed* as
[Markdown](http://daringfireball.net/projects/markdown/)!
\end{markdown}
它通过外部命令(例如)传递环境内容pandoc
,然后将处理结果替换回文档?本质上,是否可以复制筛选ConTeXt 模块?我尝试过各种技巧bashful
,\directlua
但都没有成功。
答案1
如果你愿意并且能够使用 LuaLaTeX,这是对该帖子的早期答案的扩展使用 Markdown 样式的格式进行粗体和斜体可能对你有用。但它不调用外部例程(例如pandoc
)。相反,它将选定的 Markdown 类型代码转换为基于 LaTeX 的代码。
代码 (a) 定义一个名为的 LaTeX 环境markdown
,(b) 设置一个名为的 Lua 函数process_simple_markdown
来处理很简单markdown 类型代码的情况。Lua 函数在 -- 内部被激活,并且只限内部--markdown
环境。Lua“捕获”用于处理内部内容对括号和方括号以及三重、双重和单个星号对。Lua 函数被分配给所谓的process_input_buffer
回调;因此它在很早的阶段就对输入文件进行操作,前TeX 本身可以完成任何与排版相关的工作。
强烈警告:语法检查目前处于初级阶段甚至不存在。例如,如果 URL 字符串中有成对的星号,我不知道会发生什么。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage[colorlinks=true,urlcolor=blue]{hyperref} % for "\href" macro
\usepackage{luacode,luatexbase}
%% Lua-side code
\begin{luacode}
function process_simple_markdown (line)
line = string.gsub( line, "%[(.-)%]%((.-)%)", "\\href{%2}{%1}" )
line = string.gsub( line, "%*%*%*(.-)%*%*%*", "\\textbf{\\textit{%1}}")
line = string.gsub( line, "%*%*(.-)%*%*", "\\textbf{%1}" )
line = string.gsub( line, "%*(.-)%*", "\\textit{%1}" )
return line
end
\end{luacode}
%% TeX-side code
\newcommand\markdownon{%
\directlua{luatexbase.add_to_callback( "process_input_buffer", process_simple_markdown, "process_simple_markdown" )}}
\newcommand\markdownoff{%
\directlua{luatexbase.remove_from_callback( "process_input_buffer", "process_simple_markdown" )}}
\newenvironment{markdown}{\markdownon}{\markdownoff}
\begin{document}
\begin{markdown}
This will be *processed* as [Markdown](http://daringfireball.net/projects/markdown/)!
\end{markdown}
\end{document}