scrlayer-notecolumn 和列表

scrlayer-notecolumn 和列表

使用scrlayer-notecolumn基于边注的解决方案时,我遇到了一个奇怪的问题:如果这些内联列表包含反斜杠,这些注释将无法处理列表内容。但如果没有反斜杠,它们可以对其进行排版。这个问题不仅是针对特定问题,listings而且minted也针对特定问题。

如果您取消注释 MWE 中的行,则可以重现该错误。该minted命令编译但结果如下:

结果

listings版本甚至无法编译。

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{scrlayer-scrpage,scrlayer-notecolumn,lmodern,listings,minted}    

\begin{document}
Testtext
\makenote{\lstinline{tiny}}
%\makenote{\lstinline{\tiny}}
\makenote{\mintinline{tex}{tiny}}
%\makenote{\mintinline{tex}{\tiny}}
\end{document}

答案1

使用任何类型的逐字逐句地命令在另一个命令的参数中总是有问题的。你总是需要解决方法。已经很简单了:

\documentclass{article}
\begin{document}
\textbf{\verb|%$|}
\end{document}

无法工作。在诸如 之类的命令的参数中使用此类命令\section(写入辅助文件)则更加成问题。

使用\lstinline\mintinline并不会减少问题,反而会更加麻烦。因此,至少应该预料到将它们放入笔记\makenote或的参数\makenote*不起作用。可能存在不充分的解决方法,例如:

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{scrlayer-scrpage,scrlayer-notecolumn,lmodern,listings,minted}    
\usepackage{filecontents}
\begin{filecontents*}{\jobname-test.tex}
\tiny
\end{filecontents*}
\begin{document}
Testtext
\makenote*{\lstinline{tiny}}% Does work, because "tiny" is unproblematic
\makenote*{\expandafter\lstinline\expandafter|\detokenize{\tiny}|}% Does work
                                % but adds a space after \tiny
\makenote*{\mintinline{tex}{tiny}}% Does work, because "tiny" is unproblematic
\makenote*{\lstinputlisting{\jobname-test.tex}}% Does work.
\end{document}

似乎有效。但只在某些情况下有效。

据我所知,scrlayer-notecolumn目前不支持注释列内的颜色切换,因为目前注释列没有单独的颜色堆栈。因此minted注释列的感觉有限。

请记住:scrlayer-notecolumn只是一个实验,一种概念证明scrlayer。需要大量额外的人力来提供诸如颜色堆栈、注释列内的浮动、注释列内的脚注等内容。我不认为作者愿意提供这些东西。

答案2

您希望将代码列表打印到页边距中。因此,您的或多或少最小的示例必须定义注释列,如下所示:

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{scrlayer-scrpage, scrlayer-notecolumn, lmodern, blindtext,
ragged2e, listings}


\newlength{\paragraphscolwidth}
\AfterCalculatingTypearea{%
\setlength{\paragraphscolwidth}{.4\textwidth}%
\addtolength{\paragraphscolwidth}{-\marginparsep}%
}
\recalctypearea
\DeclareNewNoteColumn[%
position=\oddsidemargin+1in
+.7\textwidth
+\marginparsep,
width=\paragraphscolwidth,
font=\footnotesize
]{paragraphs}


\lstset{language=tex}

\begin{document}
\begin{addmargin}[0pt]{.3\textwidth}

  This is the text with a sidenote\makenote*[paragraphs]{\lstinline!\IXS!}


\end{addmargin}
\end{document}

使用当前的 KOMA 脚本时出现此错误:

ERROR: Improper alphabetic constant.

--- TeX said ---
<to be read again> 
                   \IXS 
l.37 \end{document}

--- HELP ---
From the .log file...

A one-character control sequence belongs after a ` mark.
So I'm essentially inserting \0 here.

请参阅下面的评论。看来在参数内使用逐字命令并不容易。

相关内容