Configurando ambientes de vários idiomas em LaTeX

Configurando ambientes de vários idiomas em LaTeX

Suponha que eu queira um documento LaTeX com dois idiomas, tailandês e inglês, com fontes diferentes para cada idioma. Digamos que eu queira uma fonte chamada'TH Sarabun Chula' para tailandês enquanto'Romano Moderno Latino'(a fonte padrão) permanece para o inglês. Normalmente, o que eu faria é adicionarfontespecepoliglossiapacote, defina o tailandês como idioma principal e adicione o inglês como idioma adicional em\Efont; do seguinte modo:

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

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

Esse'TH Sarabun Chula'a fonte é menor em comparação comLatina Moderna Romanaentão eu dei um comando\lmbaseado em\Efontpara diminuir o tamanho do inglês, eliminando assim a diferença de tamanho entre as fontes.

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

A maioria dos meus documentos usa o tailandês como idioma principal; então sempre que eu quisesse usar o ambiente inglês, eu usaria o\lmcomando e consegui o que desejava. Aqui estão algumas partes do código das minhas notas de aula que usam este comando.

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

Eu poderia continuar com esse método, mas é tão cansativo escrever isso\lm{...}toda vez.Gostaria de saber se existe alguma outra maneira de fazer a transição entre dois (ou vários) ambientes de linguagem sem definir comandos como os acima.(basta digitá-los no corpo e a fonte mudará automaticamente imediatamente.)

Agradeço qualquer ajuda antecipadamente. Obrigado.

Responder1

No futuro, forneça sempre código compilável em vez de trechos. Isso torna mais fácil para as pessoas ajudarem e é mais provável que as respostas sejam aplicáveis ​​ao seu documento real.

Você pode dimensionar a fonte para o inglês, o que é preferível a confiar, \smallpois ela será dimensionada corretamente em tamanhos diferentes. ( \smalla propósito, não aceita argumentos.)

No entanto, você ainda precisa dizer ao LaTeX para mudar de idioma. Não se trata apenas de alterar as fontes. Pelo que eu sei, polyglossianão consigo detectar isso automaticamente, então você precisa ativar temporariamente o idioma alternativo. Você pode criar \lmum atalho para \textenglish{}o qual é uma macro fornecida por polyglossiapara alternar, mas isso, é claro, não significa menos digitação.

\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 reduzir a digitação, crie uma combinação de teclas no editor de sua preferência, para que você não precise escrever manualmente \lm{}todas as vezes. Melhor ainda, insira-o \textenglish{}ou algo assim, para que seu código seja mais transparente e sua marcação seja semântica, em vez de baseada na aparência.

Nenhuma imagem foi fornecida devido ao bug do Okular-on-X, mas a saída parece horrível com Noto Sans Thai e LM de qualquer maneira. (Caracteres tailandeses ausentes e pesos terrivelmente incompatíveis.) Portanto, o código é puramente ilustrativo e não decorativo.

Responder2

Você pode fazer isso com o Babel (ou com o Polyglossia, como o @cfr já postou). Uma vantagem de usar o Babel com LuaLaTeX é que ele pode detectar automaticamente o idioma que você está digitando e alterar as fontes de acordo, sem necessidade de tags ou ambientes.

Este MWE também dimensiona todas as fontes para a mesma altura x, mas você pode ajustar o tamanho da fonte adicionando uma Scale=opção na frente de cada fonte que precisa dela. Eu também carreguei o unicode-math, mas fontspecoutros pacotes matemáticos também funcionariam.

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

Nova amostra de computador moderno + TH Sarabun Chula

informação relacionada