如何在minted
单行命令中使用命令?
此代码
\newcommand{\HADOOPUSER}{hduser}
\mint{console}|sudo groupadd \HADOOPUSER|
目前生产
sudo groupadd \HADOOPUSER
而我想要的输出是
sudo groupadd hduser
答案1
虽然我非常喜欢minted
,但我认为它不是你想要做的正确工具。在由 排版的列表中调用宏minted
目前非常有限(截至 v1.7)。该包确实提供了一个名为的选项,mathescape
允许转义到 LaTeX(即将一系列标记解释为 LaTeX 代码而不是逐字),但
- 只有这样才能摆脱 LaTeX正在使用的语言中的评论,
- 该特征主要面向数学性质的内容。
以下是根据手册改编的示例minted
:
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}[mathescape]{python}
# Returns $\sum_{i=1}ˆ{n}i$
def sum_from_one_to(n):
r = range(1, n + 1)
return sum(r)
# An escape to LateX won't work outside comments
$\sum_{i=1}ˆ{n}i$
\end{minted}
\end{document}
显然,您的 shell 脚本不是注释,因此无法让您的宏展开到列表中的替换文本。实际上,我从Python 源代码您使用的词法分析器console
(又名BashSessionLexer
) 的一个缺点是它没有定义 shell 行末注释 (以 开头#
)。因此,如果您使用该词法分析器,您甚至无法在代码的任何地方 (无论是注释内部还是外部) 转为 LaTeX,如下面的示例所示。
\documentclass{article}
\usepackage{minted}
\newcommand{\HADOOPUSER}{hduser}
\begin{document}
\begin{minted}[mathescape]{console}
sudo groupadd #$\HADOOPUSER$
\end{minted}
\end{document}
另一种方法是使用listings
包而不是minted
。使用一些补丁,内联代码中可以允许转义为 LaTeX listings
。如果您认为这会有所帮助,我可以扩展我的答案以提供基于的解决方案listings
。
然而。我认为在内联代码中转而使用 LaTeX 是愚蠢的。在我看来,内联代码应该保留用于排版单个标识符(关键字、变量等);任何比这更长的代码都有可能弄乱你的段落。对于较长的代码片段(即使对于带有参数的命令,例如sudo groupadd hduser
),你应该使用显示列表:
\begin{minted}{console}
sudo groupadd hduser
\end{minted}
如果您遵循此规则,您就不需要在内联代码中转而使用 LaTeX。
答案2
我提供一个 ConTeXt 解决方案,因为我不知道 LaTeX 中 LuaTeX 包的状态。
一种可能性是使用 Lua(而不是 TeX)来翻译您的输入。为此,ConTeXt 提供了一个m-translate
可与该vim
模块一起使用的模块。(该vim
模块使用 vim 来生成语法突出显示;因此,原则上,这也应该适用于 minted+LaTeX)。
\usemodule[vim]
\usemodule[translate]
\translateinput[HADOOPUSER][hduser]
\definevimtyping[console][syntax=bash, before=\enableinputtranslation, after=\disableinputtranslation]
\starttext
Translated: \inlineconsole{sudo groupadd HADOOPUSER}
This only works inside console environment, not regular text. For example
HADOOPUSER.
\stoptext
这使
它的工作原理如下:将文本sudo groupadd HADOOPUSER
写入外部文件并转换为\SYNBOL{}sudo groupadd HADOOPUSER\SYNEOL{}
。当 TeX 读取该文件时,\enableinputtranslation
处于活动状态,因此该行将转换为\SYNBOL{}sudo groupadd hduser\SYNEOL{}
并传递给 TeX,其中的宏t-vim
添加了必要的语法突出显示。