我刚刚注册。这是我向这个网站提出的第一个问题。
我正在尝试为内联代码创建逐字命令。这个问题之前已经被问过很多次了,但我从未找到真正适合我的直接答案。我使用的是 MikTeX 2.9,已完全更新。
在我的文本(技术手册)中,我使用的是fancyvrb
。我有纯文本和代码片段。这些由处理\DefineVerbatimEnvironment
。它运行良好。
另一方面,内联代码一直存在将参数传递到\Verb
。我的意思是拥有一个适合代码的内联环境,但允许文本格式化和不受反斜杠影响,因此我可以格式化内联代码或 Windows 文件路径,而无需将每个反斜杠编码为\textbackslash
。
我可以使用\CustomVerbatimCommand
,但这使用单个字符来括住目标文本,而不是花括号。我想出了这个定义:
\CustomVerbatimCommand{\inCodeStub}{Verb}{commandchars=¬¦^} \newcommand{\inCode}[1]{\inCodeStub¡#1¡}
有了这个,我可以使用\inCodeStub¡text¡
- 我不想这样做 - 但尝试使用括号版本不起作用。有人能告诉我原因/提供解决方案吗?
以下是 MWE:
\documentclass{book}
\usepackage{fancyvrb}
\usepackage{inconsolata}
% New command/environment for code snippets
% Inline code fragments
\newcommand\InCode[1]{\texttt{\frenchspacing#1}}
% Code blocks
\newenvironment{Code}{
\begin{quote}\begin{tt}
}{\end{tt}\end{quote}}
% Code blocks, no left margin
\newenvironment{leftCode}{
\begin{tt}
}{\end{tt}}
% Complex code blocks, where too many encodings would be necessary
% Inline code fragments
% The inverted exclamation mark -- ¡ -- never occurs in code, so it is a good candidate to use as bracket
\CustomVerbatimCommand{\inCodeStub}{Verb}{commandchars=¬¦^}
\newcommand{\inCode}[1]{\inCodeStub¡#1¡}
% This is a stub for the fancyvrb starred environments below
\DefineVerbatimEnvironment%
{leftCodeStub}{Verbatim}{commandchars=¬¦^}
% NOTE: Inside this environment, intead of
% \command{object}, write
% ¬command¦object^
% as these characters -- ¬, ¦ and ^ -- are very rare in code
\newenvironment{Code*}{
\quote\leftCodeStub
}{\endleftCodeStub\endquote}
\begin{document}
Text outside. \inCode{Text inside. Works with plain text.} Text outside.
Now with backslashes it doesn't work: \inCode{\something and ¬textbf¦\something^}
But the same using the stub code works fine: \inCodeStub¡\something and ¬textbf¦\something^¡
\end{document}
答案1
如果有,则不能使用¬
和作为“命令字符” 。只有单字节字符可用于此目的(实际上,并不是所有字符都可以)。¦
\usepackage[utf8]{inputenc}
如果您愿意切换到 XeLaTeX 或 LuaLaTeX,那么这是可能的。