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
패키지에 이를 수행하는 옵션이 있지만 빌드 시간이 길고 정렬이 취약한 등 심각한 제한이 있습니다.) 이는 외부 도구가 필요함을 의미합니다. 패키지 작성자에게는 두 가지 옵션이 있습니다.
- 기존 도구를 사용하십시오.
- 새 도구를 만듭니다.
첫 번째 옵션은 가장 간단하며 에서 채택됩니다 nomencl
. 이러한 종류의 작업을 위해 설계된 TeX 배포판에는 두 가지 주요 도구, makeindex
즉 및 가 있습니다 xindy
. 그러나 이러한 도구는 페이지 번호(위치)가 필요한 색인용으로 특별히 설계되었습니다. 두 가지 중 xindy
더 유연하지만 여전히 유효한 위치나 각 항목에 대한 상호 참조가 필요하지만 makeindex
항상 위치가 필요하고 특정 스타일의 위치만 인식합니다. (상호참조는 위치를 폐기하여 처리합니다.)
설명이 첨부된 명명법/용어/기호 목록의 경우 페이지 번호가 표시되지 않는(또는 색인에만 나열되는) 경우가 많지만, 색인 도구를 사용하기 때문에 유효한 페이지 번호가 필요합니다. 인덱싱 응용 프로그램에 의해 형성된 위치 목록이 LaTeX에 의해 무시될 수 있는 경우에도 데이터를 허용하는 도구입니다.
이는 인덱스와 유사하지만 정확히 동일하지 않은 항목에 대해 인덱싱 도구를 사용할 때의 근본적인 단점입니다. 기존 색인 도구(특히 makeindex
오랫동안 사용되어 온 도구)를 사용하면 대부분의 TeX 배포판에 응용 프로그램이 설치되어 사용할 준비가 되어 있어야 한다는 장점이 있습니다. 의 경우 makeindex
코드가 검사될 만큼 충분히 오랜 시간이 지났고 이제 TeX의 신뢰할 수 있는 응용 프로그램 목록에 추가될 만큼 안전한 것으로 간주됩니다. 즉, 제한된 쉘 이스케이프에서 실행될 수 있다는 의미입니다.
의 경우 \pagenumbering{@gobble}
(확장을 통해 얻은) 위치는 \thepage
빈 문자열이 되어 유효한 위치가 아니므로 에 의해 거부됩니다 makeindex
.
두 번째 옵션(새 도구 만들기)은 특히 LaTeX 코드를 작성할 수 있지만 프로그래밍 언어에 익숙하지 않은 패키지 작성자의 경우 더욱 복잡합니다. 새로운 응용 프로그램을 TeX 배포판으로 만드는 데는 시간이 걸립니다.
- 컴파일된 언어(예: C)로 작성된 경우 컴파일된 운영 체제에서만 실행됩니다. (예를 들어 C로 프로그램을 작성하면 Linux에서만 실행되고 Windows에서는 실행되지 않습니다.) 다른 운영 체제에서 실행하려면 코드를 포팅하고 플랫폼에 맞게 컴파일해야 합니다.
- 해석된 언어(예: Perl) 또는 런타임 환경(예: Java)이 필요한 코드로 컴파일된 언어로 작성된 경우 해석기 또는 런타임 환경이 설치된 모든 운영 체제에서 실행됩니다.
두 경우 모두, 새 애플리케이션의 배포는 컴파일된 애플리케이션을 실행할 수 있거나 애플리케이션을 실행하는 데 필요한 인터프리터/런타임 환경을 실행할 수 있는 시스템으로 제한됩니다. 일반적으로 이전 운영 체제는 제외됩니다.
그만큼glossaries-extra
package 는 두 가지 접근 방식을 결합합니다. 기본 패키지와 마찬가지로 or 와 glossaries
함께 사용할 수 있지만 기본 패키지와는 달리 함께 사용할 수도 있습니다.makeindex
xindy
bib2gls
, 이는 패키지용으로 특별히 설계되었으므로 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
결과: