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}
Respuesta1
Esta tarea de composición parece realizarse más fácilmente con un tabular
entorno. En el código siguiente, cargo el array
paquete 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 \itshape
directivas en el cuerpo del tabular
entorno.
El siguiente ejemplo también utiliza una \fbox
directiva opcional para compensar visualmente el contenido del tabular
entorno de su entorno.
\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}
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 \syntax
comando 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}
Respuesta3
Cómo hacer esto en \halign
TeX 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