有没有办法让 Verbatim 中的某个字符具有特定的格式?

有没有办法让 Verbatim 中的某个字符具有特定的格式?

我正在写这份关于 Ising 模型的计算模拟的报告。我展示的是晶格配置样本,它们只是“+”和“-”的数组。这样做是为了可视化不同的“磁畴”,这意味着我真的希望“+”和“-”彼此突出。所以我想知道是否有一种自动的方法让 LaTeX 着色,或者更好地突出显示逐字中的某个字符。我实际上目前正在使用从外部文本文件导入它逐字输入从包中幻想VRB所以我的代码是:

\documentclass[a4paper,11pt]{article}
\usepackage{fancyvrb}
\usepackage{graphicx}
\usepackage{caption,subcaption}
\usepackage{relsize}

% redefine \VerbatimInput
\RecustomVerbatimCommand{\VerbatimInput}{VerbatimInput}%
{fontsize=\relsize{-3}
}

\begin{document}

    \begin{figure}[!ht]
    \centering
    \begin{subfigure}{0.5\textwidth}
      \centering
      \VerbatimInput{\detokenize{j0.2000_B0.0000_sweeps500_avaft100}}   
      \caption{$\frac{J}{kT}=0.2$}
    \end{subfigure}
    \end{figure}

\end{document}

我正在使用 XeLaTeX 进行编译。网格文件是:

- - + - + - - - + - + - - - - - + + + + + - + + + - + + + -
+ - - + + - - - + + - + - + + + - - + + + + + + - + + - - +
- + - - - + - - + - + + + + + - + - + - - + - + - + + - + -
+ - + - - - + + + + - + - + + - + + + - + + - - + + - + + +
+ - + + + + + + + + - - + + - + + + + - + + + + + + + + + -
- - - + + + + - - + - - + - - - + + - - - - + - - - + + + -
- - - + - - - - - - + - + - - + + - - + + - + + + + + - - +
+ + - - - - - - + + + - - - + - - + - - - + + + - + - - + -
+ - - + + + - + + + - - + - - + - + - + + + - - - - - - - +
- + - - + - + + - + + - + - - - - - - + - - + - - + + + + +
- - - - - - - + + - - - + + - - + + - - - + - + - + - - - +
+ + + + + + - - + + + - + - - + - + - + + + + - - + + - + +
- + - + - + - + + + - + + - - - + + + + + - + - + - + - + -
- - + + + - - + + + + + - - - + + + - - - - - + - + + + - -
+ + + + - + + - - - + - - + + - - - + + - + + - + - + - - -
- + - + + + + + + - + - + + + + - - - + + + - + - + + - - +
+ + + + + - + + - - + + - - - + + + - + + - - + + + - - - -
+ + + + + - - + + + - - - - - + + + - + + + + + + - + - - +
- + - + + + + + - - - + + - + - + - - - + - - + + - - - - -
- - + - - + - + + + + + - - - - - - + + - + + + + - - + + +
+ - + + - - + + + - - + + - + + - - - + + - - + + + - + + +
+ - - + + - - - + - + - + + + + + - - - + + - - - - + + - -
- + + + - + + + + + - - + - + + + - + + - - + + + + + + + +
- + + + + + - + - + - - - - - + + + + + - - - - + - + + - +
- + + - - + + + - + - - + + - + + + - + - - + - + - + + + +
- - - - - - + - + + + + + + - - + + - + + + + + - - - + + -
- - + - - - + - - + - - - + - + - - + - - + + + - - + + + -
- - + - - - - - - + - - + + - + - + + - - + + - - + - - + +
- - - - + - - - - + - - - + - - - + - - - + + + - + + - - +
+ + - - - - - + + + - + - + - + - + - + - + + + + - + - - +

答案1

您可以使用defineactive赋予角色不同的属性(参见文档的第 20 和 21 页fancyvrb);使用颜色的示例:

