Markdown에서 Eisvogel로 LaTeX 코드 마이그레이션

Markdown에서 Eisvogel로 LaTeX 코드 마이그레이션

누군가가 대답할 수 있기를 바라는 콤보 LaTeX/Markdown 질문이 있습니다.

나는 모든 글을 쓸 때 Markdown을 사용하고 있지만 Eisvogel 템플릿에도 크게 의존하고 있습니다. 저는 Markdown에 대한 몇 가지 매우 유용한 LaTeX 기능 수정을 활성화할 수 있었습니다.

현재 저는 Markdown 문서에서 LaTeX awesomebox 패키지와 FontAwesome5 아이콘을 사용하고 있습니다. 그러나 나는 LaTeX를 모르는 많은 동료 개발자들을 위해 이것을 더 쉽게 만들려고 노력하고 있습니다.

현재 저는 사용자 지정 질문 및 답변 블록을 표시하기 위해 Markdown에서 다음을 수행합니다.

\awesomebox[maroon]{2pt}{\faQuestionCircle}{maroon}{\textbf{Question:} How do you do the thing?}

\awesomebox[brandgreen]{2pt}{\faLightbulb}{brandgreen}{\textbf{Answer:} You do the thing this way.}

이것이 작동하는지 확인하기 위해 Eisvogel 템플릿에서 다음을 수행했습니다.

% Enable awesomebox and fontawesome5 icons for callouts
\usepackage{awesomebox}
\usepackage{fontawesome5}
\usepackage{verbatim}

내 Markdown 파일은 내가 원하는 방식으로 아이콘과 관리 블록을 생성합니다. 질문에 대한 빨간색 물음표와 답변에 대한 녹색 전구, 그 뒤에 필요한 텍스트가 표시됩니다.

그러나 이는 Markdown만을 선호하는 일부 개발자에게는 너무 복잡합니다. 그들은 코드를 표시하기 위해 다음 규칙을 기꺼이 사용합니다.

::: code
This is a block of code
:::

또한 tcolorbox 패키지를 사용하여 Eisvogel에서 다음과 같은 방식으로 여러 다른 설명 상자를 사용자 정의했습니다.

% tcolorbox
\usepackage{tcolorbox}
\newtcolorbox{norm-box}{colback=gray!5!white,arc=0pt,outer arc=0pt,colframe=gray!60!black}
\newtcolorbox{info-box}{colback=cyan!5!white,arc=0pt,outer arc=0pt,colframe=cyan!60!black}
\newtcolorbox{warn-box}{colback=orange!5!white,arc=0pt,outer arc=0pt,colframe=orange!80!black}
\newtcolorbox{error-box}{colback=red!5!white,arc=0pt,outer arc=0pt,colframe=red!75!black}
\newtcolorbox{attn-box}{colback=green!5!white,arc=0pt,outer arc=0pt,colframe=green!75!black}
\newtcolorbox{code-box}{colback=codeblock!100!white,arc=0pt,outer arc=0pt,colframe=gray!0!white}
\newtcolorbox{learn-box}{colback=blue!5!white,arc=0pt,outer arc=0pt,colframe=blue!40!black,title=\textbf{Objectives:}}
\newtcolorbox{scenario-box}{colback=orange!5!white,arc=0pt,outer arc=0pt,colframe=orange!80!black,title=\textbf{Scenario:}}
\newtcolorbox{outline-box}{colback=cyan!5!white,arc=0pt,outer arc=0pt,colframe=cyan!60!black,title=\textbf{Outline:}}
\newtcolorbox{prereqs-box}{colback=red!5!white,arc=0pt,outer arc=0pt,colframe=red!60!black,title=\textbf{Prerequisites:}}
\newtcolorbox{labtime-box}{colback=yellow!5!white,arc=0pt,outer arc=0pt,colframe=yellow!60!black,title=\textbf{Lab:}}

내 질문은 다음과 같습니다

\awesomebox[blah] 스크립트 전체를 Eisvogel 템플릿으로 포팅하는 것이 가능합니까? 사용자가 삼중 콜론 규칙을 사용하거나 기본 Markdown에서 사용자 정의 아이콘을 사용하는 것과 유사한 것을 사용할 수 있습니까?

나는 사용자가 LaTeX를 더 배우지 않고도 질문과 답변을 더 쉽게 추가할 수 있도록 만들고 싶습니다.

어떤 아이디어가 있나요? 미리 감사드립니다. 내 사용자 정의 Eisvogel 템플릿에서 사용자 정의 예제를 제공하게 되어 기쁩니다.

답변1

내 문제를 해결했습니다.

