모든 인라인 수학을 자동으로 부수는 방법이 있습니까(단, 수직으로만 가능)?

모든 인라인 수학을 자동으로 부수는 방법이 있습니까(단, 수직으로만 가능)?

주석에 적혀 있는 내용입니다.

충분히 명확하지 않은 경우, 내가 원하는 것은 가로 간격 $...$에도 영향을 미치고(아래에 링크된 질문 \smash{$...$}참조 \smash) 세로 간격에만 영향을 미치고 싶습니다.

즉, 저는 두 가지 작업을 수행하는 프리앰블 코드를 원합니다.

  1. \smash수직 간격에만 영향을 줍니다 .
  2. $...$의 모든 인스턴스를 로 처리합니다 \smash{$...$}.

(이 질문매우 구체적으로 인라인 수학의 수직 및 수평 스매싱을 모두 요청하므로 내 것은 그것과 중복되지 않습니다.)

답변1

기본적으로 표시된 예는 줄 간격에 맞으므로 \smash필요하지 않습니다.

\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}

생산하다

여기에 이미지 설명을 입력하세요

로그 확인 \baselineskip(이 아닌 \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 []

더 큰 표현을 위해

\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}

당신은 얻는다

여기에 이미지 설명을 입력하세요

로그는 TeX가 다음을 사용하여 포기했음을 확인합니다 \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 []

\lineskiplimit선이 맞지 않더라도 기준선 공간이 유지되도록 설정할 수 있습니다 .

\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}

이는

여기에 이미지 설명을 입력하세요

그리고 로그

...\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 []

줄 사이에 음의 공간이 강제로 적용되더라도 기준선 간격이 유지된다는 것을 보여줍니다.

여기서 해결 방법은 문제보다 나쁩니다. 과도하게 인쇄되어 읽을 수 없는 텍스트는 고르지 못한 줄 간격보다 인쇄상으로 더 나쁩니다.

이것은 (내 생각에) 당신이 원했던 효과입니다. \smash모든 곳에 적용하도록 요청했지만 실제로는 이렇게 하지 않고 \smash중복 인쇄가 없는 곳에서 조건부로 적용하는 것이 좋습니다(높은 항목이 있기 때문에). 이 줄은 텍스트가 겹치지 않고 경계 상자가 겹칠 수 있도록 위 줄의 깊은 디센더와 정렬되지 않습니다.)

답변2

OP의 일부 의견에 의해 촉발된 추가 의견: 문서에 인라인 수학 자료가 많이 포함되어 있는 경우 --그게 문제가 있다는 건 아니야!-- 선제적으로 원할 수도 있습니다.증가하다의 가치 \baselineskip. \baselineskip사용하는 글꼴의 기본값이 "공칭 글꼴 크기의 120%"이고 공칭 글꼴 크기가 10pt인 경우 다음을 실행할 수 있습니다.

\fontsize{10}{13}\selectfont

\lineskip문서 전체에 대해 거의 전부 는 아니더라도 대부분의 인스턴스를 \baselineskip. 확실히, \vec{E}증가를 강요하는 경우는 \lineskip더 이상 관련이 없습니다.

선제적으로 늘리자는 제안은 \baselineskip결코 임의적이거나 해킹적인 것이 아닙니다. 예를 들어 책의 서문에서구체적인 수학Graham, Knuth 및 Patashnik 저 - (놀랍지도 않게) 다음 내용이 포함되어 있습니다.많이인라인 수학 자료, Concrete Roman 텍스트 글꼴(Computer Modern의 슬랩-세리프 변형의 "Egyptienne") 및 "Euler" 수학 글꼴 - 저자는 값을 \baselineskip12pt에서 13pt로 늘리면 즉시 . \lineskip​인라인 수학 고려 사항에 의해 유발된 타이포그래피 솔루션이 Knuth와 그의 공동 저자에게 충분하다면 그것이 당신에게도 "작동"하는지 확인하고 싶을 수도 있습니다.

그건 그렇고, \fontsize{10}{13}\selectfont접근 방식은 가치를 증가시킵니다.\baselineskip 어디에나tabular, 증가가 \baselinskip필요하지 않거나 바람직하지 않은 환경 과 같은 문서 요소를 포함합니다 . 테이블을 깔끔하고 간결하게 유지하려면 실행하는 대신 옵션을 사용하여 패키지를 \fontsize{10}{13}\selectfont로드 하고 프리앰블에서 명령을 실행하도록 선택할 수 있습니다. 1.083이라는 요소는 여전히 지침에 수반되는 것의 1/3에 불과합니다 .setspacenodisplayskipstretch\setstretch{1.0833}\onehalfspacing


LuaLaTeX 기반 솔루션은 다음과 같습니다. 활성화하려면 \SmashOn; 비활성화하려면 를 실행하세요 \SmashOff. 실행 되면 \SmashOnLua 기능이 smashLuaTeX의 기능에 할당됩니다.process_input_buffer 콜백에 할당되어 입력 스트림에서 전처리기 역할을 합니다. 즉, 해당 작업을 수행합니다.~ 전에TeX는 입력 자료에 대한 자체 처리를 시작합니다. 그것이 수행하는 "작업"은 필요한 대로 의 모든 인스턴스를 $...$으로 바꾸는 것입니다.\smash{$...%}

이 접근 방식에는 (적어도) 세 가지 제한 사항이 있으며, 그 중 첫 번째 제한 사항이 실제로 가장 관련성이 높습니다.

  1. 인라인 수학 자료는 다음과 같이 가정됩니다.모두 한 줄에-- 줄 바꿈은 허용되지 않습니다. 예외 없음.

  2. $$디스플레이 수학 모드를 시작하고 종료하는 데 사용하면 안 됩니다 . 하지만 절대 사용해서는 안 되므로 이는 전혀 큰 제약이 되어서는 안 됩니다.$$ . 그러나 LaTeX 문서에서는 . 보다\[ ... \]바람직합니까?$$ ... $$ 됩니까 ?이 주제에 대한 더 긴 토론을 원하시면.

  3. \$달러 기호를 표시하는 데는 사용하지 않습니다 . 그렇게 하는 경우 -- \SmashOff인스턴스 이전에 실행 하고 필요한 경우 Lua 기능을 다시 활성화하거나 -- 인스턴스를 로 교체 하세요 .\$\SmashOn\$\textdollar

즉, 모든 인라인 수학 자료를 (수직으로) 부수려는 강력한 사용 사례를 상상할 수 없습니다. 필요한 경우 거의 확실히 뭔가 잘못하고 있는 것입니다. e^{ikz}인라인 수학 모드에 의 인스턴스가 있는 경우 이를 로 바꾸는 것이 좋습니다 \exp(ikz). 당신이 이렇게 했다면 독자들은 실제로 당신에게 감사할 것입니다.


여기에 이미지 설명을 입력하세요

% !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}

관련 정보