¿Cómo puedo formatear la fórmula?

¿Cómo puedo formatear la fórmula?

Hola necesito dar la sintaxis de una fórmula en forma de figura. ¿Cómo puedo formatearlo?

\begin{figure}[h]
Formula $\to$ PrimitiveFormula $\vert$ (Formula Connective Formula)
$\vert \neg$ Sentence $\vert$ Quantifier Variable Formula
Primitive Formula $\to$ Predicate(Term,\cdots ,Term)
\end{figure}

Sintaxis como figura

Respuesta1

Esta tarea de composición parece realizarse más fácilmente con un tabularentorno. En el código siguiente, cargo el arraypaquete para configurar directivas de formato independientes para las columnas 1 y 3 (modo de cursiva automática) y para la columna 2 (modo matemático automático). Hacer esto hace innecesario insertar muchos $símbolos y \itshapedirectivas en el cuerpo del tabularentorno.

El siguiente ejemplo también utiliza una \fboxdirectiva opcional para compensar visualmente el contenido del tabularentorno de su entorno.

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{array,caption}
\begin{document}
\begin{figure}
\caption{A formula} \label{fig:formula}
\centering
\fbox{%  % framebox is optional
\begin{tabular}{ >{\itshape}r >{$}c<{$} >{\itshape}l }
Formula & \to & PrimitiveFormula\\
 & \vert & $($Formula Connective Formula$)$ \\
 & \vert & $\lnot$ Sentence \\
 & \vert & Quantifier Variable Formula \\[2ex]
PrimitiveFormula & \to & Predicate$($Term,\dots,Term$)$ \\[2ex]
Term & \to & Function$($Term,\dots,Term$)$ \\
 & \vert & Constant \\
 & \vert & Variable \\
\end{tabular}}
\end{figure}

A cross-reference to figure \ref{fig:formula}.
\end{document} 

Respuesta2

Puedes usar align*para esto.

\documentclass{article}
\usepackage{mathtools,calc}

\newcommand{\ent}[1]{\mathit{#1}} % `entity'
\newcommand{\alt}[1][\to]{\mathrel{\mathmakebox[\widthof{$#1$}]{\vert}}}

\begin{document}

\begin{table}
\caption{Recursive definition of a formula} \label{fig:formula}

\begin{align*}
\ent{Formula} &\to \ent{PrimitiveFormula}\\
 & \alt (\ent{Formula} \mathbin{\ent{Connective}} \ent{Formula}) \\
 & \alt \lnot \ent{Sentence} \\
 & \alt \ent{Quantifier} \, \ent{Variable} \, \ent{Formula} \\[2ex]
\ent{PrimitiveFormula} & \to \ent{Predicate}(\ent{Term},\dots,\ent{Term}) \\[2ex]
\ent{Term} & \to \ent{Function}(\ent{Term},\dots,\ent{Term}) \\
 & \alt \ent{Constant} \\
 & \alt \ent{Variable}
\end{align*}
\end{table}

A cross-reference to table \ref{fig:formula}.
\end{document}

ingrese la descripción de la imagen aquí

Aquí hay una implementación diferente, donde no se conserva la alineación, lo que en mi opinión es mejor, porque subraya la independencia de las distintas partes. Además, la sintaxis de entrada es más sencilla.

El valor predeterminado para el separador es el punto y coma, pero puede usar cualquier carácter que no aparezca en el segundo argumento obligatorio (usé una instancia en el primer \syntaxcomando solo para dar un ejemplo, el punto y coma sería igual de bueno).

\documentclass{article}
\usepackage{xparse,amsmath,array}

\newcommand{\ent}[1]{\mathit{#1}}

\ExplSyntaxOn

\NewDocumentEnvironment{syntax}{ }
 { \use:c {align*} }
 { \use:c {endalign*} }

\NewDocumentCommand{\syntaxitem}{O{;}mm}
 { % #1 is the separator
   % #2 is the defined term
   % #3 is a #1 separated list of alternatives
  \syntax_format_syntax:nnn { #1 } { #2 } { #3 }
 }

\seq_new:N \l__syntax_item_seq

\cs_new_protected:Npn \syntax_format_syntax:nnn #1 #2 #3
 {
  & % for the align*
  \seq_set_split:Nnn \l__syntax_item_seq { #1 } { #3 }
  \begin{array}{@{} r @{} >{{}}c<{{}} @{} l @{} }
  #2 & \to & \seq_use:Nn \l__syntax_item_seq { \\ & \vert & }
  \end{array}
 }
\ExplSyntaxOff

\begin{document}

\begin{table}
\caption{Recursive definition of a formula} \label{fig:formula}

\begin{syntax}
\syntaxitem[,]{\ent{Formula}} % use comma just by way of example
 {
  \ent{PrimitiveFormula},
  (\ent{Formula} \mathbin{\ent{Connective}} \ent{Formula}),
  \lnot \ent{Sentence},
  \ent{Quantifier} \, \ent{Variable} \, \ent{Formula}
 }
\\[2ex]
\syntaxitem{PrimitiveFormula}
 {
  \ent{Predicate}(\ent{Term},\dots,\ent{Term})
 }
\\[2ex]
\syntaxitem{\ent{Term}}
 {
  \ent{Function}(\ent{Term},\dots,\ent{Term});
  \ent{Constant};
  \ent{Variable}
 }
\end{syntax}
\end{table}

A cross-reference to table \ref{fig:formula}.

\end{document}

ingrese la descripción de la imagen aquí

Respuesta3

Cómo hacer esto en \halignTeX simple:

\input opmac
\def\rmbrackets{\adef({{\rm(}}\adef){{\rm)}}}\rmbrackets

\hfil\vbox{
\halign{\hfil\it#\unskip\ &\hfil$#$\hfil&\ \it#\hfil\cr
  Formula &\to& Primitive Formula\cr
          &|&   (Formula Connective Formula)\cr
          &|&   $\neg$ Sentence\cr
          &|&   Quantifier Variable Formula\cr
                                            \noalign{\medskip}
  Primitive Formula &\to& Predicate(Term,\dots,Term)\cr
                                                    \noalign{\medskip}
  Term    &\to& Function(Term,\dots,Term)\cr
          &|&   Constant\cr
          &|&   Variable\cr
}}

\bye

información relacionada