
Estou digitando tabelas com longtable
. Eu tenho uma p{2in}
coluna. Eu tenho nomes de arquivos na coluna. Às vezes, esses nomes de arquivos são bastante longos. Eles têm barras neles. Mais ou menos assim /home/user/somebody/project1/file1/subfile1/this-is-the-filename.txt
. Existe alguma maneira de dizer ao LaTeX que é permitido quebrar linha após uma barra?
Responder1
Supondo que você não tenha barras em outros contextos na sua coluna, você poderia fazer algo assim:
\makeatletter
{\catcode`\/=\active
\gdef\slashbreak{
\catcode`\/=\active
\def/{\char`\/\penalty\z@}}
}
\makeatother
...
\begin{slashbreak}
\begin{longtable}
...
\end{longtable}
\end{slashbreak}
Isso criará /
um personagem ativo dentro do ambiente slashbreak para que qualquer instância dele permita uma pausa posteriormente.
Por que é feito do jeito que é
Manipular códigos de caracteres pode ser complicado no TeX — o código de caracteres de um caractere será o código quando for digerido, o que não é necessariamente o que você poderia esperar. Se omitissemos os colchetes e a configuração do código de categoria de /
, obteríamos uma sequência de controle ausente quando tentássemos redefinir, /
uma vez que o código de categoria seria 12 em vez de 13. Esta é também a razão pela qual, por exemplo, \verb
que faz alterações completas nos códigos de categoria, não funciona no argumento de outro comando: essas alterações acontecem tarde demais para que o modo literal funcione, uma vez que os códigos de categoria originais são estabelecidos quando o TeX finalmente expande a \verb
macro.
A expressão que empregamos aqui, de alterar o código da categoria dentro de um grupo e fazer \gdef
(abreviação de \global\def
para que a definição seja acessível fora do grupo) é típica para esse tipo de manipulação de código de categoria. Se você vasculhar o código-fonte do LaTeX, verá muitas codificações semelhantes acontecendo.