LaTeXは、.bibファイルのエンコーディングが.texファイルと異なる場合の状況を処理しますか?たとえば、.texはISO-8859-2にあり、.bibはUTF-8にあります。 LaTeXでその場でエンコーディングを変換できますか?または、手動で行うのが唯一の方法ですか?
まず第一に、 LyX wiki によるとBibTeXはUTF-8を使用できません:
BibTeXは、UTF-8(つまり、Unicode)でエンコードされたファイルをサポートしていません。これは、現在、ほとんどのOSでデフォルトのファイルエンコードです。その理由は、現在のBibTeX(v。0.99c)が1988年にリリースされたため、Unicodeの登場よりも前から存在しているためです。長い間発表されたBibTeXv。1.0または計画されている多くの成功する可能性のあるアプリケーションの1つが準備できていない限り、Bibファイルにはlatin1(ISO-8859-1)または別の8ビットエンコーディングを使用する必要があります(これはLaTeXには影響しません)エンコーディング、それでもutf8)。
通常、本のタイトル、著者など、BibTeXファイル内にあるものはすべてLaTeXソースコードに逐語的にコピーされます(フォーマットや大文字と小文字の変更などがあります)。
したがって、BibTeXファイルのエンコーディングは、LaTeXファイルで使用されているものと一致する必要があります。一致しないと、問題が発生します。また、ドキュメントに適切なパッケージが含まれていない限り、BibTeXでbabelが提供するコマンド(n?germanが提供する"a
のä
など)を使用することはできません。
正規の方法は、適切なコマンドで特殊文字を常に指定することにより、BibTeXファイルにエンコードやパッケージの問題を認識させないようにすることです。
これは基本的に、ä
を書く代わりに、それが確実に機能することを確認したい場合は{\" a}
を使用する必要があることを意味します。かなり標準的な方法のようです。
Oren PatashnikによるBibTeXマニュアル BibTeXing もこれを詳述しています:
BibTeXはアクセント付き文字を処理するようになりました。たとえば、2つのフィールドを持つエントリがある場合
author = "Kurt G{\"o}del", year = 1931,
アルファ書誌スタイルを使用している場合、BibTeXはこのエントリのラベル
[Göd31]
を作成します。これは、必要なものです。この機能を機能させるには、アクセント記号付きの文字全体を中かっこで囲む必要があります。この場合、{\"o}
または{\"{o}}
のいずれかで問題ありません。さらに、これらの中括弧自体を中括弧で囲んではなりません(フィールド全体またはエントリ全体を区切る可能性のあるものを除く)。中括弧内の最初の文字としてバックスラッシュが必要です。したがって、この例では{G{\"{o}}del}
も{G\"{o}del}
も機能しません。この機能は、LaTeXブックの表3.1および3.2にある、アクセント記号付きのすべての文字と、バックスラッシュされていない外部記号を除くすべてを処理します。この機能は、定義した「アクセント」に対して同様に動作します。すぐに例を見ていきます。ラベル内の文字を数えるために、BibTeXは中括弧内に含まれるすべてのものを単一の文字と見なします。
入力エンコーディングはその場で変更できます。
\inputencoding{latin2}
\bibliography{mybib}
\inputencoding{utf8}
\inputencoding
コマンドは、inputenc
パッケージによって提供されます。
BibTeXには、最新バージョンであっても、非ASCII文字に関して大きな問題があります。最新のシステムを好む場合は、 biblatex と biber の組み合わせをお勧めします。どちらもまだベータ段階ですが、実稼働環境でも非常にうまく機能します。この組み合わせにより、LaTeXの参考文献に関連するほとんどの問題が解消されます。補足として、 biblatexドキュメント には、従来のBibTeX(§2.4.3)のエンコーディングの問題に関するセクションも含まれています。
Bibtexは、非標準の文字エンコーディングをランダムにサポートしています。基本的には機能する場合がありますが、ほとんどの場合は機能せず、公式にはサポートされていません( 詳細 )。
個人的には、.bibでは、基本的なASCIIと「o」のようなLaTeXの魔法に固執します。texの場合、英語で書かない場合は、.texをUTF-8のままにします。\usepackage [utf8] {inputenc}を使用します。