
У меня есть вопрос по сочетанию LaTeX/Markdown, на который я надеюсь, кто-нибудь сможет мне ответить.
Я использую Markdown для всего, что я пишу, но я также сильно склоняюсь к шаблону Eisvogel. Мне удалось включить несколько очень хороших функциональных модификаций LaTeX в Markdown.
В настоящее время я использую пакет LaTeX awesomebox и иконки FontAwesome5 в моих документах Markdown. Однако я пытаюсь упростить это для многих моих коллег-разработчиков, которые не знают 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
:::
Я также настроил несколько других выносок следующим образом в Eisvogel, используя пакет tcolorbox:
% 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
и \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 для выделения вопросов жирным шрифтом и отображения флагов как текста с напечатанным шрифтом.
Далее создайте файл обычным способом.
Вот пример вывода:
Дополнительный вопрос:
Если кто-то знает еще более простой способ сделать это и удалить еще больше кода LaTeX из Markdown, я был бы признателен. На самом деле, что-то вроде следующего было бы идеально для моих разработчиков:
::: question
Question: What color is the sky?
:::
::: answer
Answer: The sky is blue.
:::
Тройное двоеточие и вопросительная переменная будут заменены красным значком вопросительного знака и вертикальной красной полосой справа от него. Аналогично с тройным двоеточием и ответом будет зеленая лампочка.
Таким образом я могу удалить весь код LaTeX из markdown и использовать шаблон pandoc-latex-environment. Я просмотрел синтаксис этого фильтра, но боюсь, что что-то упускаю.
Спасибо.
решение2
Для Вашего следующего вопроса - я сделал небольшой скрипт Lua для pandoc:
--[[
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
).