通过 LaTeX 中的外部命令进行过滤?

通过 LaTeX 中的外部命令进行过滤?

在 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}

相关内容