我正在用 排版表格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 源代码,您会看到很多类似的编码。