
私は を使って表をタイプセットしています。列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}
これにより、スラッシュブレイク環境内にアクティブなキャラクターが作成され/
、その後、そのインスタンスでブレイクが可能になります。
なぜこのように行われるのか
TeX では文字コードの操作は難しい場合があります。文字の文字コードは、ダイジェストされたときのコードになりますが、これは必ずしも期待どおりではありません。 を囲む中括弧と のカテゴリ コードの設定を省略すると、カテゴリコードが 13 ではなく 12 になるため/
、 を再定義しようとしたときに制御シーケンスが失われます。/
これは、たとえば、\verb
カテゴリ コードを全面的に変更する が、別のコマンドの引数では機能しない理由でもあります。これらの変更は、TeX がマクロを最終的に展開するときに元のカテゴリ コードが確立されるため、逐語モードが機能するには遅すぎます\verb
。
ここで使用した慣用句、つまりグループ内のカテゴリ コードを変更して\gdef
(\global\def
定義がグループ外からアクセス可能になるように) を実行するという慣用句は、この種のカテゴリ コード操作の典型です。LaTeX のソース コードを詳しく調べると、同様のコーディングが多数行われていることがわかります。