
Ich setze Tabellen mit longtable
. Ich habe eine p{2in}
Spalte. In der Spalte habe ich Dateinamen. Manchmal sind diese Dateinamen ziemlich lang. Sie enthalten Schrägstriche. So ähnlich wie /home/user/somebody/project1/file1/subfile1/this-is-the-filename.txt
. Gibt es eine Möglichkeit, LaTeX mitzuteilen, dass nach einem Schrägstrich ein Zeilenumbruch zulässig ist?
Antwort1
Vorausgesetzt, dass Ihre Spalte keine Schrägstriche in anderen Kontexten enthält, können Sie etwa Folgendes tun:
\makeatletter
{\catcode`\/=\active
\gdef\slashbreak{
\catcode`\/=\active
\def/{\char`\/\penalty\z@}}
}
\makeatother
...
\begin{slashbreak}
\begin{longtable}
...
\end{longtable}
\end{slashbreak}
Dadurch wird ein aktives Zeichen innerhalb der Slashbreak-Umgebung erstellt /
, sodass jede Instanz davon anschließend einen Break zulässt.
Warum es so gemacht wird, wie es gemacht wird
Die Manipulation von Zeichencodes kann in TeX knifflig sein – der Zeichencode für ein Zeichen ist der Code, wenn es verarbeitet wird, was nicht unbedingt das ist, was Sie erwarten würden. Wenn wir die umgebenden Klammern und die Festlegung des Kategoriecodes von weglassen würden /
, würden wir beim Versuch, neu zu definieren, eine fehlende Steuersequenz erhalten /
, da der Kategoriecode 12 statt 13 wäre. Dies ist auch der Grund, warum beispielsweise , \verb
das umfassende Änderungen an Kategoriecodes vornimmt, im Argument eines anderen Befehls nicht funktioniert: Diese Änderungen erfolgen zu spät, als dass der wörtliche Modus funktionieren würde, da die ursprünglichen Kategoriecodes festgelegt werden, wenn TeX das \verb
Makro schließlich erweitert.
Die Redewendung, die wir hier verwendet haben, nämlich den Kategoriecode innerhalb einer Gruppe zu ändern und „doing“ \gdef
(kurz für \global\def
„so dass die Definition außerhalb der Gruppe zugänglich ist“), ist typisch für diese Art der Kategoriecodemanipulation. Wenn Sie sich den LaTeX-Quellcode ansehen, werden Sie feststellen, dass viele ähnliche Codes verwendet werden.