매크로를 사용하지 않고도 모든 경우에 슬래시 뒤에 줄바꿈을 허용합니다.

매크로를 사용하지 않고도 모든 경우에 슬래시 뒤에 줄바꿈을 허용합니다.

나는 테이블을 타이핑하고 있습니다 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가 되므로 /재정의하려고 할 때 제어 시퀀스가 ​​누락됩니다. 이는 예를 들어 다음과 같은 이유이기도 합니다. 범주 코드를 전체적으로 변경하는 것은 다른 명령에 대한 인수에서는 작동하지 않습니다. TeX가 최종적으로 매크로를 확장할 때 원래 범주 코드가 설정되므로 축어 모드가 작동하기에는 이러한 변경이 너무 늦게 발생합니다 ./\verb\verb

그룹 내에서 범주 코드를 변경하고 수행하는 관용구 ( 그룹 외부에서 정의에 액세스할 수 있도록 \gdef줄임 )는 이러한 종류의 범주 코드 조작에 일반적입니다. \global\defLaTeX 소스 코드를 자세히 살펴보면 유사한 코딩이 많이 발생하는 것을 볼 수 있습니다.

관련 정보