Настройка многоязыковой среды в LaTeX

Настройка многоязыковой среды в LaTeX

Предположим, я хочу документ LaTeX с двумя языками, то есть тайским и английским, с разными шрифтами для каждого языка. Допустим, я хочу шрифт с именем'TH Сарабун Чула' для тайского в то время как«Латинский современный римский»(шрифт по умолчанию) остается для английского. Обычно я добавляюспецификация шрифтаиполиглоссияпакет, затем установите тайский язык в качестве основного языка и добавьте английский язык в качестве дополнительного языка в\Eшрифт; следующее:

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

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

Этот'TH Сарабун Чула' шрифт меньше по сравнению слатинский современный римскийпоэтому я отдал команду\лмосновано на\Eшрифтсделать английский шрифт меньше, тем самым устранив разницу в размере между шрифтами.

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

В большинстве моих документов тайский язык является основным; поэтому, когда бы мне ни понадобилось использовать английскую среду, я бы использовал\лмcommand и я получил то, что хотел. Вот некоторые части кода для моих лекционных заметок, которые используют эту команду.

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

Я мог бы продолжать использовать этот метод, но писать это так утомительно.\лм{...}каждый раз.Интересно, есть ли другой способ переключения между двумя (или несколькими) языковыми средами без установки команд, подобных приведенным выше.(просто введите их в текст, и шрифт сразу же автоматически изменится.)

Заранее признателен за любую помощь. Спасибо.

решение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{}каждый раз. А еще лучше, сделайте так, чтобы это было insert \textenglish{}или что-то еще, чтобы ваш код был более прозрачным, а ваша разметка была семантической, а не основанной на внешнем виде.

Изображение не предоставлено из-за ошибки Okular-on-X, но вывод в любом случае выглядит ужасно с Noto Sans Thai и LM. (Отсутствуют тайские символы и ужасно несоответствуют начертания.) Так что код носит чисто иллюстративный, а не декоративный характер.

решение2

Вы можете сделать это с Babel (или с Polyglossia, как уже написал @cfr). Одним из преимуществ использования Babel с LuaLaTeX является то, что он может автоматически определять язык, на котором вы печатаете, и соответствующим образом менять шрифты, без необходимости использования каких-либо тегов или сред.

Этот MWE также масштабирует все шрифты до одинаковой x-высоты, но вы можете настроить размер шрифта, добавив Scale=опцию перед каждым шрифтом, которому это нужно. Я также загрузил unicode-math, но fontspecи другие математические пакеты тоже будут работать.

\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}

Новый компьютер Modern + образец TH Sarabun Chula

Связанный контент