我正在尝试定义一个新命令,将文本置于彩色背景中,完全按照 .tex 文件中的定义方式重现它(与逐字复制类似),并且不会强迫我在 .tex 文件中使用复杂的数学符号。后一点是复杂的部分。这是我目前所拥有的:
\documentclass[10pt]{article}
\usepackage{color}
\definecolor{customblue}{RGB}{235,241,245}
\newcommand{\terminalCommand}[1]{\colorbox{customblue}{#1}}
\begin{document}
\begin{itemize}
\item \terminalCommand{# SUDO_EDITOR="/usr/bin/vim -p -X" visudo} %Generates missing $ errors
\item \terminalCommand{\# SUDO\_EDITOR="/usr/bin/vim -p -X" visudo} %Doesn't generate errors, but text is garbled and doesn't copy properly
\end{itemize}
\end{document}
第一个\terminalCommand
会产生大量inserted missing $
错误,其中包括_
。第二个\terminalCommand
不会产生任何错误,但下划线不会显示在副本中,并且 PDF 输出中的间距有点不对,这使得无法复制到 shell 中。
有没有一种通用的方法可以改变这个命令,以便它以类似于逐字的方式重现其中的文本? 我一直在将此代码用于更大的 shell 命令块,但现在我正在寻找内联的东西:
\documentclass[10pt]{article}
\usepackage{color}
\usepackage{listings}
\definecolor{customblue}{RGB}{235,241,245}
\newcommand{\terminalCommand}[1]{\colorbox{customblue}{#1}}
\lstnewenvironment{terminalblock}{%
\lstset{backgroundcolor=\color{customblue},
frame=single,
framerule=0pt,
basicstyle=\ttfamily,
breaklines=true,
columns=fullflexible}}{}
\begin{document}
\begin{terminalblock}
# SUDO_EDITOR="/usr/bin/vim -p -X" visudo
\end{terminalblock}
\end{document}
我使用 寻求解决方案\verb
,但构造命令的逻辑方式 ( \newcommand{\terminalCommand}[1]{\colorbox{customblue}{\verb= #1 =}}
) 返回错误\verb illegal in command argument
答案1
您可以\lstinline
与解决方案一起使用如何重新定义 \lstinline 以自动突出显示或绘制所有内联代码片段周围的框架?为内联代码片段添加颜色
因此,以下代码
\begin{itemize}
\item \lstinline{# SUDO_EDITOR="/usr/bin/vim -p -X" visudo}
\item \lstinline{\# SUDO\_EDITOR="/usr/bin/vim -p -X" visudo}
\end{itemize}
生成:
已知的问题:
- 突出显示不能正确跨越换行符。
您还可以定义一个特殊字符作为代替的分隔符\lstinline{}
,因此以下结果与上图相同。
\lstMakeShortInline[basicstyle=\ttfamily]{|}
\begin{itemize}
\item |# SUDO_EDITOR="/usr/bin/vim -p -X" visudo|
\item |\# SUDO\_EDITOR="/usr/bin/vim -p -X" visudo|
\end{itemize}
代码:
\documentclass[10pt]{article}
\usepackage{color}
\usepackage{listings}
\usepackage{etoolbox}
\usepackage{atbegshi,ifthen,tikz}
\definecolor{customblue}{RGB}{235,241,245}
% change this to customize the appearance of the highlight
\tikzstyle{highlighter} = [
customblue,
line width = \baselineskip,
]
% enable these two lines for a more human-looking highlight
%\usetikzlibrary{decorations.pathmorphing}
%\tikzstyle{highlighter} += [decorate, decoration = random steps]
% implementation of the core highlighting logic; do not change!
\newcounter{highlight}[page]
\newcommand{\tikzhighlightanchor}[1]{\ensuremath{\vcenter{\hbox{\tikz[remember picture, overlay]{\coordinate (#1 highlight \arabic{highlight});}}}}}
\newcommand{\bh}[0]{\stepcounter{highlight}\tikzhighlightanchor{begin}}
\newcommand{\eh}[0]{\tikzhighlightanchor{end}}
\AtBeginShipout{\AtBeginShipoutUpperLeft{\ifthenelse{\value{highlight} > 0}{\tikz[remember picture, overlay]{\foreach \stroke in {1,...,\arabic{highlight}} \draw[highlighter] (begin highlight \stroke) -- (end highlight \stroke);}}{}}}
%--------------------------
\makeatletter % Redefine macros from listings package:
\newtoggle{@InInlineListing}%
\togglefalse{@InInlineListing}%
\renewcommand\lstinline[1][]{%
\leavevmode\bgroup\toggletrue{@InInlineListing}\bh % \hbox\bgroup --> \bgroup
\def\lst@boxpos{b}%
\lsthk@PreSet\lstset{flexiblecolumns,#1}%
\lsthk@TextStyle
\@ifnextchar\bgroup{\afterassignment\lst@InlineG \let\@let@token}%
\lstinline@}%
\def\lst@LeaveAllModes{%
\ifnum\lst@mode=\lst@nomode
\expandafter\lsthk@EndGroup\iftoggle{@InInlineListing}{\eh{}}{}%
\else
\expandafter\egroup\expandafter\lst@LeaveAllModes
\fi%
}
\makeatother
\lstset{backgroundcolor=\color{customblue},basicstyle=\ttfamily,}%
\begin{document}
\begin{itemize}
\item \lstinline{# SUDO_EDITOR="/usr/bin/vim -p -X" visudo}
\item \lstinline{\# SUDO\_EDITOR="/usr/bin/vim -p -X" visudo}
\end{itemize}
\end{document}