원래 게시물에서 언급한 것처럼 Markdown 코드를 사용자 정의하여 표시되는 LaTeX 코드의 양을 제한하고 싶었습니다. 이 문제를 해결하기 위해 내가 한 일은 다음과 같습니다.

Eisvogel 템플릿( eisvogel.tex) 내에서 코드 어딘가에 다음 줄을 추가합니다. 690번 줄 주위에 줄을 추가했습니다.

%% Testing newcommands, question and answers
\newcommand{\question}[1]{\awesomebox[maroon]{2pt}{\faQuestionCircle}{maroon}{#1}}
\newcommand{\answer}[1]{\awesomebox[brandgreen]{2pt}{\faLightbulb}{brandgreen}{#1}}

기본적으로 우리는 코드를 Markdown에서 옮겨 Eisvogel에 배치했습니다. 우리는 두 개의 새로운 명령을 생성하고 이를 \questionand 이라고 불렀습니다 \answer. 앞에 나오는 슬래시를 참고하세요.

이것이 Markdown에서 이를 사용하는 방법입니다. 다음 정의를 사용하여 새 명령을 만듭니다.

\newcommand{cmd}[args]{def}
\renewcommand{cmd}[args]{def}
  • 명령 이름은 \question또는 입니다 \answer.
  • [1]사용자의 입력처럼 작동하는 단일 인수 또는 이 있습니다 .
  • 정의는 LaTeX 코드의 문자열입니다.
  • 인수 or는 #1끝에 추가되며 Markdown 파일에서 사용자의 입력 역할을 합니다.

다음으로 Markdown 파일로 이동하여 다음과 같은 방식으로 질문과 답변을 작성합니다.

\question{\textbf{Question:} What flags in the output state what virtualization support is
available on this server?}

\answer{\textbf{Answer:} Multiple flags show up: \texttt{Virtualization: VT-x}, \texttt{Hypervisor
vendor: KVM}, and \texttt{Virtualization type: full}. These flags provide information about the
type of virtualization support available on this server.}

LaTeX 태그를 사용하여 질문을 굵게 표시하고 플래그를 실제 유형으로 표시합니다.

다음으로 평소와 같이 파일을 빌드합니다.

다음은 출력의 예입니다.

Q&A 스크린샷

후속 질문:

이 작업을 수행하고 Markdown에서 더 많은 LaTeX 코드를 제거하는 더 쉬운 방법을 아는 사람이 있다면 감사하겠습니다. 실제로 다음과 같은 것이 내 개발자에게 완벽할 것입니다.

::: question
Question: What color is the sky?
:::

::: answer
Answer: The sky is blue.
:::

삼중 콜론과 질문 변수는 빨간색 물음표 아이콘과 그 오른쪽의 빨간색 수직 막대로 대체됩니다. 마찬가지로 삼중 콜론과 대답은 녹색 전구입니다.

이렇게 하면 마크다운에서 모든 LaTeX 코드를 제거하고 pandoc-latex-environment 템플릿을 사용할 수 있습니다. 이 필터의 구문을 살펴봤지만 뭔가 빠졌을까봐 걱정됩니다.

감사해요.

답변2

귀하의 후속 질문에 대해 - 나는 pandoc을 위한 작은 Lua 스크립트를 만들었습니다:

--[[
admonition boxes, e.g:

::: warning
:::

awesomebox package supports 'note', 'tip', 'warning', 'caution', 'important'
other custom types have to be defined in header-includes (see below)

header-includes:
    # enable parsing markdown in custom environment:
    # (e.g. use \Begin{admonition} ... \End{admonition})
    # --------------------------------------------------------------------------
    - \let\Begin\begin
    - \let\End\end
    #
    # custom environment for admonition boxes:
    # --------------------------------------------------------------------------
    - \usepackage{awesomebox}
    #
    - \newenvironment{questionblock}
        {\begin{awesomeblock}[orange]{2pt}{\faQuestionCircle}{orange}}
        {\end{awesomeblock}}
]]

local admonitions = pandoc.List:new {'note', 'tip', 'warning', 'caution', 'important', 'question'}

function Div(elem)
  local adm = elem.classes[1]

  if admonitions:includes(adm) then
    return {
      pandoc.RawBlock("latex", "\\Begin{" .. adm .. "block}"),
      elem,
      -- \setlength{\parskip}{-1em} to gobble the extra newline before End
      pandoc.RawBlock("latex", "\\setlength{\\parskip}{-1em}\n\\End{" .. adm .. "block}")
    }
  end
end

스크립트의 경고 목록에 유형을 추가하고 header-includes섹션에서 정의하여 고유한 유형을 정의할 수 있습니다( 샘플 참조 question).

관련 정보