A menudo utilizo nombres descriptivos para predicados, términos y funciones. Sin embargo, debido a la falta de interletraje, no se ven bien.
Por ejemplo
$offer = surface \times force(now)$
se representa como
Por lo tanto, para evitarlo, utilice \mathit
.
$\mathit{offer = surface \times force(now)}$
que se presenta como
que, posiblemente, se ve mejor y es más fácil de leer.
Para evitar escribir \mathit
m, definí
\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
y
\DeclareMathSymbol{a}{\mathalpha}{italics}{`a}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`z}
\DeclareMathSymbol{A}{\mathalpha}{italics}{`A}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`Z}
Preguntas)
¿Es esta la forma "correcta" de hacer esto?
¿Cuáles son las desventajas/inconvenientes de este enfoque? (Puedo usar \mathnormal
para volver al comportamiento estándar, y sé que, por ejemplo, para el producto de f
y i
tengo que usar f{}i
para evitar la ligadura).
Respuesta1
Depende de varios factores. Si tus fórmulas matemáticas sontodoconstruido así, entonces podría estar justificado cambiar los códigos matemáticos de las letras, aunque le recomiendo que no lo haga.
Prefiere un marcado semántico: los identificadores de varias letras denotan variables o funciones; Defina dos comandos, diga \var
y \func
escriba su fórmula como
\[
\var{offer}=\var{surface}\cdot\func{force}(\var{now})
\]
(¡no uses \times
, por favor!). Ahora tienes la libertad de elegir cualquier representación para variables y funciones que necesites, por ejemplo
\newcommand{\var}[1]{\mathit{#1}}
\newcommand{\func}[1]{\mathit{#1}}
Cuando su supervisor o el editor de una revista le diga "Bien, pero las funciones deben escribirse en letras verticales", usted responderá "Espera un minuto", cambia la segunda línea a
\newcommand{\func}[1]{\mathrm{#1}}
y recompilar. ¿Pasaría lo mismo con el cambio de los códigos matemáticos?
¿Es más difícil escribir? No lo creo, especialmente si eres un experto en Emacs y puedes definir un par de taquigrafías.
Cambiar el código matemático de todas las letras es bastante sencillo, ya que el código es repetitivo. No olvide volver a declarar \mathit
con \DeclareSymbolFontAlphabet
para no desperdiciar una familia de matemáticas.
\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
Los bucles se pueden simplificar con 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
El principal problema que requiere utilizar el \lowercase
truco es que es la única forma de generar un token de carácter conociendo su código de carácter.
Con una versión reciente de expl3
(publicada después del 9 de septiembre de 2015), se puede evitar el \lowercase
truco 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}
Respuesta2
La razón por la cual la reasignación global de letras en modo matemático no es una buena idea se mencionó en otra respuesta y comentarios. Pero si realmente necesitas esto, puedes hacer:
\everymath{\it}\everydisplay{\it}
al inicio del documento. Si necesita mantener los números en estilo romano, puede configurar:
\def\mathcodes#1{\mathcode`#1=\numexpr\mathcode`#1-"7000\relax
\ifx#10\else\expandafter\mathcodes\fi}
\mathcodes1234567890
Esto significa, por ejemplo:
\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}
Si está utilizando TeX simple, puede usar \itvariables
el comando que se proporciona después de \input ams-math
o \input opmac
. Este comando establece códigos matemáticos de todas las letras en la familia matemática de texto en cursiva (por defecto). Por ejemplo:
\input ams-math \itvariables
$offer = surface \times force(now) + 2$
\bye
Respuesta3
Estoy de acuerdo con egreg en que es mucho mejor hacer que el marcado coincida con el significado aquí y marcar cada identificador por separado. El marcado matemático en TeX, así como las fuentes predeterminadas, están diseñados sobre la idea de que las letras adyacentes son variables separadas, generalmente con operadores implícitos de multiplicación o concatenación.
Sin embargo, si no está convencido y desea utilizar de forma predeterminada la fuente de texto en cursiva, no es necesario asignar una nueva fuente matemática para esto, ya está configurada para su uso, \mathit
solo necesita hacer que escape de la agrupación implícita que \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}