tengo una lista
\begin{list}{}{}
\item[(1)] First things first.
\item[(2)] There are \(1 + 1 = 2\) types of "normal" math
\[e^{2\pi i} + 1 = 2\]
\item[(3)] Third time's \(\frac{1}{3}\) of a charm.
\item[(4)] \(f(x) = 4\)
\end{list}
Me gustaría aplicar el siguiente comando solo a (4):
\newcommand{\displayit}[1]{\bgroup\allmath{\displaystyle}#1\egroup}
La condición aquí es que lo único que sucede con (4) es que contiene material matemático en línea, y nada más (aparte de la \item
directiva). Por el contrario, (1) no contiene matemáticas; (2) contiene matemáticas en línea y en pantalla, y el material matemático en línea "verdadero" está en medio de una oración; y (3) está en una situación similar a (2) con matemáticas en línea "verdaderas" en medio de una oración.
No puedo simplemente convertir (2) \[1 + 1 = 2\]
porque eso crea un formato no deseado (como mucho más espacio en blanco alrededor de la ecuación).
Respuesta1
Un comentario desde el principio: en lugar de emplear un entorno de muy bajo nivel list
y luego tener que editar manualmente la apariencia de todas y cada una de \item
las etiquetas, le sugiero que cargue el enumitem
paquete y escriba \begin{enumerate}[label=(\arabic*)] ... \end{enumerate}
; ya no tendrá que editar manualmente la salida de todas y cada una de las etiquetas. cada \item
directiva.
Si bien el OP ha indicado que no quiere utilizar LuaLaTeX, a otros lectores de esta publicación puede resultarles instructivo ver una solución basada en LuaLaTeX en funcionamiento. Es de esperar que los siguientes requisitos de formato de entrada no sean vinculantes:
\begin{enumerate}
,\item
y\end{enumerate}
nunca ocurrirájuntosen una línea de entrada;- hay como máximo una
\item
directiva por línea de entrada; - hay como máximo una instancia de material matemático en línea en una línea de entrada; y
\(
y\)
se utilizan para iniciar y finalizar el modo matemático en línea.
La solución funciona de la siguiente manera: una función Lua, llamada switch2displaystyle
, opera en cada línea de entrada; si está en un enumerate
entorno, verifica si la línea de entrada consta de \item
(opcional) y material matemático en línea puro (es decir, sin texto). Si se cumple esta condición, \displaystyle
se inserta una directiva después \(
. La función emplea las funciones de cadena , y switch2displaystyle
de Lua .find
sub
gsub
También hay dos macros de utilidad LaTeX, llamadas \DisplayOn
y \DisplayOff
, que activan y desactivan la switch2displaystyle
función. Por "activación", me refiero a la asignación switch2displaystyle
a la devolución de llamada de LuaTeX process_input_buffer
, donde la función opera como un preprocesador en el flujo de entrada.
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{enumitem}
\usepackage{luacode} % for 'luacode' envenvironment
\begin{luacode}
in_list_env = false -- initiate a Boolean flag
function switch2displaystyle ( s )
if s:find ( "\\begin{enumerate}" ) then
in_list_env = true
elseif s:find ( "\\end{enumerate}" ) then
in_list_env = false
elseif in_list_env == true then -- there's something to do
if s:find ( "\\item" ) then
s = s:gsub ( "^%s-\\item%s-(\\%(.-\\%))$" ,
function ( x )
return "\\item \\( \\displaystyle " .. x:sub(3)
end )
else
s = s:gsub ( "^%s-(\\%(.-\\%))$" ,
function ( x )
return "\\( \\displaystyle " .. x:sub(3)
end )
end
return s
end
end
\end{luacode}
% Define 2 LaTeX utility macros
\newcommand\DisplayOn{\directlua{%
luatexbase.add_to_callback(
"process_input_buffer" , switch2displaystyle ,
"switchtodisplaystyle" )}}
\newcommand\DisplayOff{\directlua{%
luatexbase.remove_from_callback(
"process_input_buffer" ,
"switchtodisplaystyle" )}}
\begin{document}
\DisplayOn % activate the Lua function
% Verify that nothing happens if we're not in an 'enumerate' env.
\( \frac{1}{2}+\frac{1}{2}=1 \)
\begin{enumerate}[label=(\arabic*)]
\item First things first.
\item There are \( \frac{2}{2}+\frac{3}{3}=2 \) types of ``normal'' math
\[ \textstyle \frac{1}{2}+\frac{1}{2}=1 \]
\item Third time's \( \frac{1}{2}+\frac{1}{2}=1 \) not a charm.
\item \( \frac{1}{2}+\frac{1}{2}=1 \)
\( \frac{1}{4}+\frac{1}{4}=\frac{1}{2} \)
\DisplayOff % deactivate the Lua function
\(\frac{1}{2}+\frac{1}{2}=1\)
\end{enumerate}
\end{document}