Как мне отформатировать формулу?

Как мне отформатировать формулу?

Привет, мне нужно дать синтаксис формулы в виде рисунка. Как мне его отформатировать?

\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}

Синтаксис как рисунок

решение1

Эта задача набора текста, кажется, проще всего решается с помощью tabularсреды. В коде ниже я загружаю arrayпакет для настройки отдельных директив форматирования для столбцов 1 и 3 (автоматический режим курсива) и для столбца 2 (автоматический математический режим). Это делает ненужным вставку множества $символов и \itshapeдиректив в тело среды tabular.

В следующем примере также используется необязательная \fboxдиректива для визуального смещения содержимого среды tabularотносительно ее окружения.

введите описание изображения здесь

\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} 

решение2

align*Для этого можно использовать .

\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}

введите описание изображения здесь

Вот другая реализация, где выравнивание не сохраняется, что, по моему мнению, лучше, потому что подчеркивает независимость различных частей. Также синтаксис ввода проще.

Значением разделителя по умолчанию является точка с запятой, но вы можете использовать любой символ, который не встречается во втором обязательном аргументе (я использовал экземпляр в первой \syntaxкоманде просто для примера, точка с запятой тоже подойдет).

\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}

введите описание изображения здесь

решение3

Как это сделать с помощью \halignобычного TeX:

\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

Связанный контент