\documentclass[a4paper,11pt]{article}
\usepackage{fancyvrb}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{caption,subcaption}
\usepackage{relsize}

\usepackage{filecontents}
\begin{filecontents*}{j0.2000_B0.0000_sweeps500_avaft100}
- - + - + - - - + - + - - - - - + + + + + - + + + - + + + -
+ - - + + - - - + + - + - + + + - - + + + + + + - + + - - +
- + - - - + - - + - + + + + + - + - + - - + - + - + + - + -
+ - + - - - + + + + - + - + + - + + + - + + - - + + - + + +
+ - + + + + + + + + - - + + - + + + + - + + + + + + + + + -
- - - + + + + - - + - - + - - - + + - - - - + - - - + + + -
- - - + - - - - - - + - + - - + + - - + + - + + + + + - - +
+ + - - - - - - + + + - - - + - - + - - - + + + - + - - + -
+ - - + + + - + + + - - + - - + - + - + + + - - - - - - - +
- + - - + - + + - + + - + - - - - - - + - - + - - + + + + +
- - - - - - - + + - - - + + - - + + - - - + - + - + - - - +
+ + + + + + - - + + + - + - - + - + - + + + + - - + + - + +
- + - + - + - + + + - + + - - - + + + + + - + - + - + - + -
- - + + + - - + + + + + - - - + + + - - - - - + - + + + - -
+ + + + - + + - - - + - - + + - - - + + - + + - + - + - - -
- + - + + + + + + - + - + + + + - - - + + + - + - + + - - +
+ + + + + - + + - - + + - - - + + + - + + - - + + + - - - -
+ + + + + - - + + + - - - - - + + + - + + + + + + - + - - +
- + - + + + + + - - - + + - + - + - - - + - - + + - - - - -
- - + - - + - + + + + + - - - - - - + + - + + + + - - + + +
+ - + + - - + + + - - + + - + + - - - + + - - + + + - + + +
+ - - + + - - - + - + - + + + + + - - - + + - - - - + + - -
- + + + - + + + + + - - + - + + + - + + - - + + + + + + + +
- + + + + + - + - + - - - - - + + + + + - - - - + - + + - +
- + + - - + + + - + - - + + - + + + - + - - + - + - + + + +
- - - - - - + - + + + + + + - - + + - + + + + + - - - + + -
- - + - - - + - - + - - - + - + - - + - - + + + - - + + + -
- - + - - - - - - + - - + + - + - + + - - + + - - + - - + +
- - - - + - - - - + - - - + - - - + - - - + + + - + + - - +
+ + - - - - - + + + - + - + - + - + - + - + + + + - + - - +
\end{filecontents*}


% redefine \VerbatimInput
\RecustomVerbatimCommand{\VerbatimInput}{VerbatimInput}%
{fontsize=\relsize{-3}
}

\def\SumSign{\char43}
\def\MinusSign{\char45}

\begin{document}

\begin{figure}
  \centering
  \begin{subfigure}{0.5\textwidth}
  \centering
  \catcode`+=\active
  \catcode`-=\active
  \VerbatimInput[
    defineactive=%
    \def+{\color{blue}\SumSign}
    \def-{\color{red}\MinusSign}]{\detokenize{j0.2000_B0.0000_sweeps500_avaft100}}   
  \caption{$\frac{J}{kT}=0.2$}
  \end{subfigure}
\end{figure}

\end{document}

在此处输入图片描述

另一个选择是:

\documentclass[a4paper,11pt]{article}
\usepackage{fancyvrb}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{caption,subcaption}
\usepackage{relsize}

