É possível modificar o LaTeX para que o bom e velho $$...$$
se comporte como \[...\]
(e com isso quero dizer que deveria ser sinônimo dele).
Se sim:Caro desenvolvedor LaTeX3, por favor integre isso ao LaTeX3! (Não que eu realmente acredite que você realmente fará isso.)
MWE (mesmo que eu realmente não veja seu uso neste caso):
\documentclass{article}
\begin{document}
I've forgotten we're not in the plain \TeX\ world anymore:
$$
x = 3\alpha^2 + \beta
= \int f\, d\mu.
$$
\end{document}
Responder1
Aqui está uma solução baseada em LuaLaTeX para o seu desafio.
A função Lua replace_ddollar
na verdade não redefine o $$
primitivo. Em vez disso, ele verifica o texto de entrada em um estágio muito inicial de processamento (antesOs "olhos" do TeX começam a fazer qualquer coisa) e substitui todas as instâncias de $$
por \[
ou \]
. O código Lua pode lidar com códigos como
$$a^2+b^2=c^2$$
ou seja,pares combinadosde $$
diretivas em uma única linha, bem como o formato usual de entrada para equações, ou seja,
$$
E = mc^2
$$
Observação: Precisamente porque $$
énãosendo redefinidos nesta abordagem, as coisas podem (e irão) dar errado se o documento contiver instâncias que $$
sãonãousado para iniciar ou encerrar o modo display-math. Alguns exemplos de tais casos:
- Instâncias incomparáveis
$$
em um comentário (incluindocomment
ambientes semelhantes a -) - Instâncias de
$$
em um ambiente semelhante ao literal - Instâncias de
$$
uma string de URL encapsulada em uma\url{...}
diretiva
(Tenho certeza de que ainda há mais possibilidades de algo dar errado.) Caso você tenha tais instâncias em seu documento, o código abaixo fornece a macro \ReplaceDoubleDollarOff
, que desativa a operação da função Lua replace_ddollar
. Há também uma macro complementar, chamada \ReplaceDoubleDollarOn
, que ativa novamente a função Lua.
O risco representado por instâncias únicas de $$
em uma linha de entrada que não se destinam a iniciar ou terminar o modo displaymath pode ser bastante reduzido se puder ser assumido que as únicas instâncias que $$
devem iniciar ou terminar o modo displaymath ocorrem no mesmo momento. início de uma linha: Se esta suposição for válida, simplesmente reduza a string de pesquisa na segunda string.gsub
função, "%$%$"
, com "^%$%$"
. O ^
caractere indica que uma correspondência só poderá ocorrer se $$
ocorrer bem no início de uma linha. [Caso você esteja curioso para saber por que o código Lua contém %$%$
em vez de apenas $$
: Em Lua, o $
caractere é "especial" e deve ser escapado (prefixando um %
símbolo) para denotar um $
símbolo real.]
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
in_display_math = false
function replace_ddollar ( line )
line = string.gsub ( line , "%$%$(.-)%$%$" , "\\[ %1 \\]" )
line = string.gsub ( line , "%$%$" , function (x)
if not in_display_math then
in_display_math = true
return "\\["
else
in_display_math = false
return "\\]"
end
end )
return line
end
\end{luacode}
\newcommand\ReplaceDoubleDollarOn{%
\directlua{ luatexbase.add_to_callback(
"process_input_buffer", replace_ddollar, "replace_ddollar" )}}
\newcommand\ReplaceDoubleDollarOff{%
\directlua{ luatexbase.remove_from_callback(
"process_input_buffer", "replace_ddollar" )}}
\ReplaceDoubleDollarOn % Replacement function turned on
\usepackage{url} % just for this example
\begin{document}
$$
E = mc^2
$$
$$a^2+b^2=c^2$$ $$d^2+e^2=f^2$$ % Aside: I do not endorse this coding style!
$$
x = 3\alpha^2 + \beta = \int f\, d\mu.
$$
% Turn off replacement of double-dollars
\ReplaceDoubleDollarOff
\url{A_URL_string_with_a_$$_and_$$$$_and_another_$$}
% Turn replacement of double-dollars back on
\ReplaceDoubleDollarOn
$$ e^{i\pi}-1=0 $$
$$
1+1=2
$$
\end{document}
Responder2
Esta será sem dúvida uma resposta controversa, mas aqui vai nada! 1
O que você está perguntando é falho em sua premissa: se você quisesse modificar $$...$$
para se comportar como \[...\]
se não fosse LaTeX, mas TeX, você teria que modificar. O LaTeX não altera $$
em nada o comportamento da definição do TeX.
Tudo o que \[...\]
existe é um wrapper $$...$$
para fazer algumas verificações de modo, fornecer alguns relatórios de erros aprimorados e alterar algum espaçamento se a exibição ocorrer no início de um parágrafo. Você pode ver a definição completa nas fontes e/ou na resposta aceita paraQuais são as diferenças entre $$, \[, alinhar, equação e displaymath?.
Portanto, o LaTeX pegou o básico do Plain TeX e o estendeu para cobrir os casos de uso de uma suposta maioria de usuários. Não é diferente de qualquer outra macro fornecida pelo LaTeX: é um aumento dos blocos de construção fornecidos pelo TeX.
Na minha opinião, se você quiser o comportamento de \[...\]
, basta usar \[...\]
. Redefinir $$
, embora provavelmente seja tecnicamente possível, não é trivial porque o próprio comando que define o comportamento desejado o utiliza internamente. Além disso, não se sabe quantos documentos (às vezes mal projetados, mas mesmo assim) dependem da funcionalidade antiga.
Responder3
Esta é talvez a implementação mais fácil. Eu ainda quero me estressarnãopara usar código como este. Ou dá errado desde o início, ou pior: em um ponto você deseja alterar algo no documento, você recebe um erro que informa que está faltando um \item
(ou algo não relacionado a qualquer modo matemático), e você tem para recodificar todo o seu documento porque tudo quebra.
\documentclass{article}
%\usepackage[fleqn]{amsmath} % also works for instance
\let\dollar=$ \catcode`$=\active
\makeatletter
\protected\def${\@ifnextchar${\@doubledollareqn}{\@singledollareqn}}
\def\@singledollareqn#1${\(#1\)}
\def\@doubledollareqn$#1$${\[#1\]}
\makeatother
\begin{document}
Inline math $x^2+y^2=z^2$.
$$
f(v)=4\pi\left(\frac m{2\pi kT}\right)^{\frac32}v^2e^{-\frac{mv^2}{2kT}}.
$$
\end{document}
Responder4
Esta solução não é perfeita: não verifica erros e provavelmente apresenta outros problemas. Faz $ e personagem ativo, o que quebra alguns pacotes que não esperam isso. Mas se você colocar o seguinte próximo ao final do preâmbulo, pode funcionar principalmente. Eu tentei em dois dos meus documentos e parecia ok.
\catcode\`$\active
\makeatletter
\protected\def\ExpectBeginMath{\@ifnextchar${\let$\ExpectEndDisplayMath\[\@gobble}{\let$\ExpectEndInlineMath\(}}
\def\ExpectEndDisplayMath{\]\let$\ExpectBeginMath\@gobble}
\def\ExpectEndInlineMath{\)\let$\ExpectBeginMath}
\makeatother
\let$\ExpectBeginMath
Ou algo assim.