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