Como obter \ Box como símbolo com XeLaTeX

Oct 17 2020

A fonte abaixo, quando processada com pdflatexproduz o símbolo matemático mostrado aqui:

Mas se eu processar a fonte com xelatex, recebo o erro:

./unitsquare.tex:26: LaTeX Error: Command \Box not provided in base LaTeX2e.

Pergunta: Como posso obter esse símbolo xelatexcom as fontes em uso para isso?

\documentclass{article}

\usepackage[T2A,T1]{fontenc}
\usepackage{amsmath}    % avoid \dddot clash
\usepackage{mathtools}  % avoid unicode-math clash
\usepackage{amsthm} % avoid openbox clash

\usepackage{iftex}
\ifTUTeX
  \usepackage{fontspec}
  \usepackage{unicode-math}
  \setmainfont{TeX Gyre Termes}[Scale=1.0]
  \defaultfontfeatures{Scale=MatchLowercase, Ligatures=TeX}
  \setmathfont{TeX Gyre Termes Math}
\else
  \usepackage{newtxtext}  
  \usepackage{newtxmath}
\fi

\usepackage{scalerel}

\newcommand{\unitsq}{\mathord{\scalerel*{\Box}{X}}}

\begin{document}

The unit square is denoted by $\unitsq$.

\end{document}

Relacionado: Como digitar esses "círculo" e "quadrado"?

Respostas

2 egreg Oct 17 2020 at 04:20

Você pode ter a impressão de que pode preparar um documento compilado com pdflatexe xelatex. Isso não é verdade, receio.

De qualquer forma, o símbolo que você provavelmente está procurando \lgwhtsquarecorresponde a U + 2B1C WHITE LARGE SQUARE, que infelizmente não está disponível no TeX Gyre Termes Math ou \mdlgwhtsquare, correspondendo a U + 25A1 WHITE SQUARE.

Se quiser dimensionar o símbolo até a altura de uma letra maiúscula, você pode usar graphicx(ou scalerel, se preferir).

\documentclass{article}

\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{graphicx}

\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Termes}
\setmathfont{TeX Gyre Termes Math}

\newcommand{\unitsq}{\text{\resizebox{!}{\fontcharht\font`X}{$\mdlgwhtsquare$}}}

\begin{document}

The unit square is denoted by $\unitsq$.

\end{document}

Uma tentativa de obter um documento “universal”:

\documentclass{article}
\usepackage{iftex}

\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{graphicx}

\iftutex
  \usepackage{fontspec}
  \usepackage{unicode-math}
  \setmainfont{TeX Gyre Termes}
  \setmathfont{TeX Gyre Termes Math}
\else
  \usepackage[T1]{fontenc}
  \usepackage{newtxtext,newtxmath}
\fi

\iftutex
  \newcommand{\unitsq}{\text{\resizebox{!}{\fontcharht\font`X}{$\mdlgwhtsquare$}}}
\else
  \newcommand{\unitsq}{\text{\resizebox{!}{\fontcharht\font`X}{$\Box$}}}
\fi

\begin{document}

The unit square is denoted by $\unitsq$.

\end{document}

Com pdflatexeu consigo

Por que o LaTeX hesita \Box? Porque você precisa amssymbdele, a menos que um pacote de fontes newtxmathforneça por si só os símbolos AMS. E não, unicode-mathnão fornece \Box. Talvez devesse ...

1 Davislor Oct 17 2020 at 10:47

Se você preferir ter um quadrado maior do que o TeX Gyre Termes Math, você pode pegar um emprestado de outra fonte matemática.

\documentclass{article}
\usepackage{unicode-math}

\setmainfont{TeX Gyre Termes}
\setmathfont{TeX Gyre Termes Math}
\setmathfont{STIX Two Math}[
  range=\lgwhtsquare,
  Scale=MatchUppercase ]
\newcommand\unitsq{\lgwhtsquare}

\begin{document}

The unit square is denoted by $\unitsq$.

\end{document}

Existem inúmeros quadrados brancos em unicode-math, incluindo \lgwhtsquare, \mdlgwhtsquare, \mdwhtsquare, \mdsmwhtsquaree \smwhtsquare. Se nenhum deles tiver o tamanho exato que você deseja, você pode até carregar qualquer um deles com uma Scale=opção ajustada .