我最近开始使用新命令,我认为它很棒。例如
\newcommand{\QQQ}{~~,\quad\text{and}\qquad }
\newcommand{\WW}{~~,\quad\text{with}\qquad }
\newcommand{\WWW}{~~,\quad\text{where}\qquad }
我还想有一个创建方程式和对齐环境的快捷方式,但 newcommand 不允许我这样做。我该如何创建
\begin{equation}
\end{equation}?
如果我的编辑器中有非乳胶的方式可以做到,我就会使用 TeXStudio。
例如,如果我使用
\newcommand{\ZZ }{\begin{align}}
\newcommand{\ZZZ }{\end{align}}
然后输入
\ZZ
\pi
\ZZZ
我收到 PDF 编译器错误:
Paragraph ended before \align was complete.
答案1
这只有在 LuaTeX 中才有可能。
\documentclass{article}
\usepackage{luacode}
\usepackage{amsmath, amssymb}
\begin{luacode*}
local uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
local lowercase = "abcdefghijklmnopqrstuvwxyz"
local numbers = "0123456789"
local char_set = uppercase .. lowercase .. numbers
function get_random_name(k)
local tab = {}
for i=1,k do
local rand = math.random(char_set:len())
table.insert(tab, char_set:sub(rand, rand))
end
return table.concat(tab,"")
end
function register_verbatim(cmd_e, env_name)
local name = get_random_name(15)
local env_s = string.format([[\begin{%s}]], env_name)
local env_e = string.format([[\end{%s}]], env_name)
tex.print(env_s)
local callback = function(str)
if string.find(str, cmd_e) then
luatexbase.remove_from_callback("process_input_buffer" , name)
return env_e
else
return str
end
end
luatexbase.add_to_callback("process_input_buffer" , callback, name)
end
\end{luacode*}
\newcommand{\al}{
\directlua{
register_verbatim([[\string\eal]], "align")
}
}
\newcommand{\als}{
\directlua{
register_verbatim([[\string\eals]], "align*")
}
}
\begin{document}
\al
\int_a^b
\eal
\als
\frac{a}{b}
\eals
\end{document}
答案2
这不仅在 LuaTeX 中可行。在纯 TeX 或 LaTeX 中也可行。例如:
\documentclass{article}
\usepackage{amsmath, amssymb}
\def\al#1\eal{\begin{align}#1\end{align}}
\def\als#1\eals{\begin{align*}#1\end{align*}}
\begin{document}
\al
\int_a^b
\eal
\als
\frac{a}{b}
\eals
\end{document}