
Поскольку я сейчас пишу пакет и начал использовать dtx
format, я задался вопросом, есть ли альтернативные классы, использующие только doc
, поэтому я начал использовать l3doc
(так как я использую синтаксис expl3). Я им вполне доволен, но следующие моменты немного раздражают:
- Я использую
variable
для описания переменных иmacro
для описания макросов (так как ониfunction
должны использоваться в документации, а не в коде). Как мне унифицировать стили обоих (с полосами на полях или без них, я бы предпочел, чтобы они были)? - Можно ли перенести этот вид на макет, достигнутый с помощью
\DescribeEnv
(в том числе и стержней)? - Как мне разметить код Lua, который используется пакетом? Использовать
\NewMacroEnvironment
так, какl3doc
указано в документации?
Этот вопрос не о:
- Изменение класса документа
ltxdoc
или - переключение на другой класс, что нарушает
doc
функциональность, но в конечном итоге может быть использовано для документирования.
Что я на самом деле использую и чем не доволен (пример dtx
файла, я удалил вызов пакета, чтобы не предоставлять .ins
файл):
% \iffalse meta-comment
%<package>\RequirePackage{expl3}
%<package>\RequirePackage{xparse}
%<package>\ProvidesExplPackage{testpack}{2017/04/15}{0.1}{Test package}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{testpack.dtx}
\end{document}
%</driver>
% \fi
%
% \begin{documentation}
% \GetFileInfo{testpack.sty}
%
% \title{The \texttt{testpack} package\thanks{This document corresponds to \texttt{termdoc}~\fileversion, dated~\filedate.}}
% \author{TeXnician}
% \date{\today}
% \maketitle
% \tableofcontents
%
% \section{User interface}
% \DescribeMacro{\justdoit} My test \cs{justdoit}: here would be the function call
% \begin{function}{\justdoit}
% \begin{syntax}
|\justdoit|
% \end{syntax}
% \meta{description}
% \end{function}
% \end{documentation}
% \begin{implementation}
% \section{Implementation}
%<*package>
% \begin{macrocode}
\RequirePackage{iftex}
\RequireLuaTeX
\RequirePackage{luacode}
% \end{macrocode}
% \begin{variable}{\mytl}
% A variable
% \begin{macrocode}
\tl_new:N \mytl
% \end{macrocode}
% \end{variable}
% \begin{environment}{luacode}
% \begin{macrocode}
\begin{luacode}
function justdoit()
tex.print(1,[[Test]])
end
\end{luacode}
% \end{macrocode}
% \end{environment}
% \begin{macro}{\justdoit}
% \begin{macrocode}
\NewDocumentCommand{\justdoit}{}{
\directlua{justdoit()}
}
% \end{macrocode}
% \end{macro}
%</package>
% \end{implementation}
% \Finale
\endinput
Обновлять:Вот пример вывода:
решение1
Вот несколько предложений по унификации стилей переменных и макросов, переносу внешнего вида на макет, достигнутый с помощью \DescribeEnv
, и поиску способа разметки Lua
кода в вашей l3doc
документации.
- Унификация стилей переменных и макросов:
Чтобы унифицировать стили как переменных, так и макросов, можно настроить окружения l3doc
. Этого можно добиться, изменив l3doc
сам пакет или создав новый пакет (или класс) на основе l3doc
.
Например, вы можете определить новую среду my_macro
с желаемым стилем:
\ExplSyntaxOn
\NewDocumentEnvironment{my_macro}{m}
{
\cs_set_eq:NN \variable \meta
\begin{macro}{#1}
}
{
\end{macro}
\cs_set_eq:NN \variable \gobble
}
\ExplSyntaxOff
Затем вы можете использовать my_macro
окружение вместо macro
окружения в вашем коде. Это новое окружение будет иметь тот же стиль, что и variable
окружение.
- Перенос внешнего вида на макет, достигнутый с помощью
\DescribeEnv
:
Чтобы перенести внешний вид переменных или макросов в макет, полученный с помощью \DescribeEnv
, можно переопределить \DescribeEnv
команду для использования того же стиля, что и у переменных или макросов:
\ExplSyntaxOn
\cs_set_eq:NN \original_describe_env: \DescribeEnv
\cs_new_protected:Npn \new_describe_env: #1
{
\cs_set_eq:NN \environment \meta
\original_describe_env: { #1 }
\cs_set_eq:NN \environment \gobble
}
\cs_set_eq:NN \DescribeEnv \new_describe_env:
\ExplSyntaxOff
Этот код переопределяет \DescribeEnv
команду так, чтобы она имела тот же стиль, что variable
и my_macro
среды и .
- Разметка
Lua
кода вl3doc
документации:
Чтобы разметить Lua
код в l3doc
документации, вы можете использовать \NewMacroEnvironment
команду, указанную в l3doc
документации.
Кроме того, вы можете использовать luacode
среды luaexec
, предоставляемые пакетом, luacode
для правильного форматирования и выделения Lua
кода.
Вот пример использования \NewMacroEnvironment
с luacode
окружением:
\NewMacroEnvironment{luacode} % or luaexec, depending on your preference
Теперь вы можете использовать luacode
среду в своей документации, и она будет правильно отформатирована и выделена.
Эти изменения помогут вам настроить внешний вид переменных, макросов и сред, а также разметить Lua
код в вашей l3doc
документации.