svn-multi 和文件名中的空格

svn-multi 和文件名中的空格

我是 svn-multi latex 软件包的忠实用户。我的质量部门现在需要包含空格的新文件名。

当我更改包含空格的文件名时,出现以下乳胶错误:

Package: svn-multi 2011/08/30 v2.4d SVN Keywords for multi-file LaTeX documents

)
Runaway argument?
! Paragraph ended before \@svn@scandate@ was complete.
<to be read again> 
                   \par 
l.194 
      
I suspect you've forgotten a `}', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

latex源代码行是:

\usepackage{svn-multi}
\svnid{$Id: H4FB105 Benutzerhandbuch.tex 8085 2022-08-25 15:02:54Z oehhar $}

如果文件名中的空格被下划线替换:

\usepackage{svn-multi}
\svnid{$Id: H4FB105_Benutzerhandbuch.tex 8085 2022-08-25 15:02:54Z oehhar $}

整个过程正常进行。

建议在以下位置发布错误报告:

https://sourceforge.net/p/svn-multi/tickets/


为了避免这个问题,我使用了:

\svnidlong
{$HeadURL: svn://elmifile/manual/H4FB105%20Benutzerhandbuch.tex $}
{$LastChangedDate: 2022-08-25 17:45:44 +0200 (Do, 25. Aug 2022) $}
{$LastChangedRevision: 8087 $}
{$LastChangedBy: oehhar $}

效果很好。

尽管如此,如果 Id 也能用就太好了。我更喜欢它,因为它更紧凑,而且我不需要 URL 功能。

我是不是忽略了某些显而易见的东西,或者这是一个错误?任何帮助表示感谢。


环境:

  • Windows 10 64 位操作系统
  • 密克泰克斯
  • svn-多 2011/08/30 v2.4d
  • pdftex
  • 纺织工作室

谢谢大家,哈拉尔

答案1

我是的作者svn-multi,并假设文件名将被编码,以便空格的书写方式%20与 URL 关键字一样。

为了支持此功能,必须调整 ID 扫描仪。我会将其添加到包中并尽快发布。


解决方案:我现在在用户名后添加(回)一个空格(因为它事先被删除了),并检查最后一个空格后是否有空字段。如果不为空,则会出现更多字段,正如预期的那样,因此前两个字段是文件名的一部分。然后我重复此扫描,直到最后一个字段为空:

\documentclass{article}
\usepackage{svn-multi}
\makeatletter

\def\svnkwsave@readargs#1{%
    \svnkwsave@read#1\relax
  \endgroup
  \if@svnidsw
    \ifx\svnkwId\empty\else
      \expandafter\expandafter\expandafter
      \svn@scanId\expandafter\svnkwId\space\relax
      \@svnidswfalse
    \fi
  \fi
  \ignorespaces
}

\def\svn@scanId@#1 #2 #3 #4 #5 #6\relax{%
  \@svn@scandate{#3 #4}%
  \svnkwdef{Filename}{#1}%
  \svnkwdef{Date}{#3 #4}%
  \svnkwdef{Revision}{#2}%
  \svnkwdef{Author}{#5}%
  \@svn@updateid{\svnkw{Revision}}{\svnkw{Date}}{\svnkw{Author}}{\svnkw{URL}}%
}

\def\svn@scanId@#1 #2 #3 #4 #5 #6\relax{%
  \begingroup
  \def\@tempa{#6}%
  \ifx\@tempa\@empty
    \endgroup
    \@svn@scandate{#3 #4}%
    \svnkwdef{Filename}{#1}%
    \svnkwdef{Date}{#3 #4}%
    \svnkwdef{Revision}{#2}%
    \svnkwdef{Author}{#5}%
    \@svn@updateid{\svnkw{Revision}}{\svnkw{Date}}{\svnkw{Author}}{\svnkw{URL}}%
  \else
    \def\@tempa{\svn@scanId@{#1 #2} #3 #4 #5 #6\relax}%
    \expandafter\expandafter
    \expandafter\endgroup
    \expandafter\@tempa
  \fi
}
\makeatother
\svnid{$Id: H4FB105 Benutzerhandbuch.tex 8085 2022-08-25 15:02:54Z oehhar $}
\begin{document}
\svnkw{Revision}

\svnkw{Date}

\svnkw{Author}

\svnkw{URL}

\svnkw{Filename}

\end{document}

答案2

如果你的文件名总是有一个,.你可以防止在.

\documentclass{article}
\usepackage{svn-multi}
\makeatletter
\def\svn@scanId@#1.#2 #3 #4 #5 #6\relax{%
  \@svn@scandate{#4 #5}%
  \svnkwdef{Filename}{#1.#2}%
  \svnkwdef{Date}{#4 #5}%
  \svnkwdef{Revision}{#3}%
  \svnkwdef{Author}{#6}%
  \@svn@updateid{\svnkw{Revision}}{\svnkw{Date}}{\svnkw{Author}}{\svnkw{URL}}%
}
\makeatother
\svnid{$Id: H4FB105 Benutzerhandbuch.tex 8085 2022-08-25 15:02:54Z oehhar $}
\begin{document}

\end{document}

相关内容