Laércio Benedito de Sousa Júnior
2007-01-06 20:02:51 UTC
Estive pesquisando, há alguns dias, uma forma de se escrever sistemas de
equações --- equações multi-linha, multi-numeradas , delimitadas à esquerda
por uma chave --- nos meus documentos LaTeX. Confesso que encontrei
pouquÃssimas soluções a respeito na Web. Por exemplo, não encontrei nada no
Google fazendo busca seja em português, seja em inglês. Só consegui fazendo
uma busca em francês, e encontrei as seguintes soluções:
- o pacote 'mathenv', descrito em
http://www.ctan.org/tex-archive/macros/latex/contrib/bosisio/mathenv.html
- o pacote 'cases', disponÃvel no CTAN em
/macros/latex/contrib/other/misc/
Este último pacote, em particular, é uma interessante alternativa ao
ambiente 'cases' do pacote 'amsmath', mas nenhum dos dois me agradou
completamente para fazer o que eu queria.
Resolvi então "pÎr a mão na massa". Comecei a fuçar tutoriais de [plain] TeX
(achá-los na Web foi um desafio à parte), [tentar] estudar o código do
pacote 'amsmath' (uma tortura para quem entende muito pouco de TeX) e quase
cheguei a importar um exemplar do TeXbook.
Mas, "aos trancos e barrancos", consegui chegar a uma solução provisória,
mas que está me agradando. O código em questão é o seguinte:
%% Equation system constructor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter % if necessary
\newsavebox{\DelimitedEquations}
\newsavebox{\LeftBrace}
\newsavebox{\NumberedEquations}
\newcommand{\delimited}[1]{\@nameuse{delimited#1}}
\newcommand{\delimitedalign}{aligned}
\newcommand{\delimitedgather}{gathered}
\newcommand{\delimitedalignat}{alignedat}
\newcommand{\BoxEnvironment}[2]{%
\begin{lrbox}{\DelimitedEquations}
$\begin{\delimited{#1}}#2\end{\delimited{#1}}$
\end{lrbox}
\begin{lrbox}{\NumberedEquations}
\parbox{\linewidth}{%
\vskip-\abovedisplayskip
\begin{#1}#2\end{#1}
\vskip-\belowdisplayskip}
\end{lrbox}}
\newenvironment{eqnsystem}[1]{%
\def\next{\BoxEnvironment{#1}}
\***@body{\next}}{%
\begin{lrbox}{\LeftBrace}
$\left.\vcenter{\vphantom{\usebox{\DelimitedEquations}}}\right\lbrace$
\end{lrbox}
$$
\makebox[0pt][r]{\usebox{\LeftBrace}}
\makebox[\wd\DelimitedEquations][c]{\usebox{\NumberedEquations}}
$$}
\newenvironment{eqnsystem*}[1]{%
\def\next{\BoxEnvironment{#1*}}
\***@body{\next}}{\endeqnsystem}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Para escrever um sistema de equações com o algoritmo acima [não se esqueça
de incluÃ-lo no seu preâmbulo LaTeX :-)], use o ambiente 'eqnsystem' (existe
um análogo 'eqnsystem*' para equações não-numeradas, mas não creio que será
de grande utilidade), passando como argumento o ambiente multi-linha do
pacote 'amsmath' que você quer usar. Em princÃpio, ele deve trabalhar bem
com os ambientes 'gather', 'align' e 'alignat':
\begin{eqnsystem}{align}
(...)
\end{eqnsystem}
\begin{eqnsystem}{gather}
(...)
\end{eqnsystem}
\begin{eqnsystem}{alignat}{<numero-de-colunas>}
(...)
\end{eqnsystem}
Também esbocei um ambiente wrapper para facilitar a contrução de sistemas de
equações no LyX. O código, que ainda precisa ser melhorado, é o seguinte:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Adicione ao preâmbulo acima os seguintes comandos:
\long\def\LyXBoxEnvironment#1\begin#2#3\end#4{%
\BoxEnvironment{#2}{#3}}
\newenvironment{lyxeqnsystem}{\LyXBoxEnvironment}{\endeqnsystem}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Neste caso, basta envolver um ambiente 'align', 'alignat' ou 'gather' por um
ambiente 'lyxeqnsystem' (isto é feito no LyX inserindo caixas de ERT
apropriadas logo acima e logo abaixo das equações). Por exemplo:
\begin{lyxeqnsystem}
\begin{align}
(...) % NÃO USE ambientes internos (como o 'split' ou os '?matrix')
aqui.
% O wrapper 'lyxeqnsystem' ainda não suporta ambientes aninhados.
\end{align}
\end{lyxeqnsystem}
Por ora, é isso. Quem quiser, experimente --- e não deixe de enviar o seu
feedback, com crÃticas, sugestões, relatos de bugs e referências para outras
soluções disponÃveis.
P.S. 1: Estou pensando em escrever para os responsáveis pelo pacote
'amsmath', sugerindo que incluam um ambiente apropriado para sistemas de
equações.
P.S. 2: Ainda não desisti de importar o TeXbook. Nessa aventura, precebi que
há muita coisa interessante para se aprender em TeX --- e que vai além
daquilo que estamos habituados a fazer em LaTeX.
equações --- equações multi-linha, multi-numeradas , delimitadas à esquerda
por uma chave --- nos meus documentos LaTeX. Confesso que encontrei
pouquÃssimas soluções a respeito na Web. Por exemplo, não encontrei nada no
Google fazendo busca seja em português, seja em inglês. Só consegui fazendo
uma busca em francês, e encontrei as seguintes soluções:
- o pacote 'mathenv', descrito em
http://www.ctan.org/tex-archive/macros/latex/contrib/bosisio/mathenv.html
- o pacote 'cases', disponÃvel no CTAN em
/macros/latex/contrib/other/misc/
Este último pacote, em particular, é uma interessante alternativa ao
ambiente 'cases' do pacote 'amsmath', mas nenhum dos dois me agradou
completamente para fazer o que eu queria.
Resolvi então "pÎr a mão na massa". Comecei a fuçar tutoriais de [plain] TeX
(achá-los na Web foi um desafio à parte), [tentar] estudar o código do
pacote 'amsmath' (uma tortura para quem entende muito pouco de TeX) e quase
cheguei a importar um exemplar do TeXbook.
Mas, "aos trancos e barrancos", consegui chegar a uma solução provisória,
mas que está me agradando. O código em questão é o seguinte:
%% Equation system constructor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter % if necessary
\newsavebox{\DelimitedEquations}
\newsavebox{\LeftBrace}
\newsavebox{\NumberedEquations}
\newcommand{\delimited}[1]{\@nameuse{delimited#1}}
\newcommand{\delimitedalign}{aligned}
\newcommand{\delimitedgather}{gathered}
\newcommand{\delimitedalignat}{alignedat}
\newcommand{\BoxEnvironment}[2]{%
\begin{lrbox}{\DelimitedEquations}
$\begin{\delimited{#1}}#2\end{\delimited{#1}}$
\end{lrbox}
\begin{lrbox}{\NumberedEquations}
\parbox{\linewidth}{%
\vskip-\abovedisplayskip
\begin{#1}#2\end{#1}
\vskip-\belowdisplayskip}
\end{lrbox}}
\newenvironment{eqnsystem}[1]{%
\def\next{\BoxEnvironment{#1}}
\***@body{\next}}{%
\begin{lrbox}{\LeftBrace}
$\left.\vcenter{\vphantom{\usebox{\DelimitedEquations}}}\right\lbrace$
\end{lrbox}
$$
\makebox[0pt][r]{\usebox{\LeftBrace}}
\makebox[\wd\DelimitedEquations][c]{\usebox{\NumberedEquations}}
$$}
\newenvironment{eqnsystem*}[1]{%
\def\next{\BoxEnvironment{#1*}}
\***@body{\next}}{\endeqnsystem}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Para escrever um sistema de equações com o algoritmo acima [não se esqueça
de incluÃ-lo no seu preâmbulo LaTeX :-)], use o ambiente 'eqnsystem' (existe
um análogo 'eqnsystem*' para equações não-numeradas, mas não creio que será
de grande utilidade), passando como argumento o ambiente multi-linha do
pacote 'amsmath' que você quer usar. Em princÃpio, ele deve trabalhar bem
com os ambientes 'gather', 'align' e 'alignat':
\begin{eqnsystem}{align}
(...)
\end{eqnsystem}
\begin{eqnsystem}{gather}
(...)
\end{eqnsystem}
\begin{eqnsystem}{alignat}{<numero-de-colunas>}
(...)
\end{eqnsystem}
Também esbocei um ambiente wrapper para facilitar a contrução de sistemas de
equações no LyX. O código, que ainda precisa ser melhorado, é o seguinte:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Adicione ao preâmbulo acima os seguintes comandos:
\long\def\LyXBoxEnvironment#1\begin#2#3\end#4{%
\BoxEnvironment{#2}{#3}}
\newenvironment{lyxeqnsystem}{\LyXBoxEnvironment}{\endeqnsystem}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Neste caso, basta envolver um ambiente 'align', 'alignat' ou 'gather' por um
ambiente 'lyxeqnsystem' (isto é feito no LyX inserindo caixas de ERT
apropriadas logo acima e logo abaixo das equações). Por exemplo:
\begin{lyxeqnsystem}
\begin{align}
(...) % NÃO USE ambientes internos (como o 'split' ou os '?matrix')
aqui.
% O wrapper 'lyxeqnsystem' ainda não suporta ambientes aninhados.
\end{align}
\end{lyxeqnsystem}
Por ora, é isso. Quem quiser, experimente --- e não deixe de enviar o seu
feedback, com crÃticas, sugestões, relatos de bugs e referências para outras
soluções disponÃveis.
P.S. 1: Estou pensando em escrever para os responsáveis pelo pacote
'amsmath', sugerindo que incluam um ambiente apropriado para sistemas de
equações.
P.S. 2: Ainda não desisti de importar o TeXbook. Nessa aventura, precebi que
há muita coisa interessante para se aprender em TeX --- e que vai além
daquilo que estamos habituados a fazer em LaTeX.