multilingual — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited multilingual (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
| Document needs | Engine | Use |
|---|---|---|
| Latin scripts only (English, French, German, Spanish, …) | pdflatex | babel |
| Latin scripts only, but want OTF fonts | xelatex / lualatex | babel (modern) OR polyglossia |
| Any non-Latin script (Arabic, Hebrew, CJK, Devanagari, …) | xelatex / lualatex | polyglossia (required) |
| Mixed Latin + RTL | xelatex / lualatex | polyglossia + bidi/luabidi |
| Maximum Indic shaping fidelity | lualatex | polyglossia + LuaTeX HarfBuzz |
Rule of thumb: babel for pdflatex+Latin; polyglossia for xelatex/lualatex with anything beyond Latin. polyglossia is XeLaTeX/LuaLaTeX-only.
Source: polyglossia manual at https://texdoc.org/serve/polyglossia.pdf/0.
\usepackage[main=english, french, german, spanish]{babel}
% In body:
\selectlanguage{french} % switch zone
Bonjour le monde.
\foreignlanguage{german}{Hallo Welt} % inlinemain= sets the document language. Hyphenation patterns load automatically per language. Babel adapts captions ("Figure"→"Figura"), date formats, quote styles.
Source: https://ctan.org/pkg/babel.
\usepackage{fontspec}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguages{french, arabic, hindi}
% Per-script font:
\newfontfamily\arabicfont[Script=Arabic]{Amiri}
\newfontfamily\hindifont[Script=Devanagari]{Noto Serif Devanagari}
% In body — same commands as babel:
\selectlanguage{french}
\foreignlanguage{arabic}{مرحبا بالعالم}Pitfalls (polyglossia):
\usepackage[french]{polyglossia} is wrong; use \setotherlanguages{...}.\setdefaultlanguage[variant=british]{english}.Source: https://ctan.org/pkg/polyglossia · polyglossia PDF (linked above).
Recommended stack: LuaLaTeX + polyglossia + fontspec + luabidi (auto).
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{arabic}
\newfontfamily\arabicfont[Script=Arabic]{Amiri} % free, traditional Naskh
\begin{document}
English paragraph here.
\begin{arabic}
هذا نص عربي.
\end{arabic}
\end{document}Compile: lualatex main.tex or latexmk -pdflua main.tex.
Recommended Arabic fonts (free, Unicode, well-shaped): Amiri (Khaled Hosny), Scheherazade New (SIL), Noto Naskh Arabic, Reem Kufi (display only). Hebrew: SBL Hebrew, Ezra SIL, David CLM, Frank Ruhl Hofshi, Noto Serif Hebrew. Persian: same as Arabic plus XB Niloofar, Vazirmatn.
Mixed direction: inside an RTL paragraph, wrap LTR fragments with \foreignlanguage{english}{...} or \LR{...} (and \RL{...} for the inverse). Without this, Latin numbers, punctuation, and English words drift visually.
XeLaTeX path: same packages but uses bidi (auto-loaded). LuaLaTeX is generally smoother for bidi due to TeX engine's native bi-directional layout.
Sources: https://ctan.org/pkg/bidi, https://ctan.org/pkg/luabidi, polyglossia RTL chapter.
Chinese (XeLaTeX):
\documentclass[UTF8]{ctexart} % loads xeCJK + Chinese class defaults
\begin{document}
你好,世界。Mixed Chinese/English works automatically.
\end{document}ctex is the canonical Chinese-typesetting bundle; it ships ctexart, ctexrep, ctexbook classes. By default uses XeLaTeX; can be pointed at LuaLaTeX with \documentclass[lua]{ctexart} (newer ctex).
Japanese (LuaLaTeX):
\documentclass{article}
\usepackage{luatexja-fontspec}
\setmainjfont{Noto Serif CJK JP}
\setsansjfont{Noto Sans CJK JP}
\begin{document}
こんにちは、世界。Mixed Japanese/English.
\end{document}Compile: lualatex (luatexja is LuaLaTeX-only).
Korean (LuaLaTeX similar): replace fonts with Noto Serif CJK KR etc.
Generic CJK on XeLaTeX without ctex/luatexja:
\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK SC}
\setCJKsansfont{Noto Sans CJK SC}
\setCJKmonofont{Noto Sans Mono CJK SC}Recommended fonts:
Pitfalls:
xeCJK is "Fandol" (Chinese) — inappropriate for JP/KR. Always set explicitly per language.\linespread{1.3} or so — defaults are too tight.xeCJK after fontspec after polyglossia (if used).Sources: https://ctan.org/pkg/xecjk, https://ctan.org/pkg/ctex, https://ctan.org/pkg/luatexja.
Recommended stack: LuaLaTeX + polyglossia + fontspec + Noto fonts.
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{hindi}
\newfontfamily\hindifont[Script=Devanagari]{Noto Serif Devanagari}
\begin{document}
Hello in Hindi: \texthindi{नमस्ते दुनिया}.
\end{document}Script=Devanagari (or Script=Tamil, Script=Bengali, etc.) is required so the OpenType shaper builds conjuncts and half-forms. Without it, glyph shapes are right but ligature placement breaks.
Recommended fonts: Noto Serif/Sans for {Devanagari, Tamil, Thai, Bengali, Malayalam, Kannada, Telugu}; Sahadeva and Annapurna SIL for Sanskrit.
polyglossia language names: hindi, marathi, sanskrit, tamil, thai, malayalam, kannada, telugu, bengali.
Pitfalls:
Script=Devanagari (or equivalent) on \newfontfamily.Sources: polyglossia manual sections on Indic scripts.
When the document has multiple scripts, ensure hyphenation patterns are loaded for each:
\setotherlanguage{...} call.If a language is set but hyphenation is wrong, check texlive-lang-<lang> is installed (TeX Live splits language patterns into per-language packages).
Language-specific options (variants, hyphenation overrides, font features for a specific script) — invoke /academic-latex:docs-lookup with the question. polyglossia options especially are version-sensitive; do not guess.
2026-05-09 — polyglossia, babel, xeCJK, ctex, luatexja, bidi/luabidi at CTAN; font recommendations from Google Noto and SIL catalog.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.