Verificando se o conteúdo dos \item's de um ambiente \list está inteiramente no modo matemático embutido

Verificando se o conteúdo dos \item's de um ambiente \list está inteiramente no modo matemático embutido

Eu tenho uma 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}

Gostaria de aplicar o seguinte comando apenas a (4):

\newcommand{\displayit}[1]{\bgroup\allmath{\displaystyle}#1\egroup}

A condição aqui é que a única coisa que acontece com (4) é que ele contenha material matemático embutido - e nada mais (além da \itemdiretiva). Em contraste, (1) não contém matemática; (2) contém matemática embutida e de exibição, e o material matemático embutido "verdadeiro" está no meio de uma frase; e (3) está em uma situação semelhante a (2) com matemática embutida "verdadeira" no meio de uma frase.

Não posso simplesmente transformar (2) \[1 + 1 = 2\]porque isso cria uma formatação indesejada (como muito mais espaço em branco ao redor da equação).

Responder1

Um comentário inicial: em vez de empregar um listambiente de nível muito baixo e depois ter que editar manualmente a aparência de cada \itemrótulo, sugiro que você carregue o enumitempacote e digite \begin{enumerate}[label=(\arabic*)] ... \end{enumerate}- chega de editar manualmente a saída de cada um e cada \itemdirectiva.

Embora o OP tenha indicado não querer usar LuaLaTeX, outros leitores desta postagem podem achar instrutivo ver uma solução baseada em LuaLaTeX em funcionamento. Esperamos que os seguintes requisitos de formato de entrada não sejam vinculativos:

  • \begin{enumerate}, \item, e \end{enumerate}nunca ocorremjuntoem uma linha de entrada;
  • há no máximo uma \itemdiretiva por linha de entrada;
  • há no máximo uma instância de material matemático embutido em uma linha de entrada; e
  • \(e \)são usados ​​para iniciar e encerrar o modo matemático embutido.

A solução funciona da seguinte forma: Uma função Lua, chamada switch2displaystyle, opera em cada linha de entrada; se estiver em um enumerateambiente, ele verifica se a linha de entrada consiste em \item(opcional) e material matemático embutido puro (ou seja, sem texto). Se esta condição for satisfeita, uma \displaystylediretiva será inserida após \(. A função emprega as funções , e string switch2displaystylede Lua .findsubgsub

Existem também duas macros utilitárias do LaTeX, chamadas \DisplayOne \DisplayOff, que ativam e desativam a switch2displaystylefunção. Por "ativação", quero dizer atribuição switch2displaystyleao retorno de chamada do LuaTeX process_input_buffer, onde a função opera como um pré-processador no fluxo de entrada.


insira a descrição da imagem aqui

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

informação relacionada