在数学模式下自动将 l 更改为 \ell

在数学模式下自动将 l 更改为 \ell

我想找到一种方法,如何在数学模式中自动将“ l”更改为“ ”。\ell

我尝试使用它来做到这一点\catcode,但是这对我来说相当困难。

l我希望只有当它单独出现时才改变“ ”。

(例如,如果我定义变量如下,请不要更改“ l” :\loglb

\[\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}

相关内容