在 LATEX 中,某些环境的使用比较特殊,在 \begin{<env>}
会直接去寻找 \end{<env>}
,而这个 \end{<env>}
不可以隐藏在其他的参数或宏里面。在进行自定义时必须注意到它们的特性。本文将介绍自定义命令和环境时,对这种环境的处理方法。
具有这样性质的环境包括 tabularx
、table
、figure
等。我们知道在 LATEX 中,环境的用法是使用一对宏命令 \begin{<env>}
、\end{<env>}
来表示环境的起止,而 \begin{<env>}
展开后的宏命令是以 \<env>
开始,\end{<env>}
展开是以 \end<env>
结束,这样,我们在定义新环境时,如果需要使用这类环境,就不能把 \begin{<env>}
、\end{<env>}
分别放到自定义环境的前后参数,而需要用 \<env>
、\end<env>
替代 \begin{<env>}
\end{<env>}
,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| \documentclass{article} \usepackage{booktabs,tabularx} \newenvironment{mytable}{ \table[ht] \centering \tabularx{\textwidth}{lXr} \toprule Name & Address & E-mail\\ \midrule }{\bottomrule\endtabularx\endtable} \begin{document} \begin{mytable} Foo & 111 Example Street & example@mail.example.net\\ \end{mytable} \end{document}
|
或者,可以考虑把这类环境完整地放入一个参数中,使用其他参数输入需要输入的内容,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| \documentclass{article} \usepackage{booktabs,tabularx} \usepackage{xparse} \NewDocumentEnvironment{mytable}{O{htbp} +b }{ \begin{table}[#1] \centering \begin{tabularx}{\textwidth}{lXr} \toprule Name & Address & E-mail\\ \midrule #2 \bottomrule \end{tabularx} \end{table} }{}
\begin{document} \begin{mytable}[ht] Foo & 111 Example Street & example@mail.example.net\\ \end{mytable} \end{document}
|
二者实现同样的效果:
beamer
包中的 frame
也是这样一种环境,因此,在使用 markdown
宏包来简化 beamer
文档源文件输入的时候,一般不能把 \begin{frame}
和 \end{frame}
设置隐藏在 markdown
格式中,而 block
环境没有这种特点,可以将其分别设置隐藏在 markdown
格式中,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| \documentclass{ctexbeamer} \usepackage[footnotes,definitionLists,hashEnumerators,smartEllipses,tightLists=false,hybrid]{markdown} \markdownSetup{rendererPrototypes={ headingThree = {\frametitle{#1}}, headingFour = {\begin{block}{#1}}, horizontalRule = {\end{block}} }}
\begin{document} \begin{markdown} \begin{frame}
### 简介
* 首先要说的是…… * 再来呢…… - 不要忽略…… - 更要记得……
#### 小提醒
注意这个
----
\end{frame} \end{markdown} \end{document}
|
实现效果如下: