Configuración de entornos de múltiples idiomas en LaTeX

Configuración de entornos de múltiples idiomas en LaTeX

Supongamos que quiero un documento LaTeX con dos idiomas, es decir, tailandés e inglés, con fuentes diferentes para cada idioma. Digamos que quiero una fuente llamada'TH Sarabun Chula'' para tailandés mientras'Romano moderno latino'(la fuente predeterminada) permanece para el inglés. Normalmente lo que haría es añadirespecificación de fuenteypoliglosiapaquete, luego configure el tailandés como idioma principal y agregue el inglés como idioma adicional en\Efont; como sigue:

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

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

Este'TH Sarabun Chula'' la fuente es más pequeña en comparación conlatín romano modernoasí que hice una orden\lmResidencia en\Efontpara hacer el inglés más pequeño, eliminando así la diferencia de tamaño entre fuentes.

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

La mayoría de mis documentos utilizan el tailandés como idioma principal; así que siempre que quería usar el entorno inglés, usaba el\lmcomando y obtuve lo que deseaba. Aquí hay algunas partes del código de mis notas de clase que usan este comando.

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

Podría seguir con este método, pero es muy cansado escribir esto.\lm{...}cada vez.Me pregunto si hay alguna otra manera de poder realizar la transición entre dos (o varios) entornos de idiomas sin configurar comandos como el anterior.(simplemente escríbalos en el cuerpo y automáticamente cambiará el tipo de letra de inmediato).

Agradezco cualquier ayuda de antemano. Gracias.

Respuesta1

En el futuro, proporcione siempre código compilable en lugar de fragmentos. Esto hace que sea más fácil para las personas ayudar y es más probable que las respuestas sean aplicables a su documento real.

Puede escalar la fuente para inglés, lo cual es preferible a confiar, \smallya que se escalará correctamente en diferentes tamaños. ( \smallPor cierto, no requiere discusión).

Sin embargo, aún necesita decirle a LaTeX que cambie de idioma. No se trata sólo de cambiar las fuentes. Hasta donde yo sé, polyglossiano puedo detectar esto automáticamente, por lo que debes activar temporalmente el idioma alternativo. Puede crear \lmun atajo para \textenglish{}el cual hay una macro proporcionada por polyglossiapara cambiar, pero eso, por supuesto, no significa menos escritura.

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

Para reducir la necesidad de escribir, cree una combinación de teclas en el editor de su elección, de modo que no tenga que escribir manualmente \lm{}cada vez. Mejor aún, haga que se inserte \textenglish{}o lo que sea para que su código sea más transparente y su marcado semántico en lugar de estar basado en la apariencia.

No se proporcionó ninguna imagen debido a un error de Okular-on-X, pero el resultado se ve horrible con Noto Sans Thai y LM de todos modos. (Faltan caracteres tailandeses y pesos terriblemente desiguales). Por lo tanto, el código es puramente ilustrativo y no decorativo.

Respuesta2

Puede hacer esto con Babel (o con Polyglossia, como ya publicó @cfr). Una ventaja de usar Babel con LuaLaTeX es que puede detectar automáticamente el idioma en el que estás escribiendo y cambiar las fuentes en consecuencia, sin necesidad de etiquetas ni entornos.

Este MWE también escala todas las fuentes a la misma altura x, pero puede ajustar el tamaño de la fuente agregando una Scale=opción delante de cada fuente que lo necesite. También cargué unicode-math, pero fontspecy otros paquetes matemáticos también funcionarían.

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

Nueva Computadora Moderna + Muestra TH Sarabun Chula

información relacionada