\usepackage{filecontents}
\begin{filecontents*}{j0.2000_B0.0000_sweeps500_avaft100}
--+-+---+-+-----+++++-+++-+++-
+--++---++-+-+++--++++++-++--+
-+---+--+-+++++-+-+--+-+-++-+-
+-+---++++-+-++-+++-++--++-+++
+-++++++++--++-++++-+++++++++-
---++++--+--+---++----+---+++-
---+------+-+--++--++-+++++--+
++------+++---+--+---+++-+--+-
+--+++-+++--+--+-+-+++-------+
-+--+-++-++-+------+--+--+++++
-------++---++--++---+-+-+---+
++++++--+++-+--+-+-++++--++-++
-+-+-+-+++-++---+++++-+-+-+-+-
--+++--+++++---+++-----+-+++--
++++-++---+--++---++-++-+-+---
-+-++++++-+-++++---+++-+-++--+
+++++-++--++---+++-++--+++----
+++++--+++-----+++-++++++-+--+
-+-+++++---++-+-+---+--++-----
--+--+-+++++------++-++++--+++
+-++--+++--++-++---++--+++-+++
+--++---+-+-+++++---++----++--
-+++-+++++--+-+++-++--++++++++
-+++++-+-+-----+++++----+-++-+
-++--+++-+--++-+++-+--+-+-++++
------+-++++++--++-+++++---++-
--+---+--+---+-+--+--+++--+++-
--+------+--++-+-++--++--+--++
----+----+---+---+---+++-++--+
++-----+++-+-+-+-+-+-++++-+--+
\end{filecontents*}


% redefine \VerbatimInput
\RecustomVerbatimCommand{\VerbatimInput}{VerbatimInput}%
{fontsize=\relsize{-3}
}

\def\SumSign{\char43}
\def\MinusSign{\char45}

\begin{document}

\begin{figure}
  \centering
  \begin{subfigure}{0.75\textwidth}
  \centering
  \catcode`+=\active
  \catcode`-=\active
  \setlength\fboxsep{2pt}
  \offinterlineskip
  \VerbatimInput[
    defineactive=%
    \def+{\colorbox{red!70!black}{\textcolor{white}{\SumSign}}}
    \def-{\colorbox{cyan}{\textcolor{black}{\MinusSign}}}]{\detokenize{j0.2000_B0.0000_sweeps500_avaft100}}   
  \caption{$\frac{J}{kT}=0.2$}
  \end{subfigure}
\end{figure}

\end{document}

在此处输入图片描述

并在埃格尔,这是一个使用环境的版本:

\documentclass[a4paper,11pt]{article}
\usepackage{fancyvrb}
\usepackage{xcolor}
\usepackage{subcaption}
\usepackage{relsize}

% redefine \VerbatimInput
\RecustomVerbatimCommand{\VerbatimInput}{VerbatimInput}%
{fontsize=\relsize{-3}
}

\def\SumSign{\char43}
\def\MinusSign{\char45}

\makeatletter
\newenvironment{MyVerb}
  {
    \def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'}
    \catcode`+=\active
    \catcode`-=\active
    \setlength\fboxsep{2pt}
    \offinterlineskip
    \VerbatimEnvironment
    \begin{Verbatim}
  }
  {\end{Verbatim}}
\makeatother

\begin{document}

\begin{figure}[!ht]
  \centering
  \begin{subfigure}{0.75\textwidth}
  \begin{MyVerb}[defineactive=%
    \def+{\colorbox{red!70!black}{\textcolor{white}{\SumSign}}}
    \def-{\colorbox{cyan}{\textcolor{black}{\MinusSign}}}]
