我实际上需要在定义中存储一些逐字文本,以便可以多次重复使用它。
以下是一段非常简短的片段:
% here I store verbatim text
\def\foo{
bar \verb'baz' spam
}
% now I reuse it
\foo
根本不起作用。有什么想法吗?(\texttt
对我来说不是解决方案)。
答案1
逐字逐句很难。
其工作方式\verb
(以及逐字环境)相当棘手。
假设你写了\verb|\foo|
。该\verb
命令告诉 TeX 将各种特殊字符(例如\
)视为普通字母,然后它将“参数”读\foo
为四个字母的序列,然后将字符改回\
特殊字符(省略各种细节......)。
但是 TeX 只“读取”每个字符一次,因此当 TeX 读取时\def\foo{bar \verb'\baz'}
,它会读取整个{...}
参数前它试图评估它,并且它读取它,关键的是,使用当时有效的特殊/非特殊定义。为什么这很重要?
您可能会认为,当您稍后展开 时\foo
,TeX 会重新读取此参数,并\verb
在此时发挥其魔力。但为时已晚:TeX 已经完成了它要做的所有读取工作,并决定\
是一个特殊字符,因此这\baz
是一个宏调用; 的值\foo
存储为一些字母 'bar ',加上一个命令\verb
、一个字母'
、一个命令\baz
和另一个字母'
。
所以:这就是为什么你写的内容没有像你预期的那样工作。你的目标是(在评论中的解释后添加的文本)有选择地包含和忽略文本。
其中一种方法是使用 LaTeX 中的“comment”包。例如:
\documentclass{article}
\usepackage{comment}
%\includecomment{comment} % uncomment this to see the {comment} contents
\begin{document}
This is some text.
\begin{comment}
This is more text.
\end{comment}
And this is a final sentence.
\end{document}
如果您搜索“Latex 练习”或“Latex 问题集”或类似的内容,您可能会找到更适合您特定问题的内容。但他们很可能会在幕后使用类似“评论”包的技术。
已编辑,根据评论,添加:
此外,如果您希望能够在命令行上打开或关闭此“注释”,那么您可以使用如下技术:
\documentclass{article}
\usepackage{comment}
\expandafter\ifx\csname includemycomments\endcsname\relax
\else
\includecomment{comment} % uncomment this to see the {comment} contents
\fi
\begin{document}
This is some text.
\begin{comment}
This is more text.
\end{comment}
And this is a final sentence.
\end{document}
在这种情况下(假设这是在名为的文件中comm.tex
),您可以说pdflatex comm
获取不带注释的版本,并pdflatex '\def\includemycomments{x}\input{comm}'
获取带注释的版本(奇数\ifx
命令测试\includemycomments
宏是否已定义)。这是从命令行配置 LaTeX 文件内容的非常通用的技术。
Steven B. Segletes 建议使用一个框。它看起来如下:
\documentclass{article}
\newbox\answerbox
\def\answer{\setbox\answerbox=\vbox}
\newif\ifshowanswer
\expandafter\ifx\csname includemycomments\endcsname\relax
\showanswerfalse
\else
\showanswertrue
\fi
\begin{document}
This is some text.
\answer{This is \verb|verb\ati~m| text}
And this is a final sentence.
\ifshowanswer
\box\answerbox
\fi
\end{document}
这就是一般的想法(如果您想知道,与上面的“逐字记录为何很难”的解释相比,关键区别在于 的参数被\answer
读作 的参数vbox
,它不是宏,而是 TeX 原语)。如果您想做一些更复杂的事情,我建议您找到一个可以做到这一点的包——我敢打赌有一个用于管理练习答案集的 LaTeX 包,只需用 google 一下就可以找到它。