数式の書式を設定するにはどうすればいいですか

数式の書式を設定するにはどうすればいいですか

こんにちは、数式の構文を図として示す必要があります。どのようにフォーマットすればよいですか?

\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 (自動数式モード) に個別の書式設定ディレクティブを設定します。これにより、環境の本体に多数の$シンボルやディレクティブを挿入する必要がなくなります。\itshapetabular

次の例では、オプションの\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}

ここに画像の説明を入力してください

これは、配置が保持されない別の実装です。これは、さまざまな部分の独立性を強調するため、私の意見ではより優れています。また、入力構文も簡単です。

区切り文字のデフォルト値はセミコロンですが、2 番目の必須引数に表示されない任意の文字を使用できます (最初の\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

関連情報