代码
\newcommand{\dosomething}[1]{#1 #1}
\expandafter\verb\expandafter+\dosomething{blub}+
产生逐字输出blub blub
。
现在我想\myverb
为第二行创建一个宏,即我想要
\myverb{blub}
或者
\myverb+blub+
创建逐字输出blub blub
。
我怎样才能实现这个(在 TeX 或 LaTeX 中)?
后续问题是,如何使用verbatim
-environment 而不是 来实现它\verb
?这里有一个具体的例子:
\begin{verbatim}
\begin{evaluatecode}
a = 1+1
b = 2^a
print a,b
\end{evaluatecode}
\end{verbatim}
但我希望首先扩展环境evaluatecode
(在我的情况下,计算被发送到某个软件,返回输出;evaluatecode
已经存在),然后逐字显示结果。即,我希望代码
\begin{verbatimevaluate}
a = 1+1
b = 2^a
print a,b
\end{verbatimevaluate}
执行以下操作:首先,的输入verbatimevaluate
由-环境处理evaluatecode
,其结果位于verbatim
-环境中。
答案1
笔记: 你可能赞同这个答案;-)
。
\documentclass{article}
\makeatletter
\def\myverb
{%
\relax\leavevmode\null
\bgroup
\verbatim@font
\let\do\do@noligs \verbatim@nolig@list
\let\do\@makeother \dospecials
\@vobeyspaces
\@myverb
}%
\def\@myverb #1{\catcode`#1\active
\lccode`\~`#1%
\lowercase{\long\def~##1~}{\myverbaction{##1}\egroup}%
\lowercase{~}}%
\makeatother
% customize as desired:
\newcommand{\myverbaction}[1]{#1 #1}%
\begin{document}\thispagestyle{empty}
\myverb+blub+
\myverb+\if\end&^_~%$ \par\ifcase+
\myverb|some +-$^%_
multiline
input|
\end{document}
为了更好地渲染多行事物,类似以下内容(否则人们可能会更紧密地遵循自己LaTeX
的verbatim
)。
\def\myverb
{%
\relax\leavevmode\null
\bgroup
\verbatim@font
\let\do\do@noligs \verbatim@nolig@list
\let\do\@makeother \dospecials
\@vobeyspaces
% in case of multi-line input, something like this:
\obeylines\parskip\baselineskip \parindent\z@
\@myverb
}%
这使用了\noindent
第一幅图像中不存在的 (第一幅图像中的所有内容都缩进,但在转换为 时缩进被修剪了
)png
。
\noindent\myverb|some +-$^%_
multiline
input|
答案2
注意:请不要投票支持这个答案,因为它实际上是一个很长的评论,不能在评论中出现;它的目的是澄清问题
你xparse
可以定义逐字吸收其参数的命令:
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\verbsagestr}{v}{%
\texttt{#1}%
}
\begin{document}
\verbsagestr{Str($1,2_3)}
\end{document}
您可以通过多种方式来操纵参数,但如果没有任何说明,就很难说出更多。
您问题中的关于的部分verbatim
确实不清楚。