
Estoy escribiendo tablas con longtable
. Tengo una p{2in}
columna. Tengo nombres de archivos en la columna. A veces estos nombres de archivos son bastante largos. Tienen cortes. Algo así como /home/user/somebody/project1/file1/subfile1/this-is-the-filename.txt
. ¿Hay alguna forma de decirle a LaTeX que se permite realizar saltos de línea después de una barra?
Respuesta1
Suponiendo que no tiene barras en otros contextos en su columna, podría hacer algo como esto:
\makeatletter
{\catcode`\/=\active
\gdef\slashbreak{
\catcode`\/=\active
\def/{\char`\/\penalty\z@}}
}
\makeatother
...
\begin{slashbreak}
\begin{longtable}
...
\end{longtable}
\end{slashbreak}
Esto creará /
un personaje activo dentro del entorno de slashbreak, de modo que cualquier instancia del mismo permitirá un descanso posterior.
¿Por qué se hace como está?
Manipular códigos de caracteres puede ser complicado en TeX: el código de carácter de un carácter será el código cuando se digiera, lo cual no es necesariamente lo que se podría esperar. Si omitiéramos las llaves circundantes y la configuración del código de categoría de /
, obtendríamos una secuencia de control faltante cuando intentáramos redefinir /
ya que el código de categoría sería 12 en lugar de 13. Esta es también la razón por la cual, por ejemplo, \verb
que realiza cambios al por mayor en los códigos de categoría, no funciona en el argumento de otro comando: esos cambios ocurren demasiado tarde para que funcione el modo palabra por palabra, ya que los códigos de categoría originales se establecen cuando TeX finalmente expande la \verb
macro.
El modismo que empleamos aquí, de cambiar el código de categoría dentro de un grupo y hacer \gdef
(abreviatura de \global\def
para que la definición sea accesible fuera del grupo) es típico de este tipo de manipulación del código de categoría. Si exploras el código fuente de LaTeX, verás que se producen muchas codificaciones similares.