客观的

客观的

客观的

我正在尝试实现以下输出。

在此处输入图片描述

这是我用来制作它的代码。我不得不破解它

\begin{document}
\begin{description}

\item In \texttt{./build/org.eclipse.cdt.managedbuilder.core/plugin.xml} 
\\ there is an extension  
{\btHL \texttt{org.eclipse.cdt.managedbuilder.language} } 
{ \btHL \texttt{.settings.providers.GCCBuildCommandParser}} 
corresponding to the name \texttt {GCCBuildOutputParser.name}.
This is extending at the point 
{\btHL \texttt{org.eclipse.cdt.core.LanguageSettingsProvider}}

\end{description}
\end{document}

如您所见,我必须手动插入换行符才能正确排版。我希望 LaTeX 也能自动换行。

定义的序言\btHL取自突出显示代码列表中的文本,同时保持语法突出显示

为什么?

正如我在上面的示例中所展示的,Java 类可以是很长的字符串,并且没有空格。有时您需要在行内提及它们。除此之外,我认为突出显示它们(添加背景颜色)将增强可读性。由于它是 Java 代码,因此我想将其排版为等宽字体。不过语法突出显示并不是一个高优先级。

挑战

到目前为止,我已经查看了以下有关换行文本的答案

以下链接用于突出显示和背景颜色。

尝试两套技术的所有组合非常繁琐,但我尝试了很多。似乎困难的部分是两个应用程序都使用某种遍历技术,第一种计算换行点,第二种计算框的大小。如果它不是内联的,那么设置背景颜色就不需要复杂的计算,这将是可行的。

概括

总而言之,如何才能实现与上述相同的输出,而无需手动插入换行符?我不想在输入报告/日记条目时担心排版。

答案1

定义了两种类型的宏。一种是\plaintt 在行尾处断开(不添加任何额外的连字符)。另一种\highlighttt只允许在点处断开,并为文本着色。点之间不能出现断开。

更新:我让这个东西有点可定制。让我评论一下这两个宏之间的区别:\highlighttt缺点或优点是只在点处发生中断。但它有一个很大的优点,那就是可以在点之间使用任意的 TeX 代码。参见示例中的第一段,我用蓝色突出显示了一个子段。

第二个宏\plaintt基本上只接受字母和标点符号,但只要将其放在括号内,就可以将其转义。第二段对此进行了说明。

提供了一个钩子,以便也\plaintt可以对每个字符进行一些突出显示。请参阅第三段,其中仅\plaintt使用了,但钩子已设置为使用黄色框突出显示方法。

的突出显示方法\highlighttt在命令中指定\myhighlightmethod

这两个宏中只有字体的使用txtt 是硬编码的,但当然这可以改变。

\documentclass{article}
%\usepackage[T1]{fontenc}
\usepackage[textwidth=12cm]{geometry}
%\usepackage{xcolor}
\usepackage{color}


% ``private macros''
\makeatletter
\def\@highlightttpeeknext{\futurelet\@nexttoken\@highlightttaux}
\def\@highlighttt #1.{%
    \def\@highlightttaux{\ifx\@nexttoken\egroup
       \myhighlightmethod {#1}\else
       \myhighlightmethod {#1.}\linebreak[2]%
       \expandafter\@highlighttt\fi}%
    \@highlightttpeeknext}

\def\@plaintt {\futurelet\@nexttoken\@plainttaux}
\def\@plainttaux {\ifx\@nexttoken\egroup\else
                  \ifx\@nexttoken\bgroup
                  \expandafter\expandafter\expandafter\@plaintta\else
                  \expandafter\expandafter\expandafter\@plainttb\fi\fi}
\def\@plaintta #1{{#1}\@plaintt}
\def\@plainttb #1{\ifcat\@nexttoken a\penalty\hyphenpenalty \plaintthook
  #1\else \plaintthook{#1}\linebreak[2]\fi\@plaintt}



% ``commands''

\newcommand{\highlighttt}[1]{{\fontfamily{txtt}\selectfont
   \@highlighttt #1.}}

\newcommand\plaintt{\bgroup\fontfamily{txtt}\selectfont
   \afterassignment\@plaintt\let\next= }

\makeatother

% ``customization''
\newcommand{\myhighlightmethod}[1]{\fboxsep0pt\colorbox{yellow}{\strut#1}}
\newcommand{\plaintthook}{}



\begin{document}\thispagestyle{empty}

\begin{description}

\item In \plaintt{./build/org.eclipse.cdt.managedbuilder.core/plugin.xml}
  there is an extension \highlighttt{org.eclipse.cdt.{\color{blue}managedbuilder}.language.settings.providers.GCCBuildCommandParser}
  corresponding to the name \plaintt{GCCBuildOutputParser.name}. This is
  extending at the point 
  \highlighttt{org.eclipse.cdt.core.LanguageSettingsProvider}

\item In \highlighttt{./build/org.eclipse.cdt.managedbuilder.core/plugin.xml}
  there is an extension \plaintt{org.eclipse.cdt.{\color{blue}managedbuilder}.language.settings.providers.GCCBuildCommandParser}
  corresponding to the name \highlighttt{GCCBuildOutputParser.name}. This is
  extending at the point 
  \plaintt{org.eclipse.cdt.core.LanguageSettingsProvider}

\renewcommand{\plaintthook}[1]{\myhighlightmethod{#1}}

\item In \plaintt{./build/org.eclipse.cdt.managedbuilder.core/plugin.xml}
  there is an extension \plaintt{org.eclipse.cdt.{\color{blue}managedbuilder}.language.settings.providers.GCCBuildCommandParser}
  corresponding to the name \plaintt{GCCBuildOutputParser.name}. This is
  extending at the point 
  \plaintt{org.eclipse.cdt.core.LanguageSettingsProvider}

\end{description}


\end{document}

突出显示包装的代码

相关内容