명명법 패키지 관련 문제: 페이지 번호 중얼

명명법 패키지 관련 문제: 페이지 번호 중얼

nomencl를 사용할 때 패키지 에서 다음 버그를 발견했습니다 \pagenumbering{gobble}. 다음 MWE 예제는 잘 작동하지만 주석을 \pagenumbering{gobble}제거하면 명명법 항목이 거부됩니다.

MWE document.tex

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
    %\pagenumbering{gobble}
    \nomenclature{$c$}{Speed of light in a vacuum inertial frame}
    \nomenclature{$h$}{Planck constant}
    \lipsum[1]
    \printnomenclature
\end{document}

명령 실행:

pdflatex document.tex
makeindex -s nomencl.ist -o document.nls document.nlo
pdflatex document.tex

내가 왜 사용했는가? \pagenumbering{gobble}?

의 인기로 인해이 질문과 대답.

해결 방법

\thispagestyle{empty}대신 에 다음 해결 방법을 찾았습니다 \pagenumbering{gobble}. 하지만 이것이 처음에 문제가 발생한 이유를 설명하지는 않습니다.

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
    \lipsum[1]
    \thispagestyle{empty}
    \clearpage
    \setcounter{section}{0}
    \pagenumbering{arabic}
    \nomenclature{$c$}{Speed of light in a vacuum inertial frame}
    \nomenclature{$h$}{Planck constant}
    \lipsum[1]
    \printnomenclature
\end{document}

답변1

TLDR: 버그는 아니지만 makeindex인덱스 생성용으로 설계되었기 때문에 유효한 페이지 번호를 요구한 결과입니다.


nomencl(and etc) 와 같은 패키지는 glossaries명명법/기호/용어 목록에 표시되어야 하는 정보를 정렬하고 대조해야 합니다. TeX는 실제로 그런 종류의 데이터 처리용으로 설계되지 않았습니다. ( glossaries패키지에 이를 수행하는 옵션이 있지만 빌드 시간이 길고 정렬이 취약한 등 심각한 제한이 있습니다.) 이는 외부 도구가 필요함을 의미합니다. 패키지 작성자에게는 두 가지 옵션이 있습니다.

  1. 기존 도구를 사용하십시오.
  2. 새 도구를 만듭니다.

첫 번째 옵션은 가장 간단하며 에서 채택됩니다 nomencl. 이러한 종류의 작업을 위해 설계된 TeX 배포판에는 두 가지 주요 도구, makeindex즉 및 가 있습니다 xindy. 그러나 이러한 도구는 페이지 번호(위치)가 필요한 색인용으로 특별히 설계되었습니다. 두 가지 중 xindy더 유연하지만 여전히 유효한 위치나 각 항목에 대한 상호 참조가 필요하지만 makeindex항상 위치가 필요하고 특정 스타일의 위치만 인식합니다. (상호참조는 위치를 폐기하여 처리합니다.)

설명이 첨부된 명명법/용어/기호 목록의 경우 페이지 번호가 표시되지 않는(또는 색인에만 나열되는) 경우가 많지만, 색인 도구를 사용하기 때문에 유효한 페이지 번호가 필요합니다. 인덱싱 응용 프로그램에 의해 형성된 위치 목록이 LaTeX에 의해 무시될 수 있는 경우에도 데이터를 허용하는 도구입니다.

이는 인덱스와 유사하지만 정확히 동일하지 않은 항목에 대해 인덱싱 도구를 사용할 때의 근본적인 단점입니다. 기존 색인 도구(특히 makeindex오랫동안 사용되어 온 도구)를 사용하면 대부분의 TeX 배포판에 응용 프로그램이 설치되어 사용할 준비가 되어 있어야 한다는 장점이 있습니다. 의 경우 makeindex코드가 검사될 만큼 충분히 오랜 시간이 지났고 이제 TeX의 신뢰할 수 있는 응용 프로그램 목록에 추가될 만큼 안전한 것으로 간주됩니다. 즉, 제한된 쉘 이스케이프에서 실행될 수 있다는 의미입니다.

의 경우 \pagenumbering{@gobble}(확장을 통해 얻은) 위치는 \thepage빈 문자열이 되어 유효한 위치가 아니므로 에 의해 거부됩니다 makeindex.

두 번째 옵션(새 도구 만들기)은 특히 LaTeX 코드를 작성할 수 있지만 프로그래밍 언어에 익숙하지 않은 패키지 작성자의 경우 더욱 복잡합니다. 새로운 응용 프로그램을 TeX 배포판으로 만드는 데는 시간이 걸립니다.

  • 컴파일된 언어(예: C)로 작성된 경우 컴파일된 운영 체제에서만 실행됩니다. (예를 들어 C로 프로그램을 작성하면 Linux에서만 실행되고 Windows에서는 실행되지 않습니다.) 다른 운영 체제에서 실행하려면 코드를 포팅하고 플랫폼에 맞게 컴파일해야 합니다.
  • 해석된 언어(예: Perl) 또는 런타임 환경(예: Java)이 필요한 코드로 컴파일된 언어로 작성된 경우 해석기 또는 런타임 환경이 설치된 모든 운영 체제에서 실행됩니다.

두 경우 모두, 새 애플리케이션의 배포는 컴파일된 애플리케이션을 실행할 수 있거나 애플리케이션을 실행하는 데 필요한 인터프리터/런타임 환경을 실행할 수 있는 시스템으로 제한됩니다. 일반적으로 이전 운영 체제는 제외됩니다.

그만큼glossaries-extrapackage 는 두 가지 접근 방식을 결합합니다. 기본 패키지와 마찬가지로 or 와 glossaries함께 사용할 수 있지만 기본 패키지와는 달리 함께 사용할 수도 있습니다.makeindexxindybib2gls, 이는 패키지용으로 특별히 설계되었으므로 glossaries-extra빈 위치를 허용합니다(실제로 모든 위치를 허용하지만 숫자 값을 결정할 수 있는 경우에만 범위를 형성합니다).

MWE:

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@symbol{speedoflight,
  name={\ensuremath{c}},
  description={Speed of light in a vacuum inertial frame}
}

@symbol{planck,
  name={\ensuremath{h}},
  description={Planck constant}
}
\end{filecontents*}

\usepackage{lipsum}
\usepackage[record]{glossaries-extra}% 'record' option required for bib2gls

\GlsXtrLoadResources[
  src={\jobname},% entries in \jobname.bib
  selection={all},% select all defined entries
  sort={none},% don't bother sorting
  save-locations=false% location lists not required
]

\begin{document}
\pagenumbering{gobble}
\lipsum[1]

\printunsrtglossary
\end{document}

문서 빌드(파일 이름이 test.tex):

pdflatex test
bib2gls test
pdflatex test

결과:

문서 이미지

관련 정보