Babel-언어의 차이

Sep 18 2020

영어로 오류를 표시하고 포르투갈어로 잘 컴파일되는이 간단한 파일 :

\documentclass{report}

\usepackage[english]{babel}
%\usepackage[portuges]{babel}

\begin{document}
\ro
\end{document}

왜 \ro다른 언어가 아닌 한 언어로 정의됩니까? \ro포르투갈어 로 정의 된 것이 무엇인지 어떻게 알 수 있습니까? 이런 식으로 정의 된 다른 명령은 무엇입니까? \roBabel 매뉴얼 에는 언급이 없습니다 .

답변

4 Mico Sep 19 2020 at 06:39

\ro포르투갈어 로 정의 된 것이 무엇인지 어떻게 알 수 있습니까?

명령이 정의 된 방법을 알아 보려면을 사용하십시오 \show. \show\ro로그 파일을 실행 하고 살펴보면 다음을 찾습니다.

> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro

이것은 (a) \ro가 TeX 프리미티브가 아니라 매크로 임을 말합니다 . (b) 그 정의는 다음과 같습니다 . (c) 수학 모드가 아닌 텍스트 모드에서 사용되어야합니다.\def\ro{$^{\rm o}$}

저는 포르투갈어 전문가는 아니지만 "첫 번째, 두 번째, 세 번째"는 "primeiro, segundo, terceiro"와 같은 긴 형식으로 작성되고 속기처럼 LaTeX / babel 입력 표기법을 사용한다고 생각 1\ro, 2\ro, 3\ro합니다. \ro위에 표시된 정의가 주어지면의 출력이 어떻게 생겼는지 추측 할 수 있습니다 1\ro, 2\ro, 3\ro.

분명히, \ro이것은 기본 번호를 서수로 "변환"하는 데 사용됩니다 (인쇄상의 의미에서!). \ro는 명시 적 인수 를 사용 하지 않지만 자체적으로 사용되는 것이 아니라 숫자와 함께 사용되는 것을 의미합니다.

덧붙여서 포르투갈어는 남성형과 여성형 서수를 모두 알고 있습니다. "primeira, segunda, terceira, quarta"를 축약 된 형태로 생성하려면 1\ra, 2\ra, 3\ra, 4\ra. 예를 들어, "a quarta vez"( "The four time")는 a 4\ra~vez.

왜 \ro한 언어로 정의되고 다른 언어로는 정의되지 않습니까?

음, 인쇄상의 요구 사항은 언어마다 다르기 때문에?

확실히, 영어 조판에서는 \ro또는 \ra매크로에 대한 명백한 필요가 없습니다 . "첫 번째, 두 번째, 세 번째"는 영어 문서 와 같이 축약 된 형태로 작성 되지 않았습니다1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o} . 게다가 영어는 남성과 여성 (중립은 말할 것도없이) 서수를 구별하지 않습니다.

서수 조판을 단순화하고 표준화하는 여러 LaTeX 패키지가 있습니다. 그러한 패키지 중 하나는 Nicola Talbot의 fmtcount 이며, 매크로 \ordinalnum를 제공하고 많은 언어 별 적응을 특징으로합니다. (Aside :이 fmtcount패키지는 매크로 외에도 많은 기능을 제공합니다 ordinalnum...) 물론입니다.

\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}

두 번은 숫자 "1"다음에 위 첨자 수준 스크립트 크기 문자 "o"가오고 숫자 "2"다음에 위 첨자 수준 스크립트 크기 문자 "a"가 오는 두 인스턴스를 생성합니다. ( 이 옵션으로로드 \ordinalnum{2}되면 생성되는 내용을 추측 할 수 있습니다 .)babelenglish

