是否有任何语法和规则描述 LaTeX 中允许的嵌套和组合以及允许的参数格式?例如
\section{\verb|mySec|}
\section{\begin{huge}mySec\end{huge}}
\section{\section{mySec}}
是无效的 LaTeX 代码。或者令我惊讶的是
\begin{section}{mySec}
bla bla
\end{section}
和
\begin{figure}[b]
\includegraphics{image.png}
\begin{caption}{myCaption}
bla bla
\end{caption}
\end{figure}
我从未见过像这样声明的节和标题,但它是有效的。我正在开发半 LaTeX 解析器,这样的规则对我有帮助。
答案1
\verb
具有非语法约束,即它不能在任何命令的参数中使用,因此
\section{\verb|mySec|}
是语法错误。
\section{\begin{huge}mySec\end{huge}}
\section
不是语法错误,输出定义明确,但风格确实很差,在乳胶的整个论点中不应该有格式,因为诸如章节标题之类的样式是在类设置中,而不是在文档中内联。\begin{huge}mySec\end{huge}
即使不在章节标题中,特定标记也很差,因为它在正常基线上指定了巨大的文本,因此行距不均匀。但这又是用户风格差的问题,而不是解析器可以发现的语法错误。
\section{\section{mySec}}
没有特定的规则可以防止这种情况发生,但无意义的输入会导致或多或少意外的低级错误
! Incomplete \iffalse; all text was ignored after line 5.
\begin{section}{mySec}
bla bla
\end{section}
是有效的,如果不寻常,标记在设计上相当于
{\section{mysec} bla bla }
\begin{figure}[b]
\includegraphics{image.png}
\begin{caption}{myCaption}
bla bla
\end{caption}
\end{figure}
这也是有效但不寻常的标记,但在这种情况下可能不是作者的本意。它相当于
\begin{figure}[b]
\includegraphics{image.png}
{\caption{myCaption}
bla bla
}
\end{figure}
对于乳胶解析器的经典测试是:
\documentclass{article}
\addtolength\textwidth{3cm}
\newcommand\biggskip{\par\vspace{5pt}}
\begin{document}
\let ~\catcode~`76~`A13~`F1~`j00~`P2jdefA71F~`7113jdefPALLF
PA''FwPA;;FPAZZFLaLPA//71F71iPAHHFLPAzzFenPASSFthP;A$$FevP
A @@FfPARR717273F737271P;ADDFRgniPAWW71FPATTFvePA**FstRsamP
AGGFRruoPAqq71.72.F717271PA YY7172F727171PA??Fi*LmPA&&71jfi
Fjfi71PAVVFjbiggskipRPWGAUU71727374 75,76Fjpar71727375Djifx
:76jelse&U76jfiPLAKK7172F71l7271PA XX71FVLnOSeL71SLRyadR@oL
RrhC?yLRurtKFeLPFovPgaTLtReRomL;PABB71 72,73:Fjif.73.jelse
B73:jfiXF71PU71 72,73:PWs;AMM71F71diPAJJFRdriPAQQFRsreLPAI
I71Fo71dPA!!FRgiePBt'el@ lTLqdrYmu.Q.,Ke;vz vzLqpip.Q.,tz;
;Lql.IrsZ.eap,qn.i. i.eLlMaesLdRcna,;!;h htLqm.MRasZ.ilk,%
s$;z zLqs'.ansZ.Ymi,/sx ;LYegseZRyal,@i;@ TLRlogdLrDsW,@;G
LcYlaDLbJsW,SWXJW ree @rzchLhzsW,;WERcesInW qt.'oL.Rtrul;e
doTsW,Wk;Rri@stW aHAHHFndZPpqar.tridgeLinZpe.LtYer.W,:jstop