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 \item
diretiva). 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 list
ambiente de nível muito baixo e depois ter que editar manualmente a aparência de cada \item
rótulo, sugiro que você carregue o enumitem
pacote e digite \begin{enumerate}[label=(\arabic*)] ... \end{enumerate}
- chega de editar manualmente a saída de cada um e cada \item
directiva.
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
\item
diretiva 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 enumerate
ambiente, 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 \displaystyle
diretiva será inserida após \(
. A função emprega as funções , e string switch2displaystyle
de Lua .find
sub
gsub
Existem também duas macros utilitárias do LaTeX, chamadas \DisplayOn
e \DisplayOff
, que ativam e desativam a switch2displaystyle
função. Por "ativação", quero dizer atribuição switch2displaystyle
ao retorno de chamada do LuaTeX process_input_buffer
, onde a função opera como um pré-processador no fluxo 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}