![¿Hay alguna manera de destruir automáticamente todas las matemáticas en línea (pero solo verticalmente)?](https://rvso.com/image/449635/%C2%BFHay%20alguna%20manera%20de%20destruir%20autom%C3%A1ticamente%20todas%20las%20matem%C3%A1ticas%20en%20l%C3%ADnea%20(pero%20solo%20verticalmente)%3F.png)
Lo que dice en la lata.
En caso de que no esté lo suficientemente claro, lo que me gustaría es que $...$
se escriba como \smash{$...$}
, excepto que \smash
también afecta el espaciado horizontal (consulte la pregunta que vinculé a continuación) y me gustaría que solo afectara el espaciado vertical.
En otras palabras, me gustaría algún código de preámbulo que haga dos cosas:
- Hacer que
\smash
sólo afecte el espaciado vertical. - Trate todas las instancias de
$...$
como\smash{$...$}
.
(Esta preguntasolicita muy específicamente la destrucción vertical y horizontal de las matemáticas en línea, por lo que la mía no es un duplicado).
Respuesta1
De forma predeterminada, el ejemplo mostrado se ajustará al interlineado, por lo que no \smash
es necesario.
\documentclass{article}
\showoutput
\showboxdepth=3
\begin{document}
aaa bbb ccc ddd ee $\vec{E}=\vec{E}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\vec{E}=\vec{E}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\vec{E}=\vec{E}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\vec{E}=\vec{E}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\vec{E}=\vec{E}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\vec{E}=\vec{E}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\vec{E}=\vec{E}_0\,e^{ikz}$
\end{document}
produce
y el registro confirma \baselineskip
(en lugar de \lineskip
).
...\hbox(9.67221+1.49998)x345.0, glue set 0.34198 []
...\penalty 150
...\glue(\baselineskip) 0.8278
...\hbox(9.67221+1.49998)x345.0, glue set 0.45447 []
...\penalty 150
...\glue(\baselineskip) 0.8278
...\hbox(9.67221+1.49998)x345.0, glue set 9.86978fil []
Para una expresión más grande
\documentclass{article}
\showoutput
\showboxdepth=3
\begin{document}
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
\end{document}
Usted obtiene
y el registro confirma que TeX dejó de usar \baselineskip
:
...\hbox(10.17732+4.9484)x345.0, glue set 0.26582 []
...\penalty 150
...\glue(\lineskip) 1.0
...\hbox(10.17732+4.9484)x345.0, glue set 0.15062 []
...\glue(\lineskip) 1.0
...\hbox(10.17732+4.9484)x345.0, glue set 0.28621 []
...\penalty 150
...\glue(\lineskip) 1.0
...\hbox(10.17732+4.9484)x345.0, glue set 282.19075fil []
Puede configurarlo \lineskiplimit
para que se conserve el espacio de la línea base incluso si las líneas no encajan:
\documentclass{article}
\showoutput
\showboxdepth=3
\setlength\lineskiplimit{-\maxdimen}
\begin{document}
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
aaa bbb ccc ddd ee $\frac{X^2}{Y_3}=\frac{X^2}{Y_3}_0\,e^{ikz}$
\end{document}
Esto produce
y registrar
...\hbox(10.17732+4.9484)x345.0, glue set 0.26582 []
...\penalty 150
...\glue(\baselineskip) -3.12572
...\hbox(10.17732+4.9484)x345.0, glue set 0.15062 []
...\glue(\baselineskip) -3.12572
...\hbox(10.17732+4.9484)x345.0, glue set 0.28621 []
...\penalty 150
...\glue(\baselineskip) -3.12572
...\hbox(10.17732+4.9484)x345.0, glue set 282.19075fil []
Mostrando que el espaciado de la línea de base se conserva incluso si eso fuerza un espacio negativo entre líneas.
Sin embargo, la cura aquí es peor que el problema: el texto ilegible sobreimpreso es tipográficamente peor que el espacio entre líneas desigual.
Este es (creo) el efecto que querías, al pedir que \smash
se aplicara en todas partes, pero en la práctica es mejor no hacer esto y simplemente aplicarlo \smash
condicionalmente en lugares donde sabes que no hay sobreimpresión (porque un elemento alto en esta línea no está alineada con un descenso profundo en la línea de arriba para que pueda superponer los cuadros delimitadores sin superponer texto)
Respuesta2
Comentario adicional, provocado por algunos de los comentarios del OP.: Si su documento contiene una gran cantidad de material matemático en línea,¡No es que haya nada malo en eso!- es posible que desees hacerlo de forma preventivaaumentarEl valor de \baselineskip
. Si el valor predeterminado de \baselineskip
la fuente que emplea es "120% del tamaño de fuente nominal" y si el tamaño de fuente nominal es 10 puntos, puede ejecutar
\fontsize{10}{13}\selectfont
para el documento en su conjunto, a fin de evitar la mayoría, si no casi todos, los casos en los que \lineskip
sea necesario aumentar más allá de \baselineskip
. Seguramente el caso de \vec{E}
forzar un aumento \lineskip
ya no sería relevante.
La sugerencia de aumentar \baselineskip
preventivamente no es en modo alguno arbitraria ni tramposa. Por ejemplo, en el prefacio del libroMatemáticas Concretaspor Graham, Knuth y Patashnik, que (como era de esperar) contienemuchode material matemático en línea, la fuente de texto Concrete Roman (una variante "Egyptienne" de slab-serif de Computer Modern) y la fuente matemática "Euler": los autores discutieron que al aumentar el valor de \baselineskip
12pt a 13pt, inmediatamente se deshizo de casi todos los casos de matemáticas en línea que obligaron a un aumento en \lineskip
. Si una solución tipográfica basada en consideraciones matemáticas en línea es lo suficientemente buena para Knuth y sus coautores, es posible que desees ver si "funciona" para ti también, ¿verdad?
Por cierto, el \fontsize{10}{13}\selectfont
enfoque aumenta el valor de\baselineskip
en todos lados, incluso para elementos de documentos, como entornos similares, para los cuales no se necesita ni se desea tabular
ningún aumento . \baselinskip
Para mantener las tablas agradables y compactas, puede elegir, como alternativa a ejecutar \fontsize{10}{13}\selectfont
, cargar el setspace
paquete (con la opción nodisplayskipstretch
) y emitir la instrucción \setstretch{1.0833}
en el preámbulo. Obsérvese que un factor de 1,083 sigue siendo apenas un tercio de lo que \onehalfspacing
implicaría la directiva.
Aquí hay una solución basada en LuaLaTeX. Para activarlo, ejecute \SmashOn
; para desactivarlo ejecute \SmashOff
. Cuando \SmashOn
se ejecuta, la función Lua smash
se asigna a la process_input_buffer
devolución de llamada de LuaTeX, donde actúa como un preprocesador en el flujo de entrada, es decir, hace su trabajo.antesTeX inicia su propio procesamiento del material de entrada. Lo "cosa" que hace es reemplazar todas las instancias de $...$
, con \smash{$...%}
, tal como lo requiera.
Este enfoque tiene (al menos) tres limitaciones, la primera de las cuales debería ser la más relevante en la práctica.
Se supone que el material matemático en línea estodo en una línea-- no se permiten saltos de línea. Sin excepción.
No debe usarlo
$$
para iniciar y finalizar el modo matemático de visualización. Sin embargo, esto no debería ser una gran limitación, ya que nunca deberías usarlo$$
en un documento LaTeX. Ver¿Por qué es\[ ... \]
preferible$$ ... $$
?para una discusión más extensa sobre este tema.No se utiliza
\$
para mostrar símbolos de dólar. Si lo hace, asegúrese de ejecutar\SmashOff
antes de las instancias de\$
-- y\SmashOn
de reactivar la función Lua cuando sea necesario -- o reemplace las instancias de\$
con\textdollar
.
Dicho esto, no puedo imaginar un caso de uso convincente para querer destruir (verticalmente) todo el material matemático en línea. Si lo necesita, es casi seguro que algo esté haciendo mal. Si tiene instancias de e^{ikz}
en modo matemático en línea, considere reemplazarlas con \exp(ikz)
. Tus lectores te estarán realmente agradecidos si hicieras esto.
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{amsmath} % for '\dfrac' macro
\usepackage{lipsum} % filler text
\usepackage{luacode} % for 'luacode' env.
\begin{luacode}
function smash ( s )
return ( s:gsub ( "%b$$" , "\\smash{%1}" ) )
end
\end{luacode}
\newcommand\SmashOn{\directlua{luatexbase.add_to_callback (
"process_input_buffer", smash, "smash" )}}
\newcommand\SmashOff{\directlua{luatexbase.remove_from_callback (
"process_input_buffer", "smash" )}}
\begin{document}
\hrule % draw line to illustrate width of textblock
\lipsum[1][1-5] $\dfrac{\dfrac{v}{v}}{\dfrac{w}{x}}$ \lipsum[1][5-8]
\hrule
\SmashOn % activate the Lua function
\lipsum[1][1-5] $\dfrac{\dfrac{v}{v}}{\dfrac{w}{x}}$ \lipsum[1][5-8]
\hrule
\SmashOff % deactivate the Lua function
\lipsum[1][1-5] $\dfrac{\dfrac{v}{v}}{\dfrac{w}{x}}$ \lipsum[1][5-8]
\hrule
\end{document}