LaTeX 标记选项?

LaTeX 标记选项?

我想知道是什么阻碍了 MarkDown 系统的实施(La)TeX?我知道 pandoc 会将 MarkDown 转换为 LaTeX,并增加一些功能。我也知道很多人对 LaTeX 的现状很满意,所以请不要觉得被冒犯了。

我特别想知道为什么像->或 这样的东西=>不能转换为\rightarrow\Rightarrow以及类似的转换以及常见的 MarkDown 功能。毕竟在我看来,(La)Tex 毕竟是一种标记纯文本的方法,可以整齐地呈现给打印设备。我也知道有 LyX 和 TeXmacs,但它们已经保留了 tex 的纯文本方法。

我特别好奇如果为什么无法在 LaTeX 中直接实现 MarkDown 功能,毕竟 TeX 是图灵完备的,不是吗?它是否以某种我没看到的方式破坏了现有系统?

有很多东西可以让文字书写更加令人愉快的在眼睛上。例如,写出这样的定理:

THEOREM: ...

PROOF: ...


Next paragraph continues after two new lines...

对于定义词条,情况也类似,您可以随意命名。再次请不要误会我的意思。(La)TeX 中有大量有用的命令。目前,(La)TeX 已经执行了其中一些转换。例如,将 --- 变成破折号或将空行视为两个段落的分隔。而且现代 (La)TeX 可以处理 unicode,因此不一定需要对希腊字母进行 ASCII 化。人们总是希望用 (La)TeX 做更多晦涩难懂的事情,但是什么阻止了系统整合这样的功能?还是我完全错过了什么,而这已经是可能的了?

答案1

LaTeX 之所以是这个 LaTeX,是因为历史原因。它并不完美。它可以支持一些 MarkDown 功能。例如,有一个 LaTeX 包wiki,支持如下文档:

\documentclass{article}
\usepackage{wiki}
\begin{document}
\wikimarkup

==section title==

A numbered list:
# foo
# bar
# baz

===subsection title===

''important'' thing

\end{document}

另一个很好的例子是listings包。它逐字读取输入,识别关键字,并做出正确的输出。listings是为具有语法高亮的排版编程语言设计的。但是,同样的方法可以用于您的请求。因此,这显示了您请求的另一个示例:

\documentclass{article}
\usepackage{listings}
\lstset{literate={->}{$\rightarrow$}1 {=>}{$\Rightarrow$}1}

\begin{document}

\begin{lstlisting}
a -> b, A => B
\end{lstlisting}

\end{document}

但请记住,TeX 的核心语言不是为这种标记文本设计的。我们必须使用一些奇怪的技巧来实现 TeX 中的功能。

与大多数现代编程语言不同,TeX 使用类别代码为特殊目的而编写。如果 TeX 使用通用的词法分析,定义 markdown 系统会更容易。在 TeX 中,定义命令\THEOREM\PROOF排版定理很容易。但支持类似这样的语法需要付出更多努力(尽管可能)。

THEOREM: foo
PROOF: baz

我们可以问为什么Knuth 选择这种宏语法。我认为使用标记语言语法,如 troff、SGML 和 RTF 是很自然的。而且很显然,一个纯粹的 markdown 系统(如没有 HTML 的 stackexchange)对于复杂的样式来说不够强大。所以早期的 TeX(Knuth 的个人工具)不需要支持 Markdown 语法,因此基于类别代码和宏的设计是可以的。很多人抱怨这件事,我对此没有什么好主意。

事情正在发生变化,LaTeX 现在变得更容易使用了。对于数学符号,我们可以使用unicode-math包来编写如下数学等式:

$ ∑A_n → ±∞ $

答案2

你可能会发现这很有趣(尽管它适用于 ConTeXt,而不是 LaTeX):

https://github.com/adityam/filter

答案3

这是在 ConTeXt MkIV 中有效的概念验证解决方案。

\defineenumeration[THEOREM][text={Theorem },style=italic]

\usemodule[translate]
\translateinput[THEOREM:][\THEOREM]
\translateinput[->][\rightarrow]
\enableinputtranslation

\starttext

THEOREM: Let $f : X -> Y$ be a continuous function ...

Paragram after the theorem. 

\stoptext

这给出了预期的输出。使用 LuaTeX 可以在将输入输入 TeX 之前对其进行解析,如果您愿意,您可以在 lua 中编写一个 markdown 解析器。我记得 John MacFarlane 已经为 Markdown 编写了一个基于 LPEG 的解析器,因此将它与 LuaTeX 结合起来应该相对容易。

答案4

这并不是对你问题的真正回答,但我很久以前就有一个相关的想法:你想要的一些替换可以由编辑器完成。我曾经为 LaTeX 编写了一个编辑器,其中有一个替换表,这样你就可以得到以下效果。如果你输入->,那么它会自动转换为,但保存为。当从文件中读取(或输入)时,你会再次在编辑器中看到\to。对于、、等等也是如此。\to\sum±\pm\infty

主要优点:在编辑器中看起来不错,文件是纯 ASCII 文本。但是,我不知道哪些编辑器支持此功能。

您的 也有可能实现类似的事情THEOREM: ... PROOF:,但是实现起来不那么简单。

相关内容