ラテックスのためのDevanagari音訳管
ハリシケシュルト / デーヴァナーガリ
ラヴァンクスでのDevanagari音訳-Ivanst、ハーバード京都、velthuis、slp 1、wxなどとしてレンダリングするために、Devanagariで書きます。
ラテックスにおけるDevanagari音訳
iVaST、ハーバード京都、velthuis、slp 1、wxなどとしてレンダリングするためにDevanagariで書き込みます.
Devanagari text can be transliterated in various standard schemes. There exist several input systems based on these transliteration schemes to enable users easily input the text. More often than not, a user has a preference of scheme to type the input in. Similarly, at times, one faces a need to render it in a different scheme in the PDF document.
In my case, I prefer using ibus-m17n
to type text in Devanagari. While writing articles that contain Devanagari text, I also faced the need to render the text as IAST in the final PDF
One could always learn to input text in another input scheme, but that may get tedious. Similarly, transliterating each word using online systems such as Aksharamukha can also be a tedious task. So, I was looking for a way…
View on GitHub
Devanagari 第4の最も広く採用されている世界では、主にインド亜大陸で使用される書き込みシステムです.スクリプトは120以上の言語、いくつかの注目すべき言語のために使用されている、サンスクリット語、ヒンディー語、マラソン、パーリ語、ネパール語、これらの言語のいくつかのバリエーションです.
Devanagariテキストは様々な翻訳することができますstandard schemes . ユーザが容易にテキストを入力できるようにするために,これらの翻案方式に基づくいくつかの入力システムが存在する.より頻繁に、ユーザは入力を入力する計画の好みを持っています.同様に、時々、1つはPDF文書の異なった計画でそれを提出する必要に直面します.
私の場合、私は ibus-m17n
Devanagariでテキストを入力します.Devanagariテキストを含む記事を書く間、私はまた、最終的なPDFでIastとしてテキストを提出する必要性に直面しました.
つは常に別の入力スキームでテキストを入力することを学ぶことができますが、それは退屈なことがあります.同様に、オンラインシステムを使用して各単語を翻訳するAksharamukha することもできます退屈なタスクです.それで、私はDevanagariでタイプできる方法を探していました、そして、それはPDF編集の後、Iastで提出されました.解決策として、私はLaTeXにカスタム構文を加えるLaTeXコマンドの小さなセットから成るシステムとPython indic-transliteration
中層として機能し、ラテックスファイルを処理して適切な音訳を持つ新しいLaTeXファイルを作成します.
翻刻支援によるLaTeXコンパイルシステム
システムには2つの主要なコンポーネントがあります.
Devanagari text can be transliterated in various standard schemes. There exist several input systems based on these transliteration schemes to enable users easily input the text. More often than not, a user has a preference of scheme to type the input in. Similarly, at times, one faces a need to render it in a different scheme in the PDF document.
In my case, I prefer using ibus-m17n
to type text in Devanagari. While writing articles that contain Devanagari text, I also faced the need to render the text as IAST in the final PDF
One could always learn to input text in another input scheme, but that may get tedious. Similarly, transliterating each word using online systems such as Aksharamukha can also be a tedious task. So, I was looking for a way…
ラテックス構文
(株) XETX
xelatex
) とluatexlualatex
) 良いUnicodeサポートを持っているとDevanagariテキストを書くために使用することができます.現在の例では、xetexのセットアップについて述べます.まず、必要なパッケージをLaTeXの前文に追加します.
.tex
) ファイル.% This assumes your files are encoded as UTF8
\usepackage[utf8]{inputenc}
% Devanagari Related Packages
\usepackage{fontspec, xunicode, xltxtra}
使用fontspec
, フォントファミリーの環境を定義し、特定のスクリプトでテキストを書くことができます.Devanagariテキストを書くには、1つのDevanagariフォントを利用する必要があります.(ここではdevanagariと他の音訳の両方を書く必要があるかもしれません).Devanagariフォントの詳細については、fonts section このドキュメントの.このセクションでは
Sanskrit 2003
フォントはシステムにインストールされます.前述のように環境を定義するには、プリアンブルに次の行を追加します.
% Define Fonts
\newfontfamily\textskt[Script=Devanagari]{Sanskrit 2003}
\newfontfamily\textiast[Script=Latin]{Sanskrit 2003}
% Commands for Devanagari Transliterations
\newcommand{\skt}[1]{{\textskt{#1}}}
\newcommand{\iast}[1]{{\textiast{#1}}}
\newcommand{\Iast}[1]{{\textiast{#1}}}
\newcommand{\IAST}[1]{{\textiast{#1}}}
これは4つのコマンドを提供します.\skt{}
Devanagariテキストをレンダリングするために使用できます.\iast{}
, \Iast{}
and \IAST{}
小文字、タイトルケース、大文字のそれぞれでIAST形式でDevanagariテキストを表示するために使用できます.ラテックスエンジンの観点から\iast{}
, \Iast{}
and \IAST{}
は同一です.Pythonスクリプトを読み書きを実行し、適切な変更を適用するのを助けるために、それらは全く構文的に異なります.さらに、新しいフォントファミリと新しいコマンドを定義することができます
\velthuis{}
, \hk{}
など.最小例
これらのコマンドといくつかのDevanagariテキストを備えて、私たちは以下のように最小限の例を持っています
minimal.tex
,\documentclass[10pt]{article}
% This assumes your files are encoded as UTF8
\usepackage[utf8]{inputenc}
% Devanagari Related Packages
\usepackage{fontspec, xunicode, xltxtra}
% Define Fonts
\newfontfamily\textskt[Script=Devanagari]{Sanskrit 2003}
\newfontfamily\textiast[Script=Latin]{Sanskrit 2003}
% Commands for Devanagari Transliterations
\newcommand{\skt}[1]{{\textskt{#1}}}
\newcommand{\iast}[1]{{\textiast{#1}}}
\newcommand{\Iast}[1]{{\textiast{#1}}}
\newcommand{\IAST}[1]{{\textiast{#1}}}
\title{Transliteration of Devanagari Text}
\author{Hrishikesh Terdalkar}
\begin{document}
\maketitle
\skt{को न्वस्मिन् साम्प्रतं लोके गुणवान् कश्च वीर्यवान्।}
\iast{को न्वस्मिन् साम्प्रतं लोके गुणवान् कश्च वीर्यवान्।}
\Iast{को न्वस्मिन् साम्प्रतं लोके गुणवान् कश्च वीर्यवान्।}
\IAST{को न्वस्मिन् साम्प्रतं लोके गुणवान् कश्च वीर्यवान्।}
\end{document}
翻字スクリプト
Pythonスクリプトは、ラテックス上での文字変換といくつかのクリーンアップを実行するために使用されます.
python3 finalize.py minimal.tex final.tex
この結果、次のように変換されます.% ...
\skt{को न्वस्मिन् साम्प्रतं लोके गुणवान् कश्च वीर्यवान्।}
\iast{ko nvasmin sāmprataṃ loke guṇavān kaśca vīryavān|}
\Iast{Ko Nvasmin Sāmprataṃ Loke Guṇavān Kaśca Vīryavān|}
\IAST{KO NVASMIN SĀMPRATAṂ LOKE GUṆAVĀN KAŚCA VĪRYAVĀN|}
% ...
我々は、現在コンパイルすることができますfinal.tex
ファイル.xelatex final
これにより、以下の出力が得られる. 翻字スクリプトの解剖
翻字スクリプトの中核には機能があります
transliterate_between
.def transliterate_between(
text: str,
from_scheme: str,
to_scheme: str,
start_pattern: str,
end_pattern: str,
post_hook: Callable[[str], str] = lambda x: x,
) -> str:
"""Transliterate the text appearing between two patterns
Only the text appearing between patterns `start_pattern` and `end_pattern`
it transliterated.
`start_pattern` and `end_pattern` can appear multiple times in the full
text, and for every occurrence, the text between them is transliterated.
`from_scheme` and `to_scheme` should be compatible with scheme names from
`indic-transliteration`
Parameters
----------
text : str
Full text
from_scheme : str
Input transliteration scheme
to_scheme : str
Output transliteration scheme
start_pattern : regexp
Pattern describing the start tag
end_pattern : regexp
Pattern describing the end tag
post_hook : Callable[[str], str], optional
Function to be applied on the text within tags after transliteration
The default is `lambda x: x`.
Returns
-------
str
Text after replacements
"""
if from_scheme == to_scheme:
return text
def transliterate_match(matchobj):
target = matchobj.group(1)
replacement = transliterate(target, from_scheme, to_scheme)
replacement = post_hook(replacement)
return f"{start_pattern}{replacement}{end_pattern}"
pattern = "%s(.*?)%s" % (re.escape(start_pattern), re.escape(end_pattern))
return re.sub(pattern, transliterate_match, text, flags=re.DOTALL)
スタートパターンと終了パターンは\iast{
and }
これらのタグに囲まれたテキストを再帰的に変換します.この関数を使用すると、一般的な関数を任意の音訳スキームで動作するように書くことができます.
def latex_transliteration(
input_text: str,
from_scheme: str,
to_scheme: str
) -> str:
"""Transliaterate parts of the LaTeX input enclosed in scheme tags
A scheme tag is of the form `\\to_scheme_lowercase{}` and is used
when the desired output is in `to_scheme`.
i.e.,
- Tags for IAST scheme are enclosed in \\iast{} tags
- Tags for VH scheme are enclosed in \\vh{} tags
- ...
Parameters
----------
input_text : str
Input text
from_scheme : str
Transliteration scheme of the text written within the input tags
to_scheme : str
Transliteration scheme to which the text within tags should be
transliterated
Returns
-------
str
Text after replacement of text within the scheme tags
"""
start_tag_pattern = f"\\{to_scheme.lower()}"
end_tag_pattern = "}"
return transliterate_between(
input_text,
from_scheme=from_scheme,
to_scheme=to_scheme,
start_pattern=start_tag_pattern,
end_pattern=end_tag_pattern
)
注意:スキーム名(したがって、対応するLaTeXコマンド)は、使用するスキームの名前に準拠しなければなりませんによって
indic-transliteration
パッケージ.ISTは大文字小文字を区別しない音訳方式であり、特定の単語(例えば固有名詞)の特定の資本化に興味を持っているかもしれません.私たちは
post_hook
この関数を提供する引数.これを使用して、以前に述べたIastの3つのバリアントを処理する関数を作成できます.\iast{}
より低い.\Iast{}
及び名称\IAST{}
(上).def devanagari_to_iast(input_text: str) -> str:
"""Transliaterate parts of the input enclosed in
\\iast{}, \\Iast{} or \\IAST{} tags from Devanagari to IAST
Text in \\Iast{} tags also undergoes a `.title()` post-hook.
Text in \\IAST{} tags also undergoes a `.upper()` post-hook.
Parameters
----------
input_text : str
Input text
Returns
-------
str
Text after replacement of text within the IAST tags
"""
intermediate_text = transliterate_between(
input_text,
from_scheme=sanscript.DEVANAGARI,
to_scheme=sanscript.IAST,
start_pattern="\\iast{",
end_pattern="}"
)
intermediate_text = transliterate_between(
intermediate_text,
from_scheme=sanscript.DEVANAGARI,
to_scheme=sanscript.IAST,
start_pattern="\\Iast{",
end_pattern="}",
post_hook=lambda x: x.title()
)
final_text = transliterate_between(
intermediate_text,
from_scheme=sanscript.DEVANAGARI,
to_scheme=sanscript.IAST,
start_pattern="\\IAST{",
end_pattern="}",
post_hook=lambda x: x.upper()
)
return final_text
最後に、コメントを削除し、余分な空白をきれいにする他のユーティリティ機能があります.エクストラ
その上、私たちのセットアップなどのいくつかのより多くの構造が欲しいかもしれません.
\input{sections/section_devanagari.tex}
\input{sections/section_iast_lower.tex}
\input{sections/section_iast_title.tex}
\input{sections/section_iast_upper.tex}
\bibliographystyle{acm}
\bibliography{papers}
ラテックス調製
スキームタグを複数のセクションで使用したかもしれません.つのオプションは、セクションファイルの新しいセットを作成し、最終的なラテックスファイルをコンパイルするためにそれらを使用するすべてのセクションファイルに翻字スクリプトを適用することです.
より簡単な解決策は
latexpand
これは\input{}
コマンドは、実際にコンテンツを含めると、単一の統合ラテックスファイルを作成します.latexpand main.tex > single.tex
さて、このファイルでPythonスクリプトを実行して、読み書きタグを解決できます.python3 finalize.py main.tex final.tex
編集
BibTeXで作業するとき、PDFで参照の正しいレンダリングを得るために、しばしば複数回必要です.通常、これは
xelatex final
bibtex final
xelatex final
xelatex final
あるいは、私たちはlatexmk
それは退屈なコンパイルルーチンの面倒を見て、私たちの仕事を一つのコマンドに還元します.latexmk -pdflatex='xelatex %O %S' -pdf -ps- -dvi- final.tex
使用のもう一つの利点latexmk
は、1つのライナーを使用してラテックスエンジンによって生成された多数のファイルをきれいにすることができます.latexmk -c
Makefile
最後に、すべてのコンソールコマンドを
Makefile
.all: .all
.all: main.tex sections/*.tex papers.bib
latexpand main.tex > single.tex
python3 finalize.py single.tex final.tex
latexmk -pdflatex='xelatex %O %S' -pdf -ps- -dvi- final.tex
clear:
latexmk -C
rm single.tex
rm final.tex
clean:
latexmk -c
したがって、我々は現在のコンテンツを書くことに集中することができます.tex
ファイルと一度我々が完了したら、単にコマンドを使用します.make
要件
我々は多くの外部ツールを使用しました、そして、それは説明された解決の前にこれらのセットアップをすることを必要とします.
最小要件
The minimal example 前に述べたのは3つだけです.
indic-transliteration
追加要件
The extras 依存関係があります.
BibTeX (オプション)
latexpand
(オプション)\input{}
) latexmk
(オプション) (より簡単なTeXコンパイル)フォントフォント
今日ではいくつかの良いDevanagariフォントがご利用いただけます.Googleフォントも提供wide variety of Devanagari fonts .
私の個人的なお気に入りの2つです.
コード
セットアップ全体のソースコードはhrishikeshrt/devanagari-transliteration-latex .
Reference
この問題について(ラテックスのためのDevanagari音訳管), 我々は、より多くの情報をここで見つけました https://dev.to/hrishikeshrt/devanagari-transliteration-pipeline-for-latex-1fidテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol