有没有办法将mint
一行代码内联,从文件中读取代码?
\mintinline
只能排版直接传递给命令的代码,在两个分隔符之间(例如\mintinline{latex}{\LaTeX}
),\inputminted
并将代码排版在与段落分开的自己的框中。
我希望两者兼而有之,类似于(假设的)\inputmintinline
。minted
手册中没有提到任何此类内容。
我会使用它,因为我想创建一个命令,将其参数逐字逐句地读取并写入文件,将内容排版为,minted
然后将内容解释为 LaTeX,扩展/执行其中的任何宏,排版结果。相关这个答案。
我已经弄清楚了“外部”代码,但没有弄清楚内联代码,因为没有\inputmintinline
命令。
答案1
不确定这有什么用处:
\begin{filecontents*}{\jobname-test.tex}
\LaTeX
\end{filecontents*}
\documentclass{article}
\usepackage{minted,catchfile}
\newcommand\inputmintinline[3][]{%
\begingroup\everyeof{}%
\CatchFileDef\temp{#3}{}%
\scantokens\expandafter{%
\expandafter\processinputmintinline\expandafter{\temp}{#1}{#2}%
}\unskip
\endgroup
}
\newcommand{\processinputmintinline}[3]{\mintinline[#2]{#3}{#1}}
\begin{document}
X\inputmintinline{latex}{\jobname-test.tex}X
X\mintinline{latex}{\LaTeX}X
\end{document}
和expl3
:
\begin{filecontents*}{\jobname-test.tex}
\LaTeX
\end{filecontents*}
\documentclass{article}
\usepackage{minted,xparse,l3cctab}
\ExplSyntaxOn
\NewDocumentCommand{\inputmintinline}{O{}mm}
{
\group_begin:
\cctab_begin:N \c_other_cctab
\char_set_catcode_ignore:n { `\^^M } % ignore the endline
\file_get:nnN { #3 } { } \l_tmpa_tl
\cctab_end:
\anakhand_mintintline:nnV { #1 } { #2 } \l_tmpa_tl
\group_end:
}
\cs_new_protected:Nn \anakhand_mintintline:nnn
{
\mintinline[#1]{#2}{#3}
}
\cs_generate_variant:Nn \anakhand_mintintline:nnn { nnV }
\ExplSyntaxOff
\begin{document}
X\inputmintinline{latex}{\jobname-test.tex}X
X\mintinline{latex}{\LaTeX}X
\end{document}