我所说的类似 markdown 的语法,例如使用*...*
or**...**
代替\emph{...}
or \(...\)
or \begin{blabla}...\end{blabla}
。
似乎可以在 Latex 中使用这种“markdown”类型的语法:
\catcode`\*=\active
\def*#1*{\emph{#1}}
有许多主观有人可能会喜欢其中一种或另一种的原因。有人可能会认为*...*
更具可读性,而其他人可能会认为\emph{...}
更具可读性。有人可能会说 LaTex 语法的开头和结尾更清晰,而另一个人可能会说,如果你不明白 的开头和结尾,那你一定是瞎了眼*...*
。
我想了解是否有任何客观的为什么不在 LaTeX 中使用这些“类似 markdown”的命令?我认为 LaTeX 可能不是为处理那些没有明确开始和结束的命令而设计的,因此可能会导致错误?或者使用这种语法完全没问题吗?
另一个问题是,我能以某种方式在 LaTeX 中定义“...”吗?我试过:
\catcode`\`=\active
\def`#1`{\emph{#1}}
但这不起作用。
答案1
我建议你先写 markdown 语法,然后再预处理你的文本潘多克。或者,您可以使用文本编辑器(Emacs、Vim),您可以在其中重新定义键盘并使用快捷方式来编写 LaTeX 标记。
答案2
关于你的第二个问题,它确实有效:
\documentclass{article}
\begin{document}
\catcode`\`=\active
\def`#1`{\emph{#1}}
`abc`
\end{document}
但这会产生后果:逐字翻译将不起作用,因为左勾不在已清理字符列表中。*
也一样。 它们在逐字翻译环境中仍将保持活动状态。\nfss@catcodes
不过,两者都已通过 清理。
并且,具体来说*
,使其处于活动状态将会破坏所有star
变体,例如\section*
等等......
Babel 有一个使事物活跃起来的机制,它必须修补内核的许多命令,例如系统\label+\ref
。然而,它没有注意到数学活跃 人物。
当然,可以做一些简单的事情(我曾在一份@
约 120 页的文档中体验过这种情况),但无法确保全球兼容性。\scantokens
如果使用包中的任何宏处于活动状态,肯定会感到惊讶@
。