マクロを使用せずに、スラッシュの後の改行を常に許可する

マクロを使用せずに、スラッシュの後の改行を常に許可する

私は を使って表をタイプセットしています。列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 のソース コードを詳しく調べると、同様のコーディングが多数行われていることがわかります。

関連情報