我想创建一个宏来保持行线连在一起。我已阅读牢不可破的方块以及其他类似的帖子。我发现最有效的是简单地使用\vbox
;下面是 MWE。
\documentclass[12pt]{book}
\usepackage{pgffor}
\begin{document}
\foreach \n in {0,...,34}{% also works for 33
\par text line
}
\vspace{15pt}
\vbox{
Keep these lines together\\
Keep these lines together\\
Keep these lines together
}
\foreach \n in {0,...,33}{
\par text line
}
\end{document}
问题是我的 latex 文件是由一个我无法访问的单独进程自动生成的。但是,代码中有一些钩子,如以下示例中所示,它不会运行。
\documentclass[12pt]{book}
\usepackage{pgffor}
\newcommand{\blockStart}{
\vspace{15pt}
\vbox{
}
\newcommand{\blockStop}{
}
}
\begin{document}
\foreach \n in {0,...,34}{
\par text line
}
\blockStart
Keep these lines together\\
Keep these lines together\\
Keep these lines together
\blockStop
\foreach \n in {0,...,33}{
\par text line
}
\end{document}
我的任务是定义和的宏\blockStart
,\blockStop
使此代码像第一个例子一样工作。问题在于行中的悬挂括号\newcommand
。我不是在寻找的替代品\vbox
;它完全符合我的要求,没有额外的间距问题。我正在寻找定义这些宏的方法。
答案1
一些 TeX 基元(例如,\vbox
,\hbox
)可以与隐式括号一起使用:\bgroup
和\egroup
:
\documentclass[12pt]{book}
\usepackage{pgffor}
\newcommand{\blockStart}{%
\vspace{15pt}%
\vbox\bgroup
}
\newcommand{\blockStop}{%
\egroup
}
\begin{document}
\foreach \n in {0,...,34}{
\par text line
}
\blockStart
Keep these lines together\\
Keep these lines together\\
Keep these lines together
\blockStop
\foreach \n in {0,...,33}{
\par text line
}
\end{document}
这也是环境的lrbox
工作方式(\hbox
+\bgroup
和\egroup
)。但是,\bgroup
和\egroup
不能替代宏参数的花括号(类别代码标记 1 和 2)。
答案2
这有效:
\documentclass[12pt,letterpaper]{book}
\usepackage{pgffor}
\newcommand{\blockStart}{\begin{samepage}}
\newcommand{\blockStop}{\end{samepage}}
\begin{document}
\foreach \n in {0,...,35}{
\par text line
}
\blockStart
Keep these lines together\\
Keep these lines together\\
Keep these lines together
\blockStop
\foreach \n in {0,...,33}{
\par text line
}
\end{document}