我正在使用 gchords 包,并且想要零边距(和弦进入图像)或保证边距是我可以修剪的一定数量的像素。
\documentclass[preview]{standalone}
\usepackage{gchords}
\begin{document}
\hsize=0mm
\begin{verse}
\smallchords
\chord{}{n,n,p1,p1,p1,n}{}
\end{verse}
\end{document}
我不确定这是否重要,但这是一个转换为图像的示例:
dvipng -D 450 -o gchtest.png gchtest.dvi
任何帮助都非常感谢!
答案1
至少有三个问题,我最多可以解决其中两个。
第一个问题是它verse
是一个列表。因此,它的内容将被缩进,就像列表通常那样。这可以通过不使用它来解决。standalone
喜欢环境,但我们可以创建一个不做任何事的包装器环境来创建一个组,以使其满意。
那很简单。
第二个问题是,gchords.sty
至少在某些方面,它写得非常糟糕。这里特别有趣的是,它引入了大量各种空白。它随机注释行尾,而这些行尾本来也不会引入空格,然后包括空行、未注释的行尾、注释的行尾前面有空格等等。
软件包维护者应该在软件包中解决这个问题。举例来说,我修改了\smallchords
\chord` 以删除大部分虚假空格。我没有删除不必要的注释符号,其中也有很多,因为它们没有实际危害。
理论上,这个问题很容易解决,但必须有人仔细检查包并进行相关工作,维护人员必须接受更改(或做出更改)并将结果推送到 CTAN。或者,您可以通过将包复制到新名称、更改横幅并自行修复代码来分叉包。
0
第三,我认为最左边的字符串位于和的中间1
,但我不确定如何-0.5
通过或来1
调整它-1
。
另外,我不确定这是否是必需的,或者这是否真的是图表本身的一部分。
在下面的代码中,我将\xoff
和\yoff
设置0
为用于说明目的。同样,也许这些应该是2
。将它们设置为0
应该将图表的左下角置于0,0
,这表明0.5
偏移量应该是图表的一部分。我不知道这样的图表应该是什么样子,所以说不准。
结果如下:
\documentclass[]{standalone}
\usepackage{gchords}
\newenvironment{mychords}{}{}
\standaloneenv{mychords}
\makeatletter
\renewcommand\chord[3]{%
\vbox{%
\hbox{%
\ascale=\chordsize
\truewidth=\strings\advance\truewidth by -1%
\advance\truewidth by \xoff
\topline=\numfrets
\advance\topline by \yoff
\advance\topline by 2%
%
% %%% The Diagram itself %%%%%%%%%
\unitlength\ascale
\begin{picture}(\truewidth,\topline)%
\advance\topline by -1%
\advance\truewidth by -\xoff
\myvpos=\yoff\advance\myvpos by \numfrets
%%% Parse the modifier string %%
\newcommand\topbar{n}%
\@tfor\modstr:=#1\do
{%
\def\ttest{t}%
\ifx\modstr\ttest{\linethickness{\topfretsiz}\put(\xoff,\myvpos){\chline{\truewidth}}\thinlines}%
\else
{%
\advance\topline by -1%
\put(\xoff,\topline){%
\hbox to 0pt{\hss\fretposfont\modstr~}%
}%
}%
\fi%
}%
%
% %%% Horizontal lines (frets)%%%%
\mylength=0%
\myvpos=\yoff
\advance\myvpos by 1% % first fret starts a bit higher
\@whilenum \mylength<\numfrets \do {%
\put(\xoff,\myvpos){%
\chline{\truewidth}%
}%
\advance\mylength by 1%
\advance\myvpos by 1}%
%
% %%% The Dots %%%%%%%%%%%%%%%%%%%
\newcommand\fnow{n}%
\newcommand\pnow{n}%
\newcommand\snow{n}%
\newcommand\Lnow{n}%
%
\edef\notelabel{}%
%
\putdots{#2}{\chordsize}%
\put(\xoff,0){\hbox to \truewidth\ascale{\hss\namefont #3\hss}}%
\end{picture}%
}%
}%
}
\renewcommand\smallchords{%
\def\chordsize{2.0mm}% % distance between two frets (and two strings)
\font\fingerfont=cmr5% % font used for numbering fingers
\font\namefont=cmr10% % font used for labeling of the chord
\font\fretposfont=cmr7% % font used for the fret position marker
\def\dampsymbol{$\scriptstyle\times$}% % symbol of the `damp this string' marker
\def\opensymbol{$\scriptstyle\circ$}% % symbol of the `open string' marker
}
\renewcommand\xoff{0}
\renewcommand\yoff{0}
\makeatother
\begin{document}
\begin{mychords}
\smallchords
\chord{}{n,n,p1,p1,p1,n}{}%
\end{mychords}
\end{document}
请注意,包文件不应该使用\makeatletter
,并且当读取包文件时。 已经是一个字母\makeatother
。@
我尝试删除 中的空格\putdots
。然而,这对结果没有任何影响。