将数学模式设置为列表中每一项的默认模式

将数学模式设置为列表中每一项的默认模式
\documentclass{article}
\begin{document}
\begin{enumerate}
    \item $x + y = z$
    \item $e^{i\pi} + 1 = 0$
\end{enumerate}
\end{document}

我有一个很长的列表,其中 95% 的条目都要以数学模式写入。我不想一遍$...$又一遍地将每个条目换行。有没有办法将列表条目的默认模式设置为数学模式?

答案1

这是一种enumitem方法和补丁,它在环境\(之后开始item并在环境\)之前\item或结束时结束,检查\ifmmode我们是否处于数学模式。

注意:\item[...]这里没有捕获!——由于补丁位于环境组内,\item其他环境中的所有其他定义都不会改变。

可以使用 跳出数学模式\item $ Non math content,但是也许\item \text{Non math stuff}会更好!

自动数学模式适用于任何需要数学模式的数学内容,即\begin{pmatrix}...\end{pmatrix}也是可能的。

\documentclass{article}
\usepackage{enumitem}

\newlist{mathlist}{enumerate}{1}
\setlist[mathlist,1]{label={\arabic*.}}

\usepackage{xpatch}

\AtBeginEnvironment{mathlist}{%
\xpretocmd{\item}{\ifmmode\)\fi}{}{}
\xapptocmd{\item}{\ifmmode\else\(\fi}{}{}
}
\AtEndEnvironment{mathlist}{%
  \ifmmode \)\fi% Close math mode
}
\begin{document}
\begin{mathlist}
    \item x + y = z
    \item e^{i\pi} + 1 = 0
      \item E=mc^2
    \item \)Non math - mode % Jumping out of math-mode 
\end{mathlist}

\begin{enumerate}
  \item Foo % It's regular and not in math mode!
\end{enumerate}
\end{document}

在此处输入图片描述

答案2

您可以创建一个类似的命令,当您希望当前项目仅包含数学时\mathitem使用它:\item

\newcommand\mathitem[1]{\item $#1$}

您的列表将如下所示:

\begin{itemize}
  \mathitem{1+1=2}
  \mathitem{e^{i\pi}+1=0}
\end{itemize}

答案3

这是一个基于 LuaLaTeX 的解决方案,适用于enumerateitemize环境。它实际上不会修改enumerateitemize环境,也不会修改\item宏,也不需要使用名为 的新宏。那么,\mathitem该解决方案如何工作?它采用预处理器方法:它设置一个 Lua 函数,通过分配给回调process_input_buffer,该函数充当预处理器,扫描每行输入,并且 - 如果(且仅当!)它在enumerate或环境中 -根据需要在每个 的范围的开始和结束处itemize添加符号。所有这些都会发生$\itemTeX 开始正常工作。换句话说,从 TeX 的“眼睛”(更不用说“嘴巴”和“胃”)的角度来看,就好像所有需要的符号$都是手工输入的一样。

如果你有一个或多个\items 的内容应该不是是否需要处于数学模式?对于这样的\items,你可以写

\item $ An item without math.  $

或者,如果amsmath包已加载,

\item \text{An item without math.}

这种方法对 tex 文件内容的格式做出了哪些假设?唯一的限制性假设是:指令\begin{enumerate}\begin{itemize}\end{enumerate}\end{itemize}\item必须出现在不同的行上。希望这个假设不是那么严格。

如果需要在文档的某个位置暂停 Lua 函数的运行,只需插入指令\addmathOff。相反,要在文档的后面位置重新启动 Lua 函数,请插入指令\addmathOn

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{amsmath} % for "bmatrix" environment and "\text" macro

%% Lua-side code
\usepackage{luacode}
\begin{luacode}
in_list_env = false
at_first_item = false
function add_dollar_symbols ( buff )
   if string.find ( buff, "\\begin{enumerate}" ) 
      or string.find ( buff, "\\begin{itemize}" ) then
      in_list_env   = true
      at_first_item = true
   elseif string.find ( buff , "\\end{enumerate}" )
      or string.find ( buff , "\\end{itemize}" ) then
      in_list_env   = false
      buff = "$"..buff  
   elseif in_list_env == true then
      if at_first_item == true then
         at_first_item = false
         buff = string.gsub ( buff , "\\item", "%0".."$ " )
      else
         buff = string.gsub ( buff , "\\item", " $".."%0".."$ ")
      end
   end
   return buff
end
\end{luacode}
%% TeX-side code
\newcommand\addmathOn{\directlua{luatexbase.add_to_callback (
    "process_input_buffer", add_dollar_symbols , "add_dollar_symbols" )}}
\newcommand\addmathOff{\directlua{luatexbase.remove_from_callback (
    "process_input_buffer", "add_dollar_symbols" )}}
\addmathOn % enable operation of the Lua function    
\begin{document}

\begin{enumerate}
    \item 1 + 1 
      =
      2
    \item e^{i\pi} + 1
      = 0 \quad \text{Euler's Identity}
    \item $A non-mathy item$
    \item \begin{bmatrix} 
          a & b & c \\
          d & e & f 
          \end{bmatrix}
\end{enumerate}

\end{document}

答案4

使用 0.11 版本tasks可以说item-format=\ensuremath

\documentclass{article}
\usepackage{tasks}[2016/05/03] % v0.11
\begin{document}

This is some text.
\begin{tasks}[item-format=\ensuremath]
  \task x + y = z
  \task e^{i\pi} + 1 = 0
\end{tasks}
This is some text.
\begin{tasks}[style=enumerate,item-format=\ensuremath]
  \task x + y = z
  \task e^{i\pi} + 1 = 0
\end{tasks}
This is some text.
\begin{tasks}[counter-format=tsk.,item-format=\ensuremath]
  \task x + y = z
  \task e^{i\pi} + 1 = 0
\end{tasks}
This is some text.

\end{document}

在此处输入图片描述

相关内容