包含 catcode 1 和 2 的宏

包含 catcode 1 和 2 的宏

我想创建一个宏来保持行线连在一起。我已阅读牢不可破的方块以及其他类似的帖子。我发现最有效的是简单地使用\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}

相关内容