ラテックスのための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つの主要なコンポーネントがあります.
  • ラテックスSynatx
  • 翻字スクリプト
  • ラテックス構文


    (株) XETXxelatex ) と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
    
    最後に、コメントを削除し、余分な空白をきれいにする他のユーティリティ機能があります.

    エクストラ


    その上、私たちのセットアップなどのいくつかのより多くの構造が欲しいかもしれません.
  • 複数のファイルへのOntentの分離
  • \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つだけです.
  • XELATEX ( Unicodeのサポート)TeX Live )
  • Python3
  • indic-transliteration
  • 追加要件


    The extras 依存関係があります.

  • BibTeX (オプション)

  • latexpand (オプション)\input{} )

  • latexmk (オプション) (より簡単なTeXコンパイル)
  • フォントフォント


    今日ではいくつかの良いDevanagariフォントがご利用いただけます.Googleフォントも提供wide variety of Devanagari fonts .
    私の個人的なお気に入りの2つです.
  • Sanskrit 2003
  • Noto Serif Devanagari
  • コード


    セットアップ全体のソースコードはhrishikeshrt/devanagari-transliteration-latex .