在所有情况下都允许在斜线后换行,而无需使用宏

在所有情况下都允许在斜线后换行,而无需使用宏

我正在用 排版表格longtable。我有一p{2in}列。列中有文件名。有时这些文件名很长。它们中间有斜线。有点像/home/user/somebody/project1/file1/subfile1/this-is-the-filename.txt。有什么方法可以告诉 LaTeX 允许在斜线后换行吗?

答案1

假设您的列中的其他上下文中没有斜线,您可以执行以下操作:

\makeatletter
{\catcode`\/=\active
  \gdef\slashbreak{
    \catcode`\/=\active
    \def/{\char`\/\penalty\z@}}
}
\makeatother
...
\begin{slashbreak}
\begin{longtable}
...
\end{longtable}
\end{slashbreak}

这将会/在 slashbreak 环境中创建一个活动角色,以便它的任何实例之后都允许中断。

为什么这样做

在 TeX 中操作字符代码可能很棘手——字符的字符代码将是其被消化时的代码,这不一定是您所期望的。如果我们省略周围的括号和类别代码的设置,/当我们尝试重新定义时,我们会得到一个缺失的控制序列,/因为类别代码将是 12 而不是 13。这也是为什么,例如,\verb对类别代码进行全面更改,却在另一个命令的参数中不起作用的原因:这些更改发生得太晚,以至于逐字模式无法工作,因为原始类别代码是在 TeX 最终扩展宏时建立的\verb

我们在这里使用的习惯用法是更改组内的类别代码并执行\gdef(简称\global\def以便定义可在组外访问),这是此类类别代码操作的典型做法。如果您深入研究 LaTeX 源代码,您会看到很多类似的编码。

相关内容