我想找到一种方法,如何在数学模式中自动将“ l
”更改为“ ”。\ell
我尝试使用它来做到这一点\catcode
,但是这对我来说相当困难。
l
我希望只有当它单独出现时才改变“ ”。
(例如,如果我定义变量如下,请不要更改“ l
” :\log
lb
\[\log l = lb + l^2\]
我只想更改第二个和第四个“ l
”)
l
如果我可以用“ ”来排版原来的“ ”,那就更好了\ell
(即改变它们的角色)
提前致谢。
答案1
概念证明。无论如何,您都需要标记多字母变量,因为您不希望读者误以为它们是产品。
\documentclass{article}
\mathchardef\standardl=\mathcode`l
\mathcode`l=\ell
\newcommand{\deactivatel}{\mathcode`l=\standardl}
\makeatletter
\edef\operator@font{\operator@font\noexpand\deactivatel}
\makeatother
\newcommand{\mlvar}[1]{\mathit{\deactivatel #1}}
\begin{document}
\[
\log l+\mlvar{lb}+l^2
\]
\end{document}
该字母l
被指定为 的数学代码\ell
。但在某些地方(运算符和多字母变量),它被设置回原始状态。
但是,你应该\ell
在需要的时候使用它(在我看来,一个绝不需要它)。
答案2
这是一个基于 LuaLaTeX 的解决方案。该解决方案提供了一个名为 的 Lua 函数,l2ell
它负责完成大部分实际工作,以及两个实用的 LaTeX 宏\lellOff
和\lellOn
,用于停用和重新激活该l2ell
函数。
这种方法无疑会误入歧途$\l$
。但是,作为\l
文本模式命令(具体来说是波兰语“soft ell”),它不应该出现在数学环境中,对吗?
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function l2ell ( s )
s = s:gsub ( "^l(%A)" , "\\ell %1" )
s = s:gsub ( "(%A)l$" , "%1\\ell" )
s = s:gsub ( "(%A)l(%A)" , "%1\\ell %2" )
return s
end
\end{luacode}
% LaTeX macros to activate and deactivate the Lua function:
\newcommand\lellOn{\directlua{luatexbase.add_to_callback (
"process_input_buffer" , l2ell , "l2ell" )}}
\newcommand\lellOff{\directlua{luatexbase.remove_from_callback (
"process_input_buffer" , "l2ell" )}}
\AtBeginDocument{\lellOn} % activate the Lua function by default
\begin{document}
$\log l +\ln l= lb + l^2$, $l$, $ll$, $l + l$, $ l ^ l$
\lellOff % deactivate the Lua function
$\log l +\ln l= lb + l^2$, $l$, $ll$, $l + l$, $ l ^ l$
\end{document}