在 LaTeX 中設定多語言環境

在 LaTeX 中設定多語言環境

假設我想要一個包含兩種語言的 LaTeX 文檔,即泰語和英語,每種語言都有不同的字體。假設我想要一種名為'TH 沙拉汶丘拉' 對於泰語來說“拉丁現代羅馬”(預設字體)保留為英文。通常,我會做的是添加字體規範多語言包,然後將泰語設定為主要語言,並在下面添加英語作為附加語言\Efont;如下:

\usepackage[no-math]{fontspec}
\setmainfont{TH Sarabun Chula}
\XeTeXlinebreaklocale "TH"
\XeTeXlinebreakskip = 0pt plus 1pt  

\usepackage{polyglossia}
\setotherlanguages{english}
\newfontfamily\Efont{Latin Modern Roman}

'TH 沙拉汶丘拉' 字體比拉丁現代羅馬所以我做了一個命令\lm基於\Efont使英文變小,從而消除字體之間的大小差異。

\newcommand{\lm}[1]{
    {\small{\Efont{#1}}}}

我的大部分文件都使用泰語作為主要語言;所以每當我想使用英語環境時,我都會使用\lm命令,我得到了我想要的。以下是我的講義中使用此命令的部分程式碼。

\begin{itemize}[noitemsep]
    \item งาน \lm{(work)} คือการถ่ายโอนพลังงานที่ทำให้โมเลกุลเคลื่อนตัวอย่างเป็นระเบียบ
    \item ความร้อน \lm{(heat)} คือการถ่ายโอนพลังงานที่ทำให้โมเลกุลเคลื่อนตัวอย่างไม่เป็นระเบียบ
\end{itemize}
สมมติว่าเราให้ความร้อนโดยต้มน้ำในหม้อจนเดือด จะสังเกตได้ว่าจะเกิดการสั่น เคลื่อนที่ไม่เป็นระเบียบ 
นั่นแสดงว่าความร้อนได้กระตุ้นให้โมเลกุลของไอน้ำสั่นและเคลื่อนตัวไปมาอย่างไม่เป็นระเบียบ 
เราอาจการเคลื่อนที่ดังกล่าวว่าเป็นการเคลื่อนที่ความร้อน \lm{(thermal motion)}

我可以繼續用這個方法,但寫這篇太累了\lm{...}每次。我想知道是否有其他方法可以在兩種(或多種)語言環境之間進行轉換,而無需設定上述命令。(只需在正文中輸入它們,它就會立即自動更改字體。)

我感謝您提前提供的任何幫助。謝謝。

答案1

將來,請始終提供可編譯的程式碼而不是片段。這使得人們更容易提供幫助,並且答案更有可能適用於您的真實文件。

您可以縮放英文字體,這比依賴更好,\small因為它會在不同大小下正確縮放。 (\small順便說一句,不接受爭論。)

然而,您仍然需要告訴 LaTeX 切換語言。這不僅僅是改變字體的問題。據我所知,polyglossia無法自動檢測到這一點,因此您需要暫時啟動替代語言。您可以建立\lm一個快捷方式,\textenglish{}該快捷方式是由用於切換的巨集提供的polyglossia,但這當然並不意味著更少的打字。

\documentclass[11pt,oneside,a4paper,titlepage]{article}
\usepackage[no-math]{fontspec}
\setmainfont{Noto Sans Thai}
\XeTeXlinebreaklocale "TH"
\XeTeXlinebreakskip = 0pt plus 1pt  

\usepackage{polyglossia}
\setmainlanguage{thai}
\setotherlanguage[variant=american]{english}
\newfontfamily\englishfont{Latin Modern Roman}[Scale=MatchLowercase]

\NewCommandCopy \lm \textenglish
\begin{document}
\begin{itemize}
  \item งาน \lm{(work)} คือการถ่ายโอนพลังงานที่ทำให้โมเลกุลเคลื่อนตัวอย่างเป็นระเบียบ
  \item ความร้อน \lm{(heat)} คือการถ่ายโอนพลังงานที่ทำให้โมเลกุลเคลื่อนตัวอย่างไม่เป็นระเบียบ
\end{itemize}
\end{document}

為了減少打字次數,請在您選擇的編輯器中建立一個組合鍵,這樣您就不必\lm{}每次都手動編寫。更好的是,將其插入\textenglish{}或其他任何方式,以便您的程式碼更加透明,並且您的標記語義而不是基於外觀。

由於 Okular-on-X 錯誤,未提供圖像,但無論如何,使用 Noto Sans Thai 和 LM 時,輸出看起來都很糟糕。 (缺少泰語字符和嚴重不匹配的權重。)因此該代碼純粹是說明性的,而不是裝飾性的。

答案2

您可以使用 Babel (或使用 Polyglossia,如 @cfr 已經發布的那樣)來完成此操作。將 Babel 與 LuaLaTeX 結合使用的優點之一是它可以自動檢測您正在輸入的語言並相應地更改字體,而不需要任何標籤或環境。

此 MWE 還將所有字體縮放到相同的 x 高度,但您可以透過Scale=在每個需要的字體前面添加一個選項來調整字體大小。我還加載了unicode-math, butfontspec和其他數學包也可以工作。

\documentclass{article}
\tracinglostchars=3 % Make it an error for letters to be missing.
\usepackage{enumitem}
\usepackage{babel}
\usepackage{unicode-math}

\babelprovide[import, onchar=fonts ids]{english}
\babelprovide[import, main, onchar=fonts ids]{thai}

% TH Sarabun Chula is available from https://www.arts.chula.ac.th/ling/tag/ipa/

\defaultfontfeatures{Scale=MatchLowercase, Ligatures=TeX}
\babelfont{rm}
          [Scale=1.0]{NewCM10-Regular}
\babelfont[thai]{rm}
          {TH Sarabun Chula}
\setmathfont{NewCMMath-Regular.otf}

\begin{document}
\begin{itemize}[noitemsep]
    \item งาน (work) คือการถ่ายโอนพลังงานที่ทำให้โมเลกุลเคลื่อนตัวอย่างเป็นระเบียบ
    \item ความร้อน (heat) คือการถ่ายโอนพลังงานที่ทำให้โมเลกุลเคลื่อนตัวอย่างไม่เป็นระเบียบ
\end{itemize}

สมมติว่าเราให้ความร้อนโดยต้มน้ำในหม้อจนเดือด จะสังเกตได้ว่าจะเกิดการสั่น เคลื่อนที่ไม่เป็นระเบียบ 
นั่นแสดงว่าความร้อนได้กระตุ้นให้โมเลกุลของไอน้ำสั่นและเคลื่อนตัวไปมาอย่างไม่เป็นระเบียบ 
เราอาจการเคลื่อนที่ดังกล่าวว่าเป็นการเคลื่อนที่ความร้อน (thermal motion)

This line is in English.
\end{document}

新電腦現代 + TH Sarabun Chula 樣本

相關內容