babel패키지가 오랫동안 사용되어 왔으므로 babel.NET과 같은 패키지가 출현하기 훨씬 전에 많은 언어 별 조판 기능이 만들어 졌다는 사실을 상기하는 것이 유용합니다 fmtcount. 확실히, babel현재 발견되는 언어 별 이질성 은 패키지가 오늘날 하향식 방식으로 처음부터 작성된 것보다 훨씬 큽니다. (이외에도 다음 경우 portuges의 모듈이 babel오늘 기록 된, 하나는 아마도 대체 할 과 함께 하고 , 각각,하지만 그건 다른 문제입니다.)\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}

3 egreg Sep 19 2020 at 10:09

에 대한 여러 언어 정의 파일 babel이 제대로 문서화되지 않았습니다.

이렇게하면 texdoc babel-portuges(터미널에서 또는 링크를 클릭) 맨 끝에

LDF 파일이 최근에 수정되었다고 주장 함에도 불구하고. 나는 이러한 정의가 babel역사의 시작 부분에 오래 전에 추가되었다고 생각합니다 . 여러 LDF는 다양한 언어에 대해 유사한 임시 정의를 가지고 있으며 사용자 또는 패키지 명령과 충돌 할 수 있기 때문에 정말 성가신 일입니다.

영어 문서에서 \ord또는 \ro(예를 들어 수학 연산자에 전자를 사용할 수 있음) 라는 명령을 정의한다고 가정 해 보겠습니다 . 명령이 잘 작동합니다. \usepackage[portuges]{babel}그러나을 추가하면 컴파일이 중지됩니다.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}

\DeclareMathOperator{\ord}{ord}

%[...]

멈출 것이다

! LaTeX Error: Command \ord already defined.
               Or name \end... illegal, see p.192 of the manual.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.6 \DeclareMathOperator{\ord}{ord}

해결 방법이 있습니까? 에서 이러한 정의를 제거하는 것에주의 portuges.ldf사용 포르투갈어 기존 문서를 끊을 \ord, \orda, \ro또는 \ra.

그러나 대한 귀하의 문서, 당신은 어떤 기분을 상하게 명령 수단 특정 문서에보고 당신이 필요할지 여부를 결정할 수 있습니다. 예를 들어를 사용 \ord하면 다음과 같은 해결 방법을 추가 할 수 있습니다.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}

% fix an incompatibility
\let\babelord\ord
\DeclareRobustCommand{\ord}{%
  \ifmmode\expandafter\ordop\else\expandafter\babelord\fi
}
\DeclareMathOperator{\ordop}{ord}

%[...]

원본 \ord은 텍스트 모드에만 속하기 때문 입니다.

3 Davislor Sep 19 2020 at 08:51

일반적으로 babel정의 파일 에서 레거시 명령을 사용하지 않는 것이 좋습니다 .

이에 대한 표준 명령 은 \textordmasculine및 \textordfeminine입니다. 이는 모든 언어로 작동하며 babel.

평상시와 같은 방식으로 편집기에 ª 및 º 문자를 입력 할 수도 있습니다. 최신 버전의 LaTeX에서 작동합니다.

이 모든 명령은 텍스트 모드 용입니다. 어떤 이유로 수학 모드에서 사용하려는 경우 \textnormal{1º}. 와 같은 명령으로 단어를 래핑해야합니다 . 텍스트 모드로 다시 전환됩니다.

최신 버전의 PDFTeX에서는 이러한 모든 명령이 기본적으로 작동합니다. 이전 설치에서는 서문에 다음 행을 추가해야 할 수 있습니다.

\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}

LuaLaTeX 또는 XeLaTeX에서 대신 다음을 사용하여 최신 글꼴을 활성화하려고합니다.

\usepackage{fontspec}

뒤에 \setmainfont. 하지만 많은 글꼴 패키지가 인코딩을 올바르게 설정합니다.

일부 글꼴에는 이러한 기호 아래에 막대가 있고 다른 글꼴에는 표시되지 않으므로 선호하는 글꼴을 선택하십시오. 밑줄이없는 버전과 밑줄이있는 글꼴을 원한다면 재정의 할 수 있습니다.

\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}