出乎意料的是,我的 Gnuplot 开始出现pdfcairo终端问题。生成的 PDF 文件中的字体被卡住,就好像单个字符的宽度设置为零一样。我在 Mac OS 上使用 Gnuplot 5.2.7,通过自制软件安装。
在这里,一个最小的不工作的例子:
reset
set terminal pdfcairo
set output "mnwe.pdf"
set xlabel "Time t"
set ylabel "sin(t)"
plot [0:2*pi] sin(x) with lines notitle
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
我怀疑字体问题是在最近更新到补丁级别 7 之后发生的。我的 Ubuntu 机器上的 Gnuplot 5.2.2 按预期工作,并为相同的 Gnuplot 脚本生成以下输出:
不幸的是,似乎不可能使用自制软件恢复到以前的 Gnuplot 版本。
我确认epscairo和pngcairo终端在使用 Gnuplot 5.2.7 的 Mac 上按预期工作,因此问题仅在于pdfcairo终端。
编辑:事实上,该错误也影响了其他位于开罗的终端。不知道我第一次检查时做错了什么。
我将不胜感激有关如何解决此问题的任何指示。
如何将C strings(char* cstrings[])数组传递给Fortran子例程?
问题使用iso_c_binding的fortran-C桥接器中的字符串数组肯定是相关的,但答案似乎不正确,甚至不能用GNU Fortran编译.
我目前正在为Fortran代码开发一个C接口,我预计iso_c_binding(我之前使用过的)会让这件事变得轻而易举.到目前为止C字符串数组没有运气......
Fortran子例程应该将一个字符串数组作为参数.在普通的Fortran中,我会写如下内容:
subroutine print_fstring_array(fstring)
implicit none
character(len=*), dimension(:), intent(in) :: fstring
integer :: i
do i = 1, size(fstring)
write(*,*) trim(fstring(i))
end do
end subroutine print_fstring_array
Run Code Online (Sandbox Code Playgroud)
将单个C字符串传递给Fortran的一种方法是作为C指针(c_ptr)(我知道,我也可以使用一个数组character(kind=c_char))
subroutine print_cstring(cstring) bind(C)
use iso_c_binding, only: c_ptr, c_f_pointer, c_loc, c_null_char
implicit none
type(c_ptr), target, intent(in) :: cstring
character(len=1024), pointer :: fstring
integer :: slen
call c_f_pointer(c_loc(cstring), fstring)
slen = index(fstring, c_null_char) - 1
write(*,*) fstring(1:slen)
end subroutine print_cstring …Run Code Online (Sandbox Code Playgroud)