次のように新しいコマンドを宣言します。
\newcommand{\code}[2]{
\begin{listing}[ht]
\begin{minted}
[
framesep=2mm,
baselinestretch=1.2,
bgcolor=blue!30!white,
fontsize=\footnotesize,
]
{#1}
#2
\end{minted}
\end{listing}%$
}
以下のように使用したいです:
\code{bash}{
sudo apt-get install golang python3-dev python-dev libcupti-dev libjpeg-turbo8-dev \
make tmux htop chromium-browser git cmake zlib1g-dev libjpeg-dev \
xvfb xorg-dev python-opengl libboost-all-dean v libsdl2-dev swig
}
残念ながら、エラーが発生しています。
これを修正するにはどうすればいいでしょうか?
答え1
環境を使用すると、はるかに簡単になります。
\documentclass{article}
\usepackage{minted}
\newenvironment{code}[2][]
{%
\VerbatimEnvironment
\begin{listing}[htp]
\begin{minted}[
framesep=2mm,
baselinestretch=1.2,
bgcolor=blue!30!white,
fontsize=\footnotesize,
#1
]{#2}%
}
{\end{minted}\end{listing}}
\begin{document}
\begin{code}[breaklines]{bash}
sudo apt-get install golang python3-dev python-dev libcupti-dev libjpeg-turbo8-dev \
make tmux htop chromium-browser git cmake zlib1g-dev libjpeg-dev \
xvfb xorg-dev python-opengl libboost-all-dean v libsdl2-dev swig
\end{code}
\begin{listing}[htp]
\begin{minted}[
framesep=2mm,
baselinestretch=1.2,
bgcolor=blue!30!white,
fontsize=\footnotesize,
]{bash}
sudo apt-get install golang python3-dev python-dev libcupti-dev libjpeg-turbo8-dev \
make tmux htop chromium-browser git cmake zlib1g-dev libjpeg-dev \
xvfb xorg-dev python-opengl libboost-all-dean v libsdl2-dev swig
\end{minted}
\end{listing}
\end{document}
minted
最初の例では、環境にオプションを追加する方法を示しました。
答え2
逐語的に読み取ってから\scantokens
再トークン化のために渡すコマンドを作成できます。
\UDcollectverbarg
次の構文のマクロを提供できます。
\UDcollectverbarg{⟨^^M-replacement⟩}{⟨Mandatory 1⟩}{⟨Mandatory 2⟩}⟨verbatimized argument⟩
その結果は次のようになります。
⟨Mandatory 1⟩{⟨Mandatory 2⟩{⟨verbatimized argument⟩}}
行の終わりを示す各文字は^^M
トークンシーケンスに置き換えられます⟨^^M-replacement⟩
。
必須引数は必須です。複数のトークンで構成される場合は、catcode-1/2-character-pair / 括弧内にネストする必要があります。
読み取りとトークン化が必要な場合は、変更されていないカテゴリ コード レジームで行われます。
verbatim-Arg も必須です。これは、verbatim カテゴリ コード レジームで読み取りとトークン化を行う必要があります。最初の文字が括弧の場合、引数は括弧内にネストされていると「想定」されます。それ以外の場合は、引数の終わりがその最初の文字で区切られていると想定されます ( の引数のように) \verb
。
空行は無視されません。
この構文を選択したのは、この構文を使用すると、の最初の必須引数\UDcollectverbarg
内で の呼び出しをネストすることにより、 の 2 番目の必須引数内で逐語的な引数を収集できるためです。\UDcollectverbarg
例えば、
\UDcollectverbarg{⟨^^M-replacement⟩}%
{\UDcollectverbarg{⟨^^M-replacement⟩}{\UDcollectverbarg{⟨^^M-replacement⟩}{⟨actionA⟩}}}% <- Mandatory 1
{⟨actionB⟩}% <- Mandatory 2
⟨verbatimized argument 1⟩⟨verbatimized argument 2⟩⟨verbatimized argument 3⟩
結果:
\UDcollectverbarg{⟨^^M-replacement⟩}{\UDcollectverbarg{⟨^^M-replacement⟩}{⟨actionA⟩}}% <- Mandatory 1
{⟨actionB⟩{⟨verbatimized argument 1⟩}}% <- Mandatory 2
⟨verbatimized argument 2⟩⟨verbatimized argument 3⟩
結果:
\UDcollectverbarg{⟨^^M-replacement⟩}{⟨actionA⟩}% <- Mandatory 1
{⟨actionB⟩{⟨verbatimized argument 1⟩}{⟨verbatimized argument 2⟩}}% <- Mandatory 2
⟨verbatimized argument 3⟩
結果:
⟨actionA⟩{⟨actionB⟩{⟨verbatimized argument 1⟩}{⟨verbatimized argument 2⟩}{⟨verbatimized argument 3⟩}}
仮定⟨actionA⟩
= \@firstofone
:
\@firstofone{⟨actionB⟩{⟨verbatimized argument 1⟩}{⟨verbatimized argument 2⟩}{⟨verbatimized argument 3⟩}}
結果:
⟨actionB⟩{⟨verbatimized argument 1⟩}{⟨verbatimized argument 2⟩}{⟨verbatimized argument 3⟩}
%% Copyright (C) 2007 - 2019 by Ulrich Diez ([email protected])
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public Licence (LPPL), either
%% version 1.3 of this license or (at your option) any later
%% version. (The latest version of this license is in:
%% http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.)
%% The author of this work is Ulrich Diez.
%% This work has the LPPL maintenance status 'not maintained'.
%% Usage of any/every component of this work is at your own risk.
%% There is no warranty - neither for probably included
%% documentation nor for any other part/component of this work.
%% If something breaks, you usually may keep the pieces.
\errorcontextlines=10000
%%<-------------------- code for \UDcollectverbarg -------------------->
\makeatletter
%%......................................................................
%% Check whether argument is empty:
%%......................................................................
%% \UD@CheckWhetherNull{<Argument which is to be checked>}%
%% {<Tokens to be delivered in case that argument
%% which is to be checked is empty>}%
%% {<Tokens to be delivered in case that argument
%% which is to be checked is not empty>}%
%% The gist of this macro comes from Robert R. Schneck's \ifempty-macro:
%% <https://groups.google.com/forum/#!original/comp.text.tex/kuOEIQIrElc/lUg37FmhA74J>
\newcommand\UD@CheckWhetherNull[1]{%
\romannumeral0\expandafter\@secondoftwo\string{\expandafter
\@secondoftwo\expandafter{\expandafter{\string#1}\expandafter
\@secondoftwo\string}\expandafter\@firstoftwo\expandafter{\expandafter
\@secondoftwo\string}\expandafter\expandafter\@firstoftwo{ }{}%
\@secondoftwo}{\expandafter\expandafter\@firstoftwo{ }{}\@firstoftwo}%
}%
%%......................................................................
\begingroup
\catcode`\^^M=12 %
\@firstofone{%
\endgroup%
\newcommand\UDEndlreplace[2]{\romannumeral0\@UDEndlreplace{#2}#1^^M\relax{}}%
\newcommand*\@UDEndlreplace{}%
\long\def\@UDEndlreplace#1#2^^M#3\relax#4#5{%
\UD@CheckWhetherNull{#3}%
{ #5{#4#2}}{\@UDEndlreplace{#1}#3\relax{#4#2#1}{#5}}%
}%
}%
\newcommand\UDcollectverbarg[3]{%
\@bsphack
\begingroup
\let\do\@makeother % <- this and the next line switch to
\dospecials % verbatim-category-code-régime.
\catcode`\{=1 % <- give opening curly brace the usual catcode so a
% curly-brace-balanced argument can be gathered in
% case of the first thing of the verbatimized-argument
% being a curly opening brace.
\catcode`\ =10 % <- give space and horizontal tab the usual catcode so
\catcode`\^^I=10 % \UD@collectverbarg cannot catch a space or horizontal
% tab as its 4th undelimited argument.
% (Its 4th undelimited argument denotes the verbatim-
% syntax-delimiter in case of not gathering a
% curly-brace-nested argument.)
\kernel@ifnextchar\bgroup
{% seems a curly-brace-nested argument is to be caught:
\catcode`\}=2 % <- give closing curly brace the usual catcode also.
\UD@collectverbarg{#1}{#2}{#3}{}%
}{% seems an argument with verbatim-syntax-delimiter is to be caught:
\do\{% <- give opening curly brace the verbatim-catcode again.
\UD@collectverbarg{#1}{#2}{#3}%
}%
}%
\newcommand\UD@collectverbarg[4]{%
\do\ % % <- Now that \UD@collectverbarg has the delimiter or
\catcode`\^^I=12 % emptiness in its 4th arg, give space and horizontal tab
% verbatim-catcode (again).
\catcode`\^^M=12 % <- Give the carriage-return-character the verbatim-catcode.
\long\def\@tempb##1#4{%
\edef\@tempb{##1}%
\@onelevel@sanitize\@tempb % <- Turn characters into their "12/other"-pendants.
% This may be important with things like the
% inputenc-package which may make characters
% active/which give them catcode 13(active).
\expandafter\UDEndlreplace\expandafter{\@tempb}{#1}{\def\@tempb}% <- this starts
% the loop for replacing endline-characters.
\expandafter\UD@@collectverbarg\expandafter{\@tempb}{#2}{#3}% <- this "spits
% out the result.
}%
\@tempb
}%
\newcommand\UD@@collectverbarg[3]{%
\endgroup
\@esphack
#2{#3{#1}}%
}%
\makeatother
%%<---------------- end of code for \UDcollectverbarg ----------------->
\documentclass{article}
\usepackage{minted}
% As a usage-example let's now define a macro \mintedcode which
% collects a verbatim-argument and wraps it into a listing-
% and a minted-environment before passing it to \scantokens
\makeatletter
\newcommand\mintedcode[2][]{%
\begingroup
\def\@tempa{{#1}{#2}}%
\@mintedcode
}%
\newcommand\@mintedcode[1][]{%
\UDcollectverbarg{^^J}{\@firstofone}{%
\expandafter\endgroup\expandafter\@@mintedcode\@tempa{#1}%
}%
}%
\newcommand\@@mintedcode[1]{%
\renewcommand\@@mintedcode[4]{%
\scantokens{%
\begin{listing}[htp]^^J
\csname UD@CheckWhetherNull\endcsname{##1}{}{\caption{##1}}^^J
\begin{minted}[framerule=0mm,
framesep=2mm,
frame=single,
rulecolor=\color{blue!30!white},
baselinestretch=1.2,
bgcolor=blue!30!white,
fontsize=\footnotesize,
##3%
]^^J%
{##2}^^J##4^^J%
#1^^J%
}%
}%
}%
\UDcollectverbarg{^^J}{\@firstofone}{\@@mintedcode}|\end{minted}
\end{listing}|
\makeatother
\begin{document}
\mintedcode[A caption]{bash}[breaklines=true]{
sudo apt-get install golang python3-dev python-dev libcupti-dev libjpeg-turbo8-dev \
make tmux htop chromium-browser git cmake zlib1g-dev libjpeg-dev \
xvfb xorg-dev python-opengl libboost-all-dean v libsdl2-dev swig
}%
\end{document}