我是个懒人,喜欢经常用新命令。完成后我会用原代码替换。
我想要一个缩写,\verb|..
文本在这里 .. |
但这里出了点问题——我不知道如何修复我的代码:
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\newcommand\bv{\verb|}
\newcommand\ev{|}
\begin{document}
1. Putting \color{green!40!black} \verb| hurz | \color{black} works
but:
2. Putting \bv hurz \ev fails.
\end{document}
由于我不是\TeX
巫师,而只是初学者,因此非常感谢您的每条提示!
我忘了:在 Linux 上使用 PDFLateX。
问候!
答案1
逐字命令需要找到不扩展命令的结束字符串,因此您无法将其隐藏在命令中\ev
。
您可以使用 fancyvrb 来定义简短的逐字记录,请参阅文档:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\usepackage{fancyvrb}
\DefineShortVerb{\|}
\begin{document}
Putting |\section{abc} hurz| work
\end{document}
答案2
\verb
必须知道在哪里结束,但同时它必须禁用每个特殊字符的解释,包括反斜杠。
有人可能会认为要用细绳 \ev
,但这会非常麻烦。用不在要逐字打印的材料中的单个字符进行分隔要简单得多。但这是以非常间接的方式起作用的。
当 LaTeX 发现\verb
它检查下一个字符时更改其类别代码表示“组结束”。因此,在找到另一个实例时,字符的组结束性质将自动禁用逐字模式所需的所有特殊设置。定义为\ev
有什么问题|
?首先,这|
不能改为表示“组结束”,但这是问题中最不重要的:\ev
将被检查为由三个普通的字符,因为\verb
是有效的!所以它不能被解释为命令。
如果您的目标是为内联逐字材料着色,那么有更简单的方法。我展示了两种方法:一种是使用单一颜色,使用\greenverb
与相同的语法定义宏\verb
。第二种方法定义\colorverb
为将颜色规范作为参数,然后调用通用颜色逐字命令。
\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}
\newverbcommand{\greenverb}{\color{green!40!black}}{}
\begin{document}
Putting \greenverb|hurz| works
\end{document}
如果您需要多种颜色,您可以定义一个通用命令,然后对其进行专门化。请使用比(您的姓名、随机字符串或其他)更详细的前缀,my
以尽量减少冲突的可能性。
\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}
\makeatletter % allow private control sequences
\newverbcommand{\my@colorverb}{\color{\my@verbatimcolor}}{}
\newcommand{\colorverb}[1]{\def\my@verbatimcolor{#1}\my@colorverb}
\makeatother
\newcommand{\greenverb}{\colorverb{green!40!black}}
\newcommand{\blueverb}{\colorverb{blue!80!black}}
\begin{document}
Putting \greenverb|hurz| works
Putting \blueverb|hurz| works
Putting \colorverb{red!80!black}|hurz| works
\end{document}
答案3
这不是真正的逐字翻译,但非常接近。例如,输入需要括号平衡。
语法是用户所要求的:\bv....\ev
。此外,逐字材料可以包括行和段落(空行)中断。
\bv
如果输入行以单个反斜杠结尾,则会产生不正确的输出。如果 catcode-1,2 字符已更改,则会出现另一个不正确的输出...除非采取其他步骤,否则\
它们将继续显示为{
和。}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern,tokcycle}
\tokcycleenvironment\myverb
{\addcytoks[1]{\string##1}}
{\addcytoks{\{}\processtoks{##1}\addcytoks{\}}}
{\ifx\par##1\addcytoks{\\}\else\addcytoks[1]{\string##1}\fi}
{\addcytoks[1]{\string##1}}
\makeatletter
\def\bv{\begingroup\obeylines\catcode`\%=12%
\long\def\tokencycle##1##2##3##4{\begingroup\let\endtokencycle
\endtokcycraw\aftertokcycle{\the\cytoks\expandafter\endgroup
\expandafter\endgroup\expandafter\tcenvscope
\expandafter{\the\cytoks}}\tokcycraw{##1}{##2}{##3}{##4}}%
\myverb}
\makeatother
\let\ev\endtokcycraw
\begin{document}
\textit{here we} go:
\bv ABc. D &^$% \xyz
\ {ef}g~\\
H#I^_ \ev back t\v{o} normal \today
a
b%
c
\end{document}