![LaTeX에서 다중 언어 환경 설정](https://rvso.com/image/476246/LaTeX%EC%97%90%EC%84%9C%20%EB%8B%A4%EC%A4%91%20%EC%96%B8%EC%96%B4%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95.png)
태국어와 영어, 각 언어마다 다른 글꼴이 포함된 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(또는 @cfr이 이미 게시한 Polyglossia)을 사용하여 이 작업을 수행할 수 있습니다. LuaLaTeX와 함께 Babel을 사용하는 것의 한 가지 장점은 태그나 환경이 필요 없이 입력 중인 언어를 자동으로 감지하고 그에 따라 글꼴을 변경할 수 있다는 것입니다.
이 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}