안녕하세요. 수식의 구문을 그림으로 표현해야 합니다. 어떻게 포맷할 수 있나요?
\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