
Costumo usar nomes descritivos para predicados, termos e funções. No entanto, devido à falta de kerning, eles não parecem bonitos.
Por exemplo
$offer = surface \times force(now)$
renderiza como
Assim, para evitá-lo, use \mathit
.
$\mathit{offer = surface \times force(now)}$
que renderiza como
que, sem dúvida, parece melhor e é mais fácil de ler.
Para evitar digitar \mathit
m, defini
\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
e
\DeclareMathSymbol{a}{\mathalpha}{italics}{`a}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`z}
\DeclareMathSymbol{A}{\mathalpha}{italics}{`A}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`Z}
Questões)
Esta é a maneira "correta" de fazer isso?
Quais são as desvantagens/desvantagens desta abordagem? (Posso usar \mathnormal
para voltar ao comportamento padrão, e sei disso, por exemplo, para o produto de f
e i
tenho que usar f{}i
para evitar a ligadura).
Responder1
Depende de vários fatores. Se suas fórmulas matemáticas foremtodosconstruído dessa forma, então você pode ter justificativa para alterar os códigos matemáticos das letras, embora eu recomende que você não faça isso.
Prefira uma marcação semântica: identificadores multiletras denotam variáveis ou funções; defina dois comandos, diga \var
e \func
digite sua fórmula como
\[
\var{offer}=\var{surface}\cdot\func{force}(\var{now})
\]
(não use \times
, por favor!). Agora você tem a liberdade de escolher qualquer representação para variáveis e funções que precisar, por exemplo
\newcommand{\var}[1]{\mathit{#1}}
\newcommand{\func}[1]{\mathit{#1}}
Quando seu supervisor ou editor de periódico lhe disser “Legal, mas as funções devem ser escritas em letras verticais”, você responderá “Espere um minuto”, mude a segunda linha para
\newcommand{\func}[1]{\mathrm{#1}}
e recompilar. Seria o mesmo com a mudança nos códigos matemáticos?
É mais difícil digitar? Acho que não, principalmente se você for um especialista em Emacs capaz de definir alguns atalhos.
Alterar o código matemático de todas as letras é bastante fácil, pois o código é repetitivo. Não esqueça de declarar novamente \mathit
com \DeclareSymbolFontAlphabet
para não desperdiçar uma família matemática.
\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}
\makeatletter
\count@=`a \advance\count@\m@ne
\@whilenum{\count@<`z}\do{%
\advance\count@\@ne
\begingroup\lccode`A=\count@
\lowercase{\endgroup
\DeclareMathSymbol{A}{\mathalpha}{italics}{`A}%
}%
}
\count@=`A \advance\count@\m@ne
\@whilenum{\count@<`Z}\do{%
\advance\count@\@ne
\begingroup\lccode`A=\count@
\lowercase{\endgroup
\DeclareMathSymbol{A}{\mathalpha}{italics}{`A}%
}%
}
\makeatother
Os loops podem ser simplificados com expl3
:
\usepackage{expl3}
\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}
\ExplSyntaxOn
\int_step_inline:nnnn { `A } { 1 } { `Z }
{
\group_begin:
\char_set_lccode:nn { `A } { #1 }
\char_set_lccode:nn { `B } { #1 + 32 }
\tl_to_lowercase:n
{
\group_end:
\DeclareMathSymbol{A}{\mathalpha}{italics}{`A}
\DeclareMathSymbol{B}{\mathalpha}{italics}{`B}
}
}
\ExplSyntaxOff
O principal problema, que exige o uso do \lowercase
truque, é que ele é a única maneira de gerar um token de caractere conhecendo seu código de caractere.
Com uma versão recente expl3
(lançada após 09/09/2015), pode-se evitar o \lowercase
truque usando \char_generate:nn
.
\documentclass{article}
\usepackage{expl3}
\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}
\ExplSyntaxOn
\int_step_inline:nnnn { `A } { 1 } { `Z }
{
\exp_args:Nf \DeclareMathSymbol{\char_generate:nn{#1}{11}}{\mathalpha}{italics}{#1}
}
\int_step_inline:nnnn { `a } { 1 } { `z }
{
\exp_args:Nf \DeclareMathSymbol{\char_generate:nn{#1}{11}}{\mathalpha}{italics}{#1}
}
\ExplSyntaxOff
\begin{document}
\[
offer=surface\cdot force(now)
\]
\end{document}
Responder2
A razão pela qual a reatribuição global das letras no modo matemático não é uma boa ideia foi mencionada em outra resposta e comentários. Mas se você realmente precisa disso, você pode fazer:
\everymath{\it}\everydisplay{\it}
no início do documento. Se precisar manter os números no estilo romano, você pode definir:
\def\mathcodes#1{\mathcode`#1=\numexpr\mathcode`#1-"7000\relax
\ifx#10\else\expandafter\mathcodes\fi}
\mathcodes1234567890
Isto significa, por exemplo:
\documentclass[12pt]{article}
\everymath{\it}\everydisplay{\it}
\def\mathcodes#1{\mathcode`#1=\numexpr\mathcode`#1-"7000\relax
\ifx#10\else\expandafter\mathcodes\fi}
\mathcodes1234567890
\begin{document}
$offer = surface \times force(now) + 1$
\end{document}
Se você estiver usando TeX simples, poderá usar \itvariables
o comando fornecido após \input ams-math
ou \input opmac
. Este comando define os códigos matemáticos de todas as letras para a família matemática do texto em itálico (como padrão). Por exemplo:
\input ams-math \itvariables
$offer = surface \times force(now) + 2$
\bye
Responder3
Eu concordaria com egreg que é muito melhor fazer com que a marcação corresponda ao significado aqui e marcar cada identificador separadamente. A marcação matemática no TeX, assim como as fontes padrão, são projetadas com base na ideia de que letras adjacentes são variáveis separadas, normalmente com multiplicação implícita ou operadores de concatenação.
No entanto, se você não está convencido e deseja usar como padrão a fonte do texto em itálico, não há necessidade de alocar uma nova fonte matemática para isso, ela já está configurada para uso, \mathit
bastando fazê-la escapar do agrupamento implícito que isso \mathit
implica.
\documentclass{article}
\let\v\mathit
\begin{document}
$\mathit{offer = surface \times force(now)}$
$\v{offer} = \v{surface} \times \v{force}(\v{now})$%%%USE THIS
\everymath{\mathit{\xdef\tmp{\fam\the\fam\relax}}\tmp}
$offer = surface \times force(now)$
\end{document}