--+-+---+-+-----+++++-+++-+++-
+--++---++-+-+++--++++++-++--+
-+---+--+-+++++-+-+--+-+-++-+-
+-+---++++-+-++-+++-++--++-+++
+-++++++++--++-++++-+++++++++-
---++++--+--+---++----+---+++-
---+------+-+--++--++-+++++--+
++------+++---+--+---+++-+--+-
+--+++-+++--+--+-+-+++-------+
-+--+-++-++-+------+--+--+++++
-------++---++--++---+-+-+---+
++++++--+++-+--+-+-++++--++-++
-+-+-+-+++-++---+++++-+-+-+-+-
--+++--+++++---+++-----+-+++--
++++-++---+--++---++-++-+-+---
-+-++++++-+-++++---+++-+-++--+
+++++-++--++---+++-++--+++----
+++++--+++-----+++-++++++-+--+
-+-+++++---++-+-+---+--++-----
--+--+-+++++------++-++++--+++
+-++--+++--++-++---++--+++-+++
+--++---+-+-+++++---++----++--
-+++-+++++--+-+++-++--++++++++
-+++++-+-+-----+++++----+-++-+
-++--+++-+--++-+++-+--+-+-++++
------+-++++++--++-+++++---++-
--+---+--+---+-+--+--+++--+++-
--+------+--++-+-++--++--+--++
----+----+---+---+---+++-++--+
++-----+++-+-+-+-+-+-++++-+--+
  \end{MyVerb}   
  \caption{$\frac{J}{kT}=0.2$}
  \end{subfigure}
\end{figure}

\end{document}

在此处输入图片描述

答案2

不需要任何包,除了与当前任务无关的和xcolorsubcaptionrelsize

\activeplus我给出了两个例子,在第二个例子中,\activeminus和的定义\specialinputfont发生了变化,但定义可能应该是唯一的并放在序言中。

\documentclass[a4paper,11pt]{article}

\usepackage{xcolor}
\usepackage{caption,subcaption}
\usepackage{relsize}

\usepackage{filecontents}
\begin{filecontents*}{j0.2000_B0.0000_sweeps500_avaft100}
--+-+---+-+-----+++++-+++-+++-
+--++---++-+-+++--++++++-++--+
-+---+--+-+++++-+-+--+-+-++-+-
+-+---++++-+-++-+++-++--++-+++
+-++++++++--++-++++-+++++++++-
---++++--+--+---++----+---+++-
---+------+-+--++--++-+++++--+
++------+++---+--+---+++-+--+-
+--+++-+++--+--+-+-+++-------+
-+--+-++-++-+------+--+--+++++
-------++---++--++---+-+-+---+
++++++--+++-+--+-+-++++--++-++
-+-+-+-+++-++---+++++-+-+-+-+-
--+++--+++++---+++-----+-+++--
++++-++---+--++---++-++-+-+---
-+-++++++-+-++++---+++-+-++--+
+++++-++--++---+++-++--+++----
+++++--+++-----+++-++++++-+--+
-+-+++++---++-+-+---+--++-----
--+--+-+++++------++-++++--+++
+-++--+++--++-++---++--+++-+++
+--++---+-+-+++++---++----++--
-+++-+++++--+-+++-++--++++++++
-+++++-+-+-----+++++----+-++-+
-++--+++-+--++-+++-+--+-+-++++
------+-++++++--++-+++++---++-
--+---+--+---+-+--+--+++--+++-
--+------+--++-+-++--++--+--++
----+----+---+---+---+++-++--+
++-----+++-+-+-+-+-+-++++-+--+
\end{filecontents*}

