客观的
我正在尝试实现以下输出。
这是我用来制作它的代码。我不得不破解它
\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 代码,因此我想将其排版为等宽字体。不过语法突出显示并不是一个高优先级。
挑战
到目前为止,我已经查看了以下有关换行文本的答案
- 换行不包含空格的长行
- http://mrtextminer.wordpress.com/2009/02/26/break-or-wrap-a-continuous-text-in-latex/
- 需要换行的长代码
- 如何使内联列表顺利换行?
- http://mirrors.ctan.org/macros/latex/contrib/seqsplit/seqsplit.pdf
- http://mirrors.ctan.org/macros/latex/contrib/listings/listings.pdf
- 如何打破较长的 \texttt 部分
- http://en.wikibooks.org/wiki/LaTeX/Hyperlinks
以下链接用于突出显示和背景颜色。
- lstinline 的不同背景颜色
- 如何重新定义 \lstinline 以自动突出显示或绘制所有内联代码片段周围的框架?
- 带换行符的内联代码列表中的背景颜色
- 内联列表中的彩色背景
- 突出显示代码列表中的文本,同时保持语法突出显示
- http://pleasemakeanote.blogspot.com/2009/08/how-to-highlight-text-in-latex.html
- 突出显示代码列表中的文本,同时保持语法突出显示
尝试两套技术的所有组合非常繁琐,但我尝试了很多。似乎困难的部分是两个应用程序都使用某种遍历技术,第一种计算换行点,第二种计算框的大小。如果它不是内联的,那么设置背景颜色就不需要复杂的计算,这将是可行的。
概括
总而言之,如何才能实现与上述相同的输出,而无需手动插入换行符?我不想在输入报告/日记条目时担心排版。
答案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}