Por que o centro não está centralizado?

Por que o centro não está centralizado?

Com o seguinte código:

\documentclass[a4paper]{report}
\begin{document}
\begin{center}
\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}
\end{center}
\end{document}

Eu esperaria obter a tabela simples produzida \haligncentralizada na página. Porém, não é, como mostra a imagem abaixo.

insira a descrição da imagem aqui

\centeringtambém não tem efeito. Por que isso acontece?

Responder1

Alguém pode ficar tentado a usar comandos de baixo nível também em LaTeX; no entanto, existem algumas sutilezas neles que não são fáceis de entender no início.

Uma dessas sutilezas é que \haligné umcomando vertical, então, quando encontrado, ele inicia o modo vertical; se o TeX estiver no modo horizontal quando fizer a varredura \halign, ele será encerrado emitindo \par.

Isto é comprovado pelo seguinte arquivo de teste (Plain TeX):

a\def\par{PAR\endgraf\let\par\endgraf}bc\halign{#\cr HALIGN\cr}def
\bye

que produz

insira a descrição da imagem aqui

A redefinição temporária de \parvisa mostrar que \paré efetivamente executado.

Quando o TeX está no modo vertical, ele simplesmente empilha caixas sem formar parágrafos; portanto \centering(que está em vigor em center) não faz nada, porque apenas influencia os parágrafos. Assim o seu \halignserá impresso alinhado com a margem esquerda, já que \tabskipnormalmente é zero. A \tabskipcola em vigor no momento \halignda digitalização é adicionada à esquerda de cada caixa formada por \halign(uma caixa para cada linha de alinhamento) e entre quaisquer duas células de alinhamento, a menos que outra \tabskipseja especificada. Leia o capítulo 22 do TeXbook para obter mais informações, mas não é fácil.

Como alguém pode fazer \halignparte de um parágrafo? Escondendo-o dentro de algo que pode e que também pode contê-lo: a \vboxé geralmente empregado (o dispositivo mais comum para centralizar tabelas no Plain TeX é usar $$\vbox{\halign{...}}$$; não tente fazer isso no LaTeX). Embora \vboxnão inicie um parágrafo por si só, também não o interrompe, então

\begin{center}
\leavevmode\vbox{\halign{...}}
\end{center}

centralizará seu alinhamento.

Usar tabular; você estará do lado seguro.

Responder2

As \haligncaixas horizontais de construção que são colocadas na lista vertical circundante são insensíveis \leftskipe \rightskipobedecidas pelo construtor de parágrafos.

Você pode tentar centralizar usando isto:

\documentclass{article}

\begin{document}
\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}


\tabskip 0pt plus 1000pt minus 1000pt 
\halign to \hsize{\tabskip0pt\vrule \hfil # \hfil & \hfil # \hfil \vrule 
\tabskip 0pt plus 1000pt minus 1000pt \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}

\end{document}

No entanto, o \hruleestende-se por toda a \hsizelargura.

alinhar

Podemos colocar \halignem um \vbox.

\bigskip

\centering
\noindent\vbox{\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}}

halign em uma caixa

informação relacionada