
누군가가 대답할 수 있기를 바라는 콤보 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에 배치했습니다. 우리는 두 개의 새로운 명령을 생성하고 이를 \question
and 이라고 불렀습니다 \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 태그를 사용하여 질문을 굵게 표시하고 플래그를 실제 유형으로 표시합니다.
다음으로 평소와 같이 파일을 빌드합니다.
다음은 출력의 예입니다.
후속 질문:
이 작업을 수행하고 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
).