有时,我不希望将注释的所有部分都转换为 Tex 格式。我通常会将这些上下文放在逐字。但是,这是一种相当粗糙的方法。所以我开始想知道你是否可以在 Tex 中使用 Markdown。我最初是受到 Hamilton 的启发代码在他发布他的软件包之后,他在 Tex 中使用了 R。
我不想转换为 Tex 的虚拟数据示例:
% http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3458956/
ABC
\textbf{All here are antiseptics} % (used in living tissues on mucosa)
% Antiseptic is often disinfection
1 Iodum (Iodine)
2 Povidonum iodinatum
3 Ichthammolum (ammonia)
4 Viride nitens
5 Kalii permanganas (potassium permanganate)
6 Hydrogeniii peroxidum
7 Benzoylis peroxidum
8 Nitrofuralum
9 Acidum boricum
10 Sulfadiazinum argentum (silver sulfadiazine)
11 Benzalkonium
12 Propanolum/Benzalconium
13 Chlorhexidium
14 Cetylpyridinium
15 Dequalinium/Cinchocainum
16 Colini salicylas (salt of salicylic acid - colini adds here saliva production)
17 Hexetidinum (hexetidine)
% only 120 main drugs in exam - from 6 classes theoretically
% much more studied in practcals
A group
1 Halogen
2 Halogen
3 Aromatic compound
4 Dye compounds
5 Oxidizing agent
6 Oxidizing agent
7 Oxidizing agent
8 Nitrofurans
9 Acids
10 Heavy metal (silver)
% Synthetic antibacterial
% Antibiotics are produced by living organisms (fungi, bacteria, actinomyces, ...)
...
操作系统:Debian 8.5
Linux 内核:4.6 反向移植
硬件:Asus Zenbook UX303UA
TeXLive:最新版本,不是 apt-get 中的旧版本
答案1
有一个新的包用于将 Markdown 包含在纯 TeX、LaTeX 和 ConTeXt 文档中。与 Michal 在已接受答案中建议的软件包非常相似,此软件包也基于 Lunamark 解析器。这一次,解析器经过了大量修改,以便允许用户控制 Markdown 标记到 TeX 标记的扩展:
\documentclass{article}
\usepackage{markdown}
\markdownSetup{
renderers = {
link = {#1}, % Render a link as the link label.
emphasis = {\emph{#1}}, % Render emphasis using `\emph`.
}
}
\begin{document}
\begin{markdown}
_Hello,_ [Stack Exchange](http://tex.stackexchange.com)!
\end{markdown}
\end{document}
上述代码生成“你好,Stack Exchange!”。请注意,设置这些映射不是强制性的(尽管通常很有用);默认值应该相当合理。鼓励包作者重新定义渲染器原型(参见包装文档)覆盖默认值而不覆盖用户映射。
任何支持 shell 访问的引擎(pdfTeX、XeTeX)都可以使用,而不仅仅是 LuaTeX。但请注意,当你不使用 LuaTeX 时,你需要在文件中提供--shell-escape
选项或设置。这与其他软件包(例如 Geoffrey M. Poore 的shell_escape=t
texmf.cnf
minted
) 需要 shell 访问。
该包还支持语法扩展,如引用、隔离代码块等(参见包装文档),尽管我确实将它们移植到了 Lunamark,所以现在它们也可以与 Michal 的包一起使用。
答案2
编辑:
我把这段代码放在了 github 上 -乳胶标记,并稍微延伸了一点。
提供了新的封装选项:
扩展:选择 lunamark 扩展
文档:处理整个过程\begin{document} ... \end{document}
模板: 选择科斯莫用于打印转换后的文本的模板
添加了新命令:
\markdownfile{filename}
排版 markdown 文件。
可以使用lunamark
,LuaTeX
但安装起来有点困难。您需要在本地 texmf 树(通常是 ~/texmf/scripts/lua,您可能需要创建此目录)中添加新目录,并从中复制目录lunamark
内容standalone/src
lunamark 来源。
测试该命令是否有效:
kpsewhich lunamark.lua
应该打印该文件的路径。
安装成功后,我们可以创建简单的lua模块进行lunamark
加载,latexmark.lua
local latexmark = {}
local lunamark = require("lunamark")
local writer = lunamark.writer.latex.new()
local util = lunamark.util
writer.string = function(s) return s end
writer.definitionlist= function(items)
local buffer = {}
for _,item in ipairs(items) do
local defs = {}
buffer[#buffer + 1] = {"\\item[",item.term,"] ", util.intersperse(item.definitions,"\n")}
end
local contents = util.intersperse(buffer, "\n")
return {"\\begin{description}\n",contents,"\n\\end{description}"}
end
latexmark.init = function(extensions)
local extensions = extensions or { smart = true, definition_lists=true}
latexmark.parser = lunamark.reader.markdown.new(writer, extensions)
end
latexmark.end_env = "%s*\\end{latexmark}"
local buffer = {}
latexmark.callback = function(buf)
if buf:match(latexmark.end_env) then
--local ret = latexmark.process()
--table.insert(ret, buf)
return ret
end
buffer[#buffer+1] = buf
return ''
end
latexmark.process = function()
local result = latexmark.parser(table.concat(buffer,"\n"))
buffer = {}
local lines = string.explode(result,"\n")
for _, line in ipairs(lines) do
print(line)
tex.print(line)
end
return lines
end
return latexmark
lunamark
正在初始化并process_input_filter
提供 LuaTeX 的功能。现在是一些简单的 LaTeX 包,latexmark.sty
:
\ProvidesPackage{latexmark}
\RequirePackage{luatexbase}
\directlua{%
latexmark = require "latexmark"
latexmark.init()
}
\newenvironment{latexmark}
{\directlua{luatexbase.add_to_callback("process_input_buffer",latexmark.callback,"latexmark")}}
{\directlua{%
luatexbase.remove_from_callback("process_input_buffer", "latexmark")
latexmark.process()
}}
\endinput
提供新的环境latexmark
,其内容将被转换。它真的很容易使用:
\documentclass{article}
\usepackage{fontspec}
\usepackage{latexmark}
\begin{document}
\begin{latexmark}
# Hello world
1. enumerated
2. list
some \LaTeX\ stuff: $a = \sqrt{b}$
what
: it is easy to provide description lists
and also `monospaced`, or *emphatized* texts
\end{latexmark}
\end{document}
一些示例文件: