Comprobar si el contenido de los elementos de un entorno de lista está completamente en modo matemático en línea

Comprobar si el contenido de los elementos de un entorno de lista está completamente en modo matemático en línea

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 \itemdirectiva). 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 listy luego tener que editar manualmente la apariencia de todas y cada una de \itemlas etiquetas, le sugiero que cargue el enumitempaquete 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 \itemdirectiva.

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}, \itemy \end{enumerate}nunca ocurrirájuntosen una línea de entrada;
  • hay como máximo una \itemdirectiva 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 enumerateentorno, 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, \displaystylese inserta una directiva después \(. La función emplea las funciones de cadena , y switch2displaystylede Lua .findsubgsub

También hay dos macros de utilidad LaTeX, llamadas \DisplayOny \DisplayOff, que activan y desactivan la switch2displaystylefunción. Por "activación", me refiero a la asignación switch2displaystylea la devolución de llamada de LuaTeX process_input_buffer, donde la función opera como un preprocesador en el flujo de entrada.


ingrese la descripción de la imagen aquí

% !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}

información relacionada