这个答案显示了如何将 中的一行lstlisting
设置为粗体。但是,在此解决方案中,您需要将材料放在lstlisting
环境中。
但是如果我需要使用 输入行怎么办\lstinputlisting
? 在这种情况下我该怎么办?
编辑输入文件不是一种选择。此文件是机器生成的,可能会不时更改。但要加粗的行的行号不会改变。
虽然我们不需要 MWE,但我提供了一个,以便您可以以最少的麻烦提供解决方案。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.txt}
First
Second
Third line to be bolded.
Fourth
\end{filecontents*}
\usepackage{listings}
\begin{document}
\lstinputlisting{\jobname.txt}
\end{document}
答案1
listings
有很多钩子你可以(滥用)使用,例如这里 OutputBox
,它在每行的开头被调用(可能在排版行号之后)。
钩子的添加是全局的,因此如果您想限制范围,请使用宏并根据需要重新定义它:
\documentclass{article}
\usepackage{listings}
\makeatletter
\lst@AddToHook{OutputBox}{\lst@boldline}
\let\lst@boldline\relax
\newcommand\lstboldline[1][3]{% optional argument to choose the line number?
\def\lst@boldline{\ifnum\lst@lineno=#1 \bfseries\fi}}
\newcommand\lstnoboldline{\let\lst@boldline\relax}
\makeatother
\begin{document}
\lstboldline
\lstinputlisting{\jobname.txt}
\lstnoboldline
\lstinputlisting{\jobname.txt}
\lstboldline[2]
\lstinputlisting{\jobname.txt}
\end{document}
答案2
我的方法:
- 你可以使用下面这个命令逐行读取文件回答到从文件中读取任意行
- 使用 for 循环和 if 条件来调整指定行以适应使其加粗
- 使用以下方式编写每一行
\immediate\write\tempfile{...}
- 用于
\lstinputlisting[escapeinside={(*}{*)}]{\jobname.tmp}
显示适配的代码
为此我发出了命令boldlineCode{<number of lines>}{<bold line>}
。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.txt}
First
Second
Third line to be bolded.
Fourth
\end{filecontents*}
\usepackage{listings}
\usepackage{forloop}
\usepackage{ifthen}
\newcounter{ct}
% boldlineCode
% #1 = number of lines
% #2 = bold line
\newcommand{\boldlineCode}[2]{
\newwrite\tempfile
\immediate\openout\tempfile=\jobname.tmp
\newread\myread
\openin\myread=\jobname.txt
% read lines, insert bold command in line #2 and write
\forloop{ct}{1}{\numexpr\value{ct}-1 < #1}%
{%
\read\myread to \command
\ifthenelse{\value{ct}=#2}{
\immediate\write\tempfile{(*\unexpanded{\bfseries} \command*)}
}{
\immediate\write\tempfile{\command}
}
}
\immediate\closeout\tempfile
\lstinputlisting[escapeinside={(*}{*)}]{\jobname.tmp}
}
\begin{document}
\boldlineCode{4}{3}
\boldlineCode{4}{2}
\end{document}