HTML에서는 지난 10여년 동안 콘텐츠 구조와 스타일을 완전히 분리하려는 강력한 노력이 있어왔습니다. 이제 대부분의 웹사이트는 구조적 마크업을 위해 HTML을 사용하고 해당 마크업을 표현하기 위해 CSS를 사용하여 구축됩니다. 이를 통해 동일한 콘텐츠에 다양한 스타일을 적용하는 것이 정말 쉬워집니다. 이것이 얼마나 강력한지 알지 못한다면 예를 참조하세요.http://www.csszengarden.com/. 다음을 주장하는 W3c 문서가 있습니다.의미적 마크업과 표현적 마크업의 분리.
저는 LaTeX를 처음 접했지만 한동안 웹사이트를 디자인해 왔습니다. 예, 서로 다른 분야이지만 동일한 일을 하려고 노력하고 있습니다. 바로 콘텐츠를 잘 표현하는 것입니다. 지난 6개월 동안 LaTeX를 사용해 본 결과 내용과 스타일의 분리라는 개념이 TeX 세계에서는 아직까지는 적용되지 않았다는 느낌이 들었습니다. 예를 들어, HTML+CSS에서 테이블 셀의 줄 바꿈 규칙을 정의하는 것은 셀에 클래스를 추가하고 CSS 문서에 한 줄을 추가하는 것만큼 간단합니다. LaTeX에서는 다음을 수행해야 합니다.뭔가 이렇게 끔찍한데.
그렇다면 제가 뭔가를 놓치고 있는 걸까요, 아니면 LaTeX인가요? LaTeX 디자인에도 이런 내용과 스타일의 분리 개념이 사용되는 걸까요? 단지 제대로 구현되지 않은 걸까요? 향후 버전(LaTeX3? ConTeXt?)에서 더 잘 구현될 가능성이 있나요?
참고: LaTeX 개발자를 모욕하려는 의도는 아닙니다. 시스템은 다른 여러 가지 이유로 정말 훌륭합니다. 나는 단지 이 벌어진 구멍과 그에 대한 논의가 거의 없는 것을 보고 그 이유가 무엇인지 궁금합니다.
답변1
역사
Knuth는 당시 자신의 지식과 기술의 한계를 고려하여 자료를 최대한 잘 조판하고 싶었기 때문에 1970년대 후반에 TeX를 작성했습니다. 그가 꽤 좋은 일을 했다는 것은 일반적으로 동의하지만, 확실히 그가 하려고 하지 않았던 것은 분리된 구조와 스타일이었습니다.
Lamport는 1980년대 중반 두 영역을 보다 명확하게 분리할 필요성을 느꼈을 때 LaTeX를 작성했습니다. LaTeX는 1990년대 초반에 개정되었으며 현재 커널은 1994년에 출시되었습니다(물론 버그 수정 포함). 이는 HTML + CSS 모델보다 어느 정도 앞선 것이며 기술적 한계로 인해 LaTeX가 더 이상 복잡해지면 불가능했을 것입니다. (1994년에는 LaTeX가 많은 PC에 비해 너무 컸기 때문에 팀에서는 이를 줄이기 위해 열심히 노력했습니다.)
HTML 세계에서는 새로운 태그가 추가될 수 있으며 이를 모르는 렌더러에서는 무시됩니다. TeX의 경우는 그렇지 않습니다. 알 수 없는 제어 시퀀스는 오류입니다. 따라서 새로운 개념을 추가하고 기존 문서가 작동하기를 기대할 수는 없습니다.정말중요한. 따라서 1994년에 내려진 결정은 오늘날에도 LaTeX에 여전히 중요합니다.
ConTeXt는 최신 버전이며 LaTeX '기본'보다 훨씬 더 많은 디자인을 분리합니다. ConTeXt는 또한 커널에 대한 보다 적극적인 개발 전망을 바탕으로 LaTeX와는 다른 안정성 접근 방식을 취합니다. 그러나 ConTeXt 접근 방식은 어떤 면에서는 LaTeX보다 일반 TeX에 더 가깝습니다. ConTeXt가 LaTeX보다 '사용자에게 더 가까운' 디자인을 유지한다는 점입니다.
입력과 출력
HTML 세계에서는 렌더링을 위한 DOM을 구축하기 위해 문서 전체를 메모리로 읽어옵니다. TeX은 적어도 우리가 직접 프로그래밍하지 않는 한 그렇게 작동하지 않습니다. 대신 TeX는 한 줄을 읽고 다음 줄로 이동하기 전에 처리합니다. (LuaTeX는 이것을 변경할 수 있지만 ConTeXt에서도 TeX 모델이 주요 모델이라는 것은 여전히 사실이라고 생각합니다.) 따라서 모양을 변경하는 데 필요한 접근 방식은 매우 다릅니다.
이 영역에 대해 생각할 때 염두에 두어야 할 핵심 사항은 사람들이 결과물로 원하는 것이 무엇인지입니다. TeX 세계에서 우리는 고품질 조판에 중점을 두고 있습니다. 따라서 콘텐츠의 현실을 반영하기 위해 디자인을 수동으로 조정하는 경우가 거의 항상 있습니다. 이는 '잘 작성된' HTML에서는 발생하지 않으며 XML로 표현될 수 있지만 확실히 엄격한 분리를 깨뜨립니다. 나와 다른 사람들은 이것이 나쁜 것이 아니라고 주장할 것입니다. 최상의 결과를 얻으려면 수동 개입이 필요합니다.
테이블
질문에는 테이블이 구체적으로 언급되어 있으며 그 자체로 고려할 가치가 있다고 생각합니다. HTML에서는 테이블이 다양한 목적으로 사용되었습니다. TeX에서는 테이블에 대한 접근 방식이 훨씬 더 제한되어 있습니다. 테이블은 TeX 세계에서 복잡한 짐승으로 유명하며 Knuth는 테이블이 전혀 작동한다는 것이 놀랍다고 지적했습니다! 대부분의 조판 문서에서 표는 주로 '공식 표'에 사용되며 '좋은' 모양의 범위는 상당히 제한되어 있습니다. 따라서 CSS와 유사한 전체 범위의 컨트롤을 제공할 필요가 줄어듭니다.
canaaerus가 그의 답변에서 말했듯이 TeX 세계는 위원회가 아닌 누구도 관리하지 않으므로 구현되는 내용은 개별 사용자가 원하는 것에 따라 다릅니다. LaTeX를 위한 다양한 테이블 패키지와 ConTeXt 접근 방식, \halign
일반 TeX의 원시 패키지가 있습니다. 그러나 그들은 주로 다른 문제를 해결하려고 노력하고 있으며 이를 통해 사용자의 우선순위가 어디에 있는지 알 수 있습니다.
앞을 내다보며
LaTeX3 프로젝트의 일원으로서 저는 우리가 콘텐츠와 디자인의 더 나은 분리를 확실히 논의하고 있다는 것을 알고 있습니다. 여기서 염두에 두어야 할 한 가지 문제는 HTML + CSS 모델이 우리가 원하는 조판으로 항상 잘 변환되지는 않는다는 것입니다. 두 영역 사이에는 몇 가지 중요한 차이점이 있으며 이는 결코 그렇게 간단하지 않을 것임을 의미합니다.
더 나은 접근 방식은 코드 측면과 인터페이스 측면 모두에서 TeX와 함께 작동해야 합니다. 우리는실험 코드개체 간의 관계('l3ldb')를 처리하고디자인을 위한 '템플릿', 둘 다 이 영역에 있습니다.
답변2
이러한 콘텐츠와 마크업의 분리는 확실히 TeX 개발자와 사용자에게 낯설지 않은 아이디어이지만 TeX와 HTML 및 해당 커뮤니티가 작동하는 방식에는 몇 가지 근본적인 차이점이 있습니다.
HTML은 본질적으로 중앙 집중식으로 구성됩니다. 웹 표준을 개발하는 위원회(즉, W3C)가 있습니다. 그런 다음 HTML 문서의 모든 작성자는 이러한 표준에 따라 작성해야 하며 HTML 인터프리터(예: 대부분 웹 브라우저) 개발자는 이를 구현해야 합니다.
반면에 TeX의 경우 상황이 많이 다르게 발생합니다. 명확한 기준은 없습니다. 확실히 대부분의 것들은 Knuth의 원래 TeX를 기반으로 합니다. 하지만 많은 것들이 추가되었습니다. 예를 들어 이제 ConTeXt와 LaTeX라는 다양한 매크로 패키지가 있습니다. 기본 구문이 이미 수정되지 않았음을 쉽게 알 수 있습니다. 누구든지 LaTeX처럼 /
매크로 대신에 매크로를 사용하고 싶다고 말할 수 있습니다 . \
게다가 오늘날 사용되는 기능의 상당 부분이 패키지로 추가되었습니다. 이는 TeX를 극도로 확장 가능하게 만듭니다.
이는 차이점의 기술적 부분으로 이어집니다. TeX은 Turing-complete입니다! 대신 HTML은 마크업 언어일 뿐입니다. HTML에서는 문서의 내용, 구조 및 스타일을 지정하고 TeX에서는 문서 작성 방법에 대한 알고리즘을 작성합니다.
물론 가장 간단한 경우에는 복잡한 프로그래밍 구성을 사용할 필요가 없으므로 TeX 문서는 마크업 언어로 작성된 것과 다르지 않게 보입니다. 그러나 나는 이러한 종류의 문서에 관한 한 내용과 마크업의 분리가 TeX에서 매우 잘 적용된다고 주장하고 싶습니다.
당신이 보면예당신이 준 바로 그 지점이 문서가 마크업과 유사하지 않게 되는 지점입니다.
답변3
LaTeX 디자인에도 이런 내용과 스타일의 분리 개념이 사용되는 걸까요? 단지 제대로 구현되지 않은 걸까요?
사용되며 반드시 그럴 필요는 없습니다.신통치 않게구현되었습니다 (역사적 관점에 대한 다른 답변 참조). 오히려 꽤 많이 구현되었습니다.낮은 수준.
너~할 수 있다LaTeX에서는 콘텐츠와 스타일을 엄격하게 분리하는 것을 절대적으로 사용합니다(실제로 이렇게 하는 것이 좋습니다). 그러나 이를 수행하려면 LaTeX의 매크로 정의 기능을 활용해야 합니다.
LaTeX에는약간의\chapter
및 \emph
(물론 더 많은 것들이 있습니다) 와 같은 의미론적 매크로입니다 . 더 많은 옵션을 제공하는 문서 클래스와 패키지가 있습니다. 예를 들어 KOMA 스크립트 클래스는 다음을 위한 수많은 매크로를 제공합니다.사용자 정의LaTeX에서 제공하는 의미론적 매크로의 모양과 느낌.
그러나 실제로 필요한 의미는 작성 중인 문서 유형에 따라 크게 달라집니다. 따라서 편지 작성이라는 특정 작업에 의미론적 매크로를 제공하는 것과 같은 문서 클래스가 있지만 scrlttr2
이는 예외입니다.LaTeX는 도메인별 의미론적 매크로를 제공하는 대신 도메인별 매크로를 구축하기 위한 언어를 제공합니다..
궁극적으로 문서에는 물리적 레이아웃 매크로가 없어야 하며 의미론적 매크로만 사용해야 합니다. \textbf
? 아니요, 설명하는 매크로를 사용하세요.왜굵은 텍스트를 원합니다.
도메인에 따라 다르므로 필요한 대부분의 매크로는 아마도 직접 작성하게 될 것입니다. 이것이 바로 많은 LaTeX 패키지가 이를 최대한 쉽게 만드는 도구를 제공하는 이유입니다. 예를 들어 그림 표시를 사용자 정의하거나 사용자 정의 그림 유형을 생성하는 패키지가 있습니다. caption
또는 참조 float
). 강력한 매크로( etoolbox
및 대부분의 LaTeX3) 작성을 용이하게 하는 패키지가 있습니다 . 그리고 소스 코드 강조 표시와 같은 다양한 특수 사용 사례를 위한 패키지가 있습니다.
이를 통해 대부분의 경우 문서 전체에서 사용할 수 있는 간단한 의미론적 매크로 세트를 구성하는 것이 비교적 간단합니다. 그럼에도 불구하고 내 석사 논문의 거시적 정의는 전체 문서의 약 1/6(SLOC에서는 주석 제거)을 차지합니다.
답변4
나는 구조와 스타일의 분리가 LaTeX와 ConTeXt의 근본적인 장점 중 하나라는 점에 확실히 동의합니다. 즉, 실제로는 완전히 혼합되는 것을 방지하는 것이 어렵습니다. 매우 간단한 문서만이 스타일과 내용을 완전히 분리할 수 있다는 것이 밝혀졌습니다. 적당한 크기의 책이라도 실제 사례에서는 거의 항상 마지막 순간에 미세 조정이 필요하며, 이로 인해 분리가 효과적으로 파괴됩니다. 출판사로서 나에게 있어 100% 분리를 달성하는 가장 실용적인 솔루션은 항상 문서의 구조를 정의하는 xml 파일에 내용을 유지하고 모든 스타일 관련 지침을 ConTeXt 파일에 포함하는 것입니다. ConTeXt는 매우 실용적인 XML 프로세서입니다. 물론 XML에서 XSLT를 사용하여 LaTeX 파일을 쉽게 만들고 원하는 경우 LaTeX를 사용할 수 있습니다. 이 경우 xsl 파일에 모든 스타일 관련 지침을 넣어야 합니다.