我正在使用 backnaur 包编写我编写的简单编程语言的 BNF。但现在我有一个相当长的定义,它会产生溢出。我尝试使用添加换行符,\\
但这会导致奇怪的对齐。我也试过\newline
但这没有任何作用。我在包文档中找不到有关换行符的任何信息(http://ctan.sharelatex.com/tex-archive/macros/latex/contrib/backnaur/backnaur.pdf)这是我的代码:
\documentclass[dutch]{arabart}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{geometry}
\geometry{verbose,tmargin=2.5cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2.5cm}
\usepackage{amsmath}
\usepackage{amsthm}
\makeatletter
\numberwithin{equation}{section}
\numberwithin{figure}{section}
\usepackage{backnaur}
\makeatother
\usepackage{babel}
\begin{document}
\section{Syntax van de taal}
\begin{bnf*}
\bnfprod{function\_call\_void}{
\bnfts{setLight} \bnfpn{expression} \bnfpn{light} \bnfpn{expression} \bnfpn{expression} \bnfpn{expression}
\bnfor
\bnfts{drive} \bnfpn{expression} \bnfpn{direction} \bnfpn{expression}
\bnfor
\bnfts{closeBot} \bnfpn{expression}
\bnfor
\bnfts{print} \bnfpn{expression}
\bnfor
\bnfts{printLn} \bnfpn{expression}
\bnfor
\bnfts{sleep} \bnfpn{expression}
}\\
\end{bnf*}
\end{document}
这张图片显示了我的问题:
答案1
我认为该包没有提供换行符;您可以按如下方式添加它们。
\documentclass[draft,dutch]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{geometry}
\geometry{tmargin=2.5cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2.5cm}
\usepackage{backnaur}
\newenvironment{bnfsplit}[1][0.7\textwidth]
{\minipage[t]{#1}$}
{$\endminipage}
\begin{document}
\section{Syntax van de taal}
\begin{bnf*}
\bnfprod{function\_call\_void}{
\begin{bnfsplit}
\bnfts{setLight} \bnfpn{expression} \bnfpn{light}
\bnfpn{expression} \bnfpn{expression} \bnfpn{expression}
\\ \bnfor
\bnfts{drive} \bnfpn{expression} \bnfpn{direction} \bnfpn{expression}
\bnfor
\bnfts{closeBot} \bnfpn{expression}
\\ \bnfor
\bnfts{print} \bnfpn{expression}
\bnfor
\bnfts{printLn} \bnfpn{expression}
\bnfor
\bnfts{sleep} \bnfpn{expression}
\end{bnfsplit}
}\\
\end{bnf*}
\end{document}
环境bnfsplit
采用可选参数 default 0.5\textwidth
;使用以下命令手动调整它
\begin{bnfsplit}[0.7\textwidth]
管他呢。