我想输入
$s^{(L)}$
但L
符号是一个变量
它可以是,,$s^{(1)}$
($s^{(2)}$
基本上是任何整数) $s^{(L-1)}$
,,$s^{(L+1)}$
输入这些内容非常耗时。因为我必须输入{ (
,决定使用哪个变量,然后输入) }
。有什么方法可以加快这个过程吗?
我曾经看到过 # 字符的用法\DeclareMathSymbol
。我不知道这是否相关。
答案1
答案2
例如,您可以设置s
为数学活动字符:
\mathchardef\mathSc=\mathcode`s
\def\mathS{\mathSc \futurelet\next\mathSa}
\def\mathSa{\ifx\next^\expandafter\mathSb\fi}
\def\mathSb^(#1){^{(#1)}}
{\catcode`s=13 \global\let s=\mathS}
\mathcode`s="8000
%test:
$s+s^(2)$ % gives: s + s^{(2)}
如果您可以接受在源文件\s
中用 代替s^
和{...}
代替(...)
那么声明就简单得多:
\def\s#1{s^{(#1)}}
答案3
为了多样化,这里有一个与我之前的回答实现 OP 的格式化目标。如果恰好有一个变量 --出现在诸如和 之s
类的表达式的基数中,那么这种方法就可以很好地工作。s^{5)}
s^{(L-1)}
不是不过,如果您还需要输出,那么就r^{5)}
说吧t^{(L-1)}
。
如果您愿意并且能够使用 LuaLaTeX 来编译您的文档,您可以利用 Lua 的模式匹配功能让您输入s!1!
、p!5!
和 ,Q !L-1!
并使其输出就像您写了s^{(1)}
、p^{(5)}
和 一样Q^{(L-1)}
。
这里,
!
起到数学中不常出现的一些分隔符的作用。当然,
!
在数学中被广泛(普遍?!)用来表示阶乘。因此,如果您的文档包含大量阶乘表达式,您要么必须选择不同的分隔符,要么写入n{}!
以破坏模式匹配例程。
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
-- Define a Lua function to do all of the work:
function automate ( u )
-- Search pattern: alphabetical character, possibly followed by whitespace,
-- followed by non-empty material delimited by '!' characters.
return ( u:gsub ( "(%a)%s-!(..-)!" , "%1^{(%2)}" ) )
end
\end{luacode}
%% Assign this function to LuaTeX's 'process_input_buffer' callback:
\AtBeginDocument{\directlua{ luatexbase.add_to_callback (
"process_input_buffer", automate , "automate" ) }}
\begin{document}
$s!1! \quad p!5! \quad Q !L! \quad \alpha ! \omega ! \quad 5! \quad n{}!$\quad Hello{}! \quad Hello!!
\end{document}