&가 테이블 형식 환경 외부에서 특별한 이유는 무엇입니까?

&가 테이블 형식 환경 외부에서 특별한 이유는 무엇입니까?

다음 m(비)we를 고려하십시오.

\documentclass{standalone}
\begin{document}
Foo & Bar
\end{document}

빌드가 실패합니다.

! Misplaced alignment tab character &.

&코드에서 문자를 제거하면 완벽하게 미세한 PDF가 생성됩니다 .

평범한 TeX조차도 그렇게 행동합니다.

Foo & Bar
\bye

같은 오류가 발생합니다.

나는 테이블 형식 및 배열 환경에서만 사용되는 것을 본 적이 &있으며 그 외부에서는 본 적이 없습니다. 왜 그런 겁니까?

\tabular예 를 들어 \endtabular그것은 &환경 내부에서만 특별하고 이러한 환경 외부에서는 정상적인 캐릭터일 뿐이라는 것을 정의할 수 없습니까 ?

&테이블 형식 및 배열 환경 외부에서 문서가 중단되어야 하는 이유는 무엇입니까 ?

질문을 바꿔 말하면: WTF는 정렬 탭 문자이며 일반적으로 어디에 배치합니까?

답변1

형식이나 사용자가 &(또는 다른 기호)의 catcode를 전역적으로 4로 설정하지 않았다고 가정해 보겠습니다.

로컬에서 그러한 문자를 계속 갖고 싶다고 가정하고( \nc항상 "새 열"과 같은 명령을 사용하지 않는다고 가정하면) 결과는 어떻게 될까요?

  1. 모든테이블 형식 환경에서는 문자를 정렬 탭으로 설정해야 하며 사용할 문자에 동의해야 합니다. 여기에는 많은 패치가 필요합니다. 이것은 당연히 형식이 작성될 때 수행되지 않은 이유에 대한 논쟁이 아닙니다.
  2. 일부 명령의 인수에 표 형식을 사용하는 경우 이 문자를 사용할 수 없습니다. 예를 들어 바닥글과 머리글, 문자 주소, 작성자 목록, 비머 프레임에서 표 형식을 사용할 때 문제가 발생할 수 있습니다. 자연스럽게 명령을 대체 명령으로 정의할 수 있지만 사용자는 이 명령이 언제 필요한지 이해해야 합니다.
  3. 정렬 탭을 로컬에서 비활성화하는 것은 다소 어려울 수 있습니다. 예를 들어 현재 다음과 같이 &가 많이 포함된 표 형식을 쉽게 입력할 수 있습니다.

    \documentclass{article}
    
    \begin{document}
    \begingroup
    \catcode`\&=12
    \catcode`!=4
    \begin{tabular}{ll}
    a & b ! c & d
    \end{tabular}
    \endgroup    
    \end{document}
    

    그러나 테이블 형식이 &의 catcode를 재설정하면 더 이상 작동하지 않습니다. 따라서 이러한 조작을 허용하려면 몇 가지 후크가 필요하며 모든 테이블 형식 환경에서도 마찬가지입니다.

전체적으로 패키지 작성자와 사용자에게는 많은 일이 훨씬 더 어려워질 것입니다. 타이핑하는 법을 배우는 것이 더 쉽습니다 \&.

답변2

물어:

&가 테이블 형식 환경 외부에서 특별한 이유는 무엇입니까?

질문이 적절하지 않은 것 같아요. 나는 그것이 &특별하다고 말하고 싶다어디에나tabular, 외부 환경 뿐만이 아닙니다 . 캐릭터 &카테고리 코드 4-- "정렬 탭" -- 내가 본 모든 TeX 및 LaTeX 형식입니다. 이 catcode 설정을 사용하면 tabular유사한 환경(예: tabular*, tabularx, longtable등)뿐만 아니라 array환경, 더 이상 사용되지 않는 eqnarray환경, 패키지의 일부 표시 수학 환경 amsmath, 패키지, 그리고 아마도 꽤 많은 추가 환경이 있을 것입니다.IEEEeqnarrayIEEEtrantools

&기본적으로 catcode 4를 할당하는 장점 은 모든 패키지 작성자가~해야 한다) catcode 4가 있다고 가정하고 코드를 작성합니다 &. 이 기본값이 없으면 일부 패키지 작성자가 &정렬 탭 문자로 선택하는 반면, 다른 작성자는 @다른 항목을 선택할 수도 있고 누가 알 수도 있습니다. 이러한 결과는 대부분의 사용자에게 확실히 열등할 것입니다. 왜냐하면 어떤 문자(들)가 어떤 환경에서 정렬 탭 기능으로 사용되는지 기억해야 하기 때문입니다.

반대로, 특별해지고 싶지 않고 &해당 catcode를 수정하고 싶지 않다면 로 입력해야 합니다 \&.

관련 정보