$$...$$
LaTeX를 수정하여 good old가 다음과 같이 동작하도록 하는 것이 가능합니까? \[...\]
(이것은 LaTeX가 LaTeX와 동의어가 되어야 함을 의미합니다.)
경우 예:LaTeX3 개발자님께, 이것을 LaTeX3에 통합해 주세요! (나는 당신이 실제로 이것을 할 것이라고 정말로 믿지 않습니다.)
MWE(이 경우에는 실제로 사용되지 않더라도):
\documentclass{article}
\begin{document}
I've forgotten we're not in the plain \TeX\ world anymore:
$$
x = 3\alpha^2 + \beta
= \int f\, d\mu.
$$
\end{document}
답변1
귀하의 과제에 대한 LuaLaTeX 기반 솔루션은 다음과 같습니다.
Lua 함수는 replace_ddollar
실제로 기본 요소를 재정의하지 않습니다 $$
. 대신 매우 초기 처리 단계에서 입력 텍스트를 검색합니다(~ 전에TeX의 "눈"은 무엇이든 하기 시작합니다.) 그리고 의 모든 인스턴스를 또는 $$
로 대체합니다 . Lua 코드는 다음과 같은 코드를 처리할 수 있습니다.\[
\]
$$a^2+b^2=c^2$$
즉,일치하는 쌍$$
방정식의 일반적인 입력 형식뿐만 아니라 한 줄의 지시문도 포함됩니다 .
$$
E = mc^2
$$
주목: 바로 $$
그렇기 때문이죠~ 아니다$$
이 접근 방식으로 재정의되면 문서에 다음과 같은 인스턴스가 포함되어 있으면 문제가 발생할 수 있습니다.~ 아니다디스플레이 수학 모드를 시작하거나 종료하는 데 사용됩니다. 그러한 경우의 몇 가지 예는 다음과 같습니다.
$$
주석에서 일치하지 않는 인스턴스 (comment
-유사 환경 포함)$$
축어적 환경 의 인스턴스- 지시어
$$
에 포함된 URL 문자열 의 인스턴스\url{...}
(아직 문제가 발생할 가능성이 더 많다고 확신합니다.) 문서에 그러한 인스턴스가 있는 경우를 대비해 아래 코드는 \ReplaceDoubleDollarOff
Lua 함수의 작동을 끄는 매크로를 제공합니다 replace_ddollar
. \ReplaceDoubleDollarOn
Lua 기능을 다시 켜는 이라는 동반 매크로도 있습니다 .
디스플레이 수학 모드를 시작하거나 종료할 의도가 없는 입력 라인 의 단일 인스턴스 인스턴스로 인한 위험은 디스플레이 수학 모드를 시작하거나 종료해야 하는 유일한 인스턴스가 바로 그 순간에 발생한다고 $$
가정할 수 있다면 크게 줄어들 수 있습니다. $$
줄 시작: 이 가정이 유효하다면 두 번째 string.gsub
함수 , "%$%$"
에서 검색 문자열을 로 줄이면 됩니다 "^%$%$"
. 문자 는 줄의 맨 처음에 일치하는 ^
경우에만 일치가 발생할 수 있음을 나타냅니다 . [루아 코드에 단순한 내용이 아닌 다음 내용이 $$
포함된 이유가 궁금하신 경우 : 루아에서 문자는 "특별"하므로 실제 기호를 표시하려면 (기호 앞에 기호를 추가하여) 이스케이프해야 합니다 .]%$%$
$$
$
%
$
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
in_display_math = false
function replace_ddollar ( line )
line = string.gsub ( line , "%$%$(.-)%$%$" , "\\[ %1 \\]" )
line = string.gsub ( line , "%$%$" , function (x)
if not in_display_math then
in_display_math = true
return "\\["
else
in_display_math = false
return "\\]"
end
end )
return line
end
\end{luacode}
\newcommand\ReplaceDoubleDollarOn{%
\directlua{ luatexbase.add_to_callback(
"process_input_buffer", replace_ddollar, "replace_ddollar" )}}
\newcommand\ReplaceDoubleDollarOff{%
\directlua{ luatexbase.remove_from_callback(
"process_input_buffer", "replace_ddollar" )}}
\ReplaceDoubleDollarOn % Replacement function turned on
\usepackage{url} % just for this example
\begin{document}
$$
E = mc^2
$$
$$a^2+b^2=c^2$$ $$d^2+e^2=f^2$$ % Aside: I do not endorse this coding style!
$$
x = 3\alpha^2 + \beta = \int f\, d\mu.
$$
% Turn off replacement of double-dollars
\ReplaceDoubleDollarOff
\url{A_URL_string_with_a_$$_and_$$$$_and_another_$$}
% Turn replacement of double-dollars back on
\ReplaceDoubleDollarOn
$$ e^{i\pi}-1=0 $$
$$
1+1=2
$$
\end{document}
답변2
이것은 의심할 바 없이 논란의 여지가 있는 답변이 될 것입니다. 그러나 여기에는 아무 것도 없습니다! 1
당신이 요구하는 것은 전제에 결함이 있습니다. LaTeX가 아닌 TeX $$...$$
처럼 동작하도록 수정하려면 수정해야 합니다. \[...\]
LaTeX는 TeX 정의의 동작을 $$
전혀 변경하지 않습니다.
이는 일부 모드 확인을 수행하고 향상된 오류 보고를 제공하며 표시가 단락 시작 부분에 발생하는 경우 일부 간격을 변경하기 위한 \[...\]
래퍼입니다 . $$...$$
소스 및/또는 허용된 답변에서 전체 정의를 볼 수 있습니다.$$, \[, 정렬, 방정식 및 표시 수학의 차이점은 무엇입니까?.
따라서 LaTeX는 Plain TeX 기본을 가져와서 추정된 대다수 사용자의 사용 사례를 포괄하도록 확장했습니다. 이는 LaTeX에서 제공하는 다른 매크로와 다르지 않습니다. TeX에서 제공하는 빌딩 블록을 확장한 것입니다.
제 생각에는 의 동작을 원하면 \[...\]
간단히 를 사용하세요 \[...\]
. 재정의는 $$
기술적으로 가능할 수도 있지만 원하는 동작을 정의하는 바로 그 명령이 내부적으로 사용하기 때문에 쉽지 않습니다. 또한 이전 기능에 의존하는 문서(때때로 디자인이 잘못되었지만 그럼에도 불구하고)가 얼마나 많은지 알 수 없습니다.
답변3
이것은 아마도 가장 쉬운 구현일 것입니다. 그래도 스트레스 받고 싶다~ 아니다이와 같은 코드를 사용합니다. 처음부터 잘못되거나 더 나쁘게 됩니다. 어느 시점에서 문서의 내용을 변경하려고 하면 누락된 항목 \item
(또는 수학 모드와 관련 없는 다른 항목)이 있다는 오류가 발생합니다. 모든 것이 고장나기 때문에 전체 문서를 다시 코딩해야 합니다.
\documentclass{article}
%\usepackage[fleqn]{amsmath} % also works for instance
\let\dollar=$ \catcode`$=\active
\makeatletter
\protected\def${\@ifnextchar${\@doubledollareqn}{\@singledollareqn}}
\def\@singledollareqn#1${\(#1\)}
\def\@doubledollareqn$#1$${\[#1\]}
\makeatother
\begin{document}
Inline math $x^2+y^2=z^2$.
$$
f(v)=4\pi\left(\frac m{2\pi kT}\right)^{\frac32}v^2e^{-\frac{mv^2}{2kT}}.
$$
\end{document}
답변4
이 솔루션은 완벽하지 않습니다. 오류 검사를 수행하지 않으며 다른 문제가 있을 수 있습니다. $ 및 활성 문자를 만들어 이를 예상하지 않는 일부 패키지를 손상시킵니다. 그러나 서문 끝 부분에 다음을 넣으면 대부분 작동할 수 있습니다. 내 문서 두 개에 시도해 보았는데 괜찮은 것 같았습니다.
\catcode\`$\active
\makeatletter
\protected\def\ExpectBeginMath{\@ifnextchar${\let$\ExpectEndDisplayMath\[\@gobble}{\let$\ExpectEndInlineMath\(}}
\def\ExpectEndDisplayMath{\]\let$\ExpectBeginMath\@gobble}
\def\ExpectEndInlineMath{\)\let$\ExpectBeginMath}
\makeatother
\let$\ExpectBeginMath
아니면 그런 것.