\newcommand{\specialinput}[1]{%
  \begingroup
  \activateplus
  \activateminus
  \par\addvspace{\topsep}
  \specialinputfont\obeylines
  \input{#1}%
  \par\addvspace{\topsep}
  \endgroup
}

\newcommand{\activateplus}{%
  \begingroup\lccode`~=`+\lowercase{\endgroup\let~}\activeplus
  \catcode`+=\active
}
\newcommand{\activateminus}{%
  \begingroup\lccode`~=`-\lowercase{\endgroup\let~}\activeminus
  \catcode`-=\active
}

%%% change here the definitions
\newcommand{\specialinputfont}{\ttfamily\relsize{-3}}
\newcommand{\activeplus}{\textcolor{blue}{+}}
\newcommand{\activeminus}{\textcolor{red}{-}}


\begin{document}

\begin{figure}
\centering
\begin{subfigure}{0.48\textwidth}
\centering
\specialinput{j0.2000_B0.0000_sweeps500_avaft100}
\caption{$\frac{J}{kT}=0.2$}
\end{subfigure}\hfill
\begin{subfigure}{0.48\textwidth}
\centering
%%% change the definitions to make another example
\setlength{\fboxsep}{1pt}
\renewcommand{\activeplus}{\colorbox{red!70!black}{\textcolor{white}{+}}}
\renewcommand{\activeminus}{\colorbox{cyan}{\textcolor{black}{-}}}
\renewcommand{\specialinputfont}{\ttfamily\relsize{-3}\offinterlineskip}
\specialinput{j0.2000_B0.0000_sweeps500_avaft100}
\caption{$\frac{J}{kT}=0.2$}
\end{subfigure}%

\end{figure}

\end{document}

在此处输入图片描述

答案3

在这里,我使用主动字符表示加号和减号,并使用verbatimbox包裹将物品放入盒子中,然后可以在图形中调用。可以使用和打开或关闭主动编码\colorsymon符号\colorsymoff

\documentclass[a4paper,11pt]{article}
\usepackage{verbatimbox}
\usepackage{xcolor}

\let\svplus+
\let\svminus-
\catcode`+=\active
\catcode`-=\active
\def\colorsymon{%
  \catcode`+=\active\def+{\textcolor{red}{\ttfamily\svplus}}%
  \catcode`-=\active\def-{\textcolor{cyan!40}{\ttfamily\svminus}}%
}
\def\colorsymoff{%
  \catcode`+=12\let+\svplus%
  \catcode`-=12\let-\svminus%
}
\catcode`+=12
\catcode`-=12

\begin{document}

\colorsymon
\begin{verbbox}[\colorsymon]
- - + - + - - - + - + - - - - - + + + + + - + + + - + + + -
+ - - + + - - - + + - + - + + + - - + + + + + + - + + - - +
- + - - - + - - + - + + + + + - + - + - - + - + - + + - + -
+ - + - - - + + + + - + - + + - + + + - + + - - + + - + + +
+ - + + + + + + + + - - + + - + + + + - + + + + + + + + + -
- - - + + + + - - + - - + - - - + + - - - - + - - - + + + -
- - - + - - - - - - + - + - - + + - - + + - + + + + + - - +
+ + - - - - - - + + + - - - + - - + - - - + + + - + - - + -
+ - - + + + - + + + - - + - - + - + - + + + - - - - - - - +
- + - - + - + + - + + - + - - - - - - + - - + - - + + + + +
- - - - - - - + + - - - + + - - + + - - - + - + - + - - - +
+ + + + + + - - + + + - + - - + - + - + + + + - - + + - + +
- + - + - + - + + + - + + - - - + + + + + - + - + - + - + -
- - + + + - - + + + + + - - - + + + - - - - - + - + + + - -
+ + + + - + + - - - + - - + + - - - + + - + + - + - + - - -
- + - + + + + + + - + - + + + + - - - + + + - + - + + - - +
+ + + + + - + + - - + + - - - + + + - + + - - + + + - - - -
+ + + + + - - + + + - - - - - + + + - + + + + + + - + - - +
- + - + + + + + - - - + + - + - + - - - + - - + + - - - - -
- - + - - + - + + + + + - - - - - - + + - + + + + - - + + +
+ - + + - - + + + - - + + - + + - - - + + - - + + + - + + +
+ - - + + - - - + - + - + + + + + - - - + + - - - - + + - -
- + + + - + + + + + - - + - + + + - + + - - + + + + + + + +
- + + + + + - + - + - - - - - + + + + + - - - - + - + + - +
- + + - - + + + - + - - + + - + + + - + - - + - + - + + + +
- - - - - - + - + + + + + + - - + + - + + + + + - - - + + -
- - + - - - + - - + - - - + - + - - + - - + + + - - + + + -
- - + - - - - - - + - - + + - + - + + - - + + - - + - - + +
- - - - + - - - - + - - - + - - - + - - - + + + - + + - - +
+ + - - - - - + + + - + - + - + - + - + - + + + + - + - - +
\end{verbbox}
\colorsymoff

    \begin{figure}[!ht]
    \centering
      \centering
      \theverbbox
      \caption{$\frac{J}{kT}=0.2$}
    \end{figure}

    \begin{figure}[!ht]
    \centering
      \centering
      \colorsymon
      \verbfilebox[\colorsymon]{plusminus}
      \theverbbox
      \colorsymoff
      \caption{$\frac{J}{kT}=0.2$}
    \end{figure}

\end{document}

在此处输入图片描述

并输入文件plusminus.tex:

在此处输入图片描述

并获得全彩色效果...(编辑以减少代码大小)

\documentclass[a4paper,11pt]{article}
\usepackage{verbatimbox}
\usepackage{xcolor}

%ACTIVE PLUS AND MINUS SIGNS

\let\svplus+
\let\svminus-

\catcode`+=\active
\catcode`-=\active
\def\colorsymon{%
  \catcode`+=\active\def+{\usebox{\myplus}}%
  \catcode`-=\active\def-{\usebox{\myminus}}%
}
\def\colorsymoff{%
  \catcode`+=12\let+\svplus%
  \catcode`-=12\let-\svminus%
}
\catcode`+=12
\catcode`-=12

% DEFINE \myplus AND \myminus IN LITTLE BOXES
\def\mysize{\scriptsize}

\fboxrule=0pt\fboxsep=0pt\relax

\newsavebox\myplus\newsavebox\myminus
\savebox{\myplus}{\colorbox{cyan}{\mysize\makebox[\baselineskip]{\strut\textcolor{black}{\ttfamily+}}}}
\savebox{\myminus}{\colorbox{red}{\mysize\makebox[\baselineskip]{\strut\textcolor{white}{\ttfamily-}}}}

\begin{document}
\colorsymon
\begin{verbbox}[\mysize\colorsymon]
--+-+---+-+-----+++++-+++-+++-
+--++---++-+-+++--++++++-++--+
-+---+--+-+++++-+-+--+-+-++-+-
+-+---++++-+-++-+++-++--++-+++
+-++++++++--++-++++-+++++++++-
---++++--+--+---++----+---+++-
---+------+-+--++--++-+++++--+
++------+++---+--+---+++-+--+-
+--+++-+++--+--+-+-+++-------+
-+--+-++-++-+------+--+--+++++
-------++---++--++---+-+-+---+
++++++--+++-+--+-+-++++--++-++
-+-+-+-+++-++---+++++-+-+-+-+-
--+++--+++++---+++-----+-+++--
++++-++---+--++---++-++-+-+---
-+-++++++-+-++++---+++-+-++--+
+++++-++--++---+++-++--+++----
+++++--+++-----+++-++++++-+--+
-+-+++++---++-+-+---+--++-----
--+--+-+++++------++-++++--+++
+-++--+++--++-++---++--+++-+++
+--++---+-+-+++++---++----++--
-+++-+++++--+-+++-++--++++++++
-+++++-+-+-----+++++----+-++-+
-++--+++-+--++-+++-+--+-+-++++
------+-++++++--++-+++++---++-
--+---+--+---+-+--+--+++--+++-
--+------+--++-+-++--++--+--++
----+----+---+---+---+++-++--+
++-----+++-+-+-+-+-+-++++-+--+
\end{verbbox}
\colorsymoff

    \begin{figure}[!ht]
    \centering
      \centering
      \theverbbox
      \caption{$\frac{J}{kT}=0.2$}
    \end{figure}

\end{document}

在此处输入图片描